LatticeDB؛ گراف و بردار و جستوجوی متن تو یه فایل
خلاصهٔ کاملتر
LatticeDB یه دیتابیس امبدده که خودشو «SQLite برای دادههای بههموصل» معرفی میکنه. کل گراف، بردارها و ایندکسهای متنی تو یه فایل ذخیره میشن و همهشون با یه موتور و یه زبان کوئری، یعنی Cypher (همون زبان کوئری گرافی که Neo4j هم ازش استفاده میکنه)، قابل پرسوجو هستن. تو سایت پروژه اومده که تراکنشهای ACID، استریمهای ماندگار و changefeed گراف هم بخشی از همین یه کتابخونهن.
کار اصلیش اینه که سه مدل جستوجو رو تو یه کوئری با هم ترکیب میکنه: شباهت برداری، جستوجوی تماممتن BM25 و پیمایش رابطهها. یعنی بهجای اینکه یه دیتابیس برداری و یه گراف جدا نگه داری و نتیجهها رو تو کد به هم بچسبونی، همهش یهجا انجام میشه:
MATCH (chunk:Chunk)-[:PART_OF]->(doc:Document)-[:AUTHORED_BY]->(author:Person)
WHERE chunk.embedding <=> $query_vector < 0.3
AND doc.content @@ "neural networks"
RETURN doc.title, chunk.text, author.name
ORDER BY chunk.embedding <=> $query_vector
LIMIT 10عددهایی که خود پروژه منتشر کرده: جستوجوی ۱۰ همسایهٔ نزدیک روی یک میلیون بردار ۰.۸۳ میلیثانیه با recall صددرصد، پیدا کردن یه نود ۰.۱۳ میکروثانیه، جستوجوی تماممتن ۱۹ میکروثانیه (حدود ۳۰۰ برابر سریعتر از FTS5 در SQLite) و پیمایش دوگامی روی ۱۰۰ هزار نود ۳۹ میکروثانیه در برابر ۵۴۸ میکروثانیهٔ SQLite. خودشون هم صادقانه نوشتن فقط ردیف SQLite روی همون ماشین تست شده و بقیهٔ عددها از منابع ثالث برداشته شده.
نسخهٔ ۰.۱۰.۰ سه چیز رو آورده. اول ایندکسهای ماندگار روی پراپرتی نود و یال که planner کوئری واقعاً ازشون استفاده میکنه و وقتی ایندکس هست، دیگه بیسروصدا به اسکن کامل برنمیگرده. دوم مالکیت نوشتن سختگیرانهتر: هر handle فقط یه تراکنش read-write فعال داره و نویسندهٔ دوم بهجای اینکه با اولی مسابقه بده، خطای contention میگیره. سوم پسگرفتن فضا؛ دستور lattice compact صفحههای آزاد رو از ته فایل قیچی میکنه.
نکات کلیدی:
- گراف، بردار، تماممتن BM25، استریم ماندگار و تراکنش ACID تو یه فایل، با یه زبان کوئری
- جستوجوی ۱۰ همسایه روی ۱ میلیون بردار: ۰.۸۳ میلیثانیه با recall صددرصد، روی HNSW با M و ef قابل تنظیم
- پیمایش دوگامی روی ۱۰۰ هزار نود: ۳۹ میکروثانیه مقابل ۵۴۸ میکروثانیهٔ SQLite؛ فقط همین ردیف head-to-head تست شده
- نسخهٔ ۰.۱۰.۰: ایندکس ماندگار پراپرتی، یک نویسندهٔ فعال بهازای هر handle و lattice compact برای آزادسازی فضا
- نصب با pip install latticedb یا npm install @hajewski/latticedb




