รหัสสำหรับการศึกษามาตรฐานที่อธิบายไว้ในโพสต์บล็อกนี้
LancedB เป็นฐานข้อมูลเวกเตอร์ที่ฝังอยู่และเป็นมิตรกับนักพัฒนาซอฟต์แวร์ คุณสมบัติที่สำคัญบางอย่างเกี่ยวกับ lancingB ที่ทำให้มีค่าอย่างยิ่งมีการระบุไว้ด้านล่างและอื่น ๆ อีกมากมายที่ระบุไว้ใน repo github ของพวกเขา
จุดมุ่งหมายของ repo นี้คือการแสดงให้เห็นถึงคุณสมบัติการค้นหาข้อความและเวกเตอร์ของ LancedB ผ่านเกณฑ์มาตรฐานแบบ end-to-end ซึ่งเราศึกษาผลการสอบถามและปริมาณงานอย่างรอบคอบ
ชุดข้อมูลที่ใช้สำหรับการสาธิตนี้คือชุดข้อมูลรีวิวไวน์จาก Kaggle ซึ่งมีบทวิจารณ์ ~ 130K เกี่ยวกับไวน์พร้อมกับข้อมูลเมตาอื่น ๆ ชุดข้อมูลจะถูกแปลงเป็น zip เก็บถาวรและรหัสสำหรับสิ่งนี้รวมถึงข้อมูล zip มีให้ที่นี่สำหรับการอ้างอิง
การศึกษาประสิทธิภาพของเครื่องมือใด ๆ ในการแยกเป็นสิ่งที่ท้าทายดังนั้นเพื่อการเปรียบเทียบเวิร์กโฟลว์ Elasticsearch มีให้ใน repo นี้ Elasticsearch เป็นเครื่องมือค้นหาข้อความเต็มรูปแบบและเวกเตอร์ที่ใช้ Lucene ซึ่งมีการใช้งานเป็นประจำสำหรับข้อความเต็มรูปแบบ (และวันนี้การค้นหาเวกเตอร์) ดังนั้นจึงทำให้เป็นเครื่องมือที่มีความหมายในการเปรียบเทียบ lancingB กับ
ติดตั้งการพึ่งพาในสภาพแวดล้อมเสมือนจริงผ่าน requirements.txt . txt
# Setup the environment for the first time
python -m venv .venv # python -> python 3.11+
# Activate the environment (for subsequent runs)
source .venv/bin/activate
python -m pip install -r requirements.txtบันทึก
BAAI/bge-small-en-v1.5 )| กรณี | Elasticsearch (QPS) | lancingb (qps) |
|---|---|---|
| FTS: อนุกรม | 399.8 | 468.9 |
| FTS: พร้อมกัน | ค.ศ. 1539.0 | 528.9 |
| การค้นหาเวกเตอร์: อนุกรม | 11.9 | 54.0 |
| การค้นหาเวกเตอร์: พร้อมกัน | 50.7 | 71.6 |
เกณฑ์มาตรฐานอนุกรมที่แสดงด้านล่างเกี่ยวข้องกับการสืบค้นตามลำดับในการซิงค์สำหรับลูปใน Python นี่ไม่ใช่ตัวแทนของกรณีการใช้งานจริงในการผลิต แต่มีประโยชน์ในการทำความเข้าใจประสิทธิภาพของเครื่องมือค้นหาพื้นฐานในแต่ละกรณี (Lucene for Elasticsearch และ Tantivy สำหรับ LancingB)
รายละเอียดเพิ่มเติมเกี่ยวกับเรื่องนี้จะถูกกล่าวถึงในโพสต์บล็อก
| การสอบถาม | Elasticsearch (SEC) | Elasticsearch (QPS) | lancedb (วินาที) | lancingb (qps) |
|---|---|---|---|---|
| 10 | 0.0516 | 193.8 | 0.0518 | 193.0 |
| 100 | 0.2589 | 386.3 | 0.2383 | 419.7 |
| 1,000 | 2.5748 | 388.6 | 2.1759 | 459.3 |
| 10,000 | 25.0318 | 399.8 | 21.3196 | 468.9 |
| การสอบถาม | Elasticsearch (SEC) | Elasticsearch (QPS) | lancedb (วินาที) | lancingb (qps) |
|---|---|---|---|---|
| 10 | 0.8087 | 12.4 | 0.2158 | 46.3 |
| 100 | 7.6020 | 13.1 | 1.6803 | 59.5 |
| 1,000 | 84.0086 | 11.9 | 16.7948 | 59.5 |
| 10,000 | 842.9494 | 11.9 | 185.0582 | 54.0 |
เกณฑ์มาตรฐานที่เกิดขึ้นพร้อมกันได้รับการออกแบบมาเพื่อทำซ้ำกรณีการใช้งานจริงสำหรับ LancedB หรือ Elasticsearch - ที่มีการสืบค้นหลายครั้งในเวลาเดียวกันและส่วนที่เหลือ API ที่ด้านบนของ DB ต้องจัดการคำขอแบบอะซิงโครนัส
บันทึก
multiprocessing ของ Python ในเธรด 4 คน (จำนวนเธรดที่สูงขึ้นส่งผลให้ประสิทธิภาพช้าลง) | การสอบถาม | Elasticsearch (SEC) | Elasticsearch (QPS) | lancedb (วินาที) | lancingb (qps) |
|---|---|---|---|---|
| 10 | 0.0350 | 285.7 | 0.0284 | 351.4 |
| 100 | 0.1243 | 804.1 | 0.2049 | 487.8 |
| 1,000 | 0.6972 | 1434.5 | 1.8980 | 526.8 |
| 10,000 | 6.4948 | ค.ศ. 1539.0 | 18.9136 | 528.9 |
| การสอบถาม | Elasticsearch (SEC) | Elasticsearch (QPS) | lancingb, 4 เธรด (วินาที) | lancedb, 4 เธรด (qps) |
|---|---|---|---|---|
| 10 | 0.2896 | 34.5 | 0.1409 | 71.0 |
| 100 | 2.5275 | 39.6 | 1.3367 | 74.8 |
| 1,000 | 20.4268 | 48.9 | 13.3158 | 75.1 |
| 10,000 | 197.2314 | 50.7 | 139.6330 | 71.6 |