Hacker News

فاصله همینگ برای جستجوی ترکیبی در SQLite

فاصله همینگ برای جستجوی ترکیبی در SQLite این اکتشاف به بررسی hamming می پردازد و اهمیت و تأثیر بالقوه آن را بررسی می کند. مفاهیم اصلی پوشش داده شده است این محتوا بررسی می کند: اصول و نظریه های بنیادی تمرین کن...

1 min read Via notnotp.com

Mewayz Team

Editorial Team

Hacker News

فاصله همینگ یک معیار تشابه اساسی است که بیت‌های مختلف را بین دو رشته باینری شمارش می‌کند و آن را به یکی از سریع‌ترین و کارآمدترین روش‌ها برای جستجوی تقریبی نزدیک‌ترین همسایه در پایگاه‌های داده تبدیل می‌کند. وقتی از طریق معماری‌های جستجوی ترکیبی روی SQLite اعمال می‌شود، فاصله Hamming قابلیت‌های جستجوی معنایی درجه سازمانی را بدون سربار پایگاه‌های داده برداری اختصاصی باز می‌کند.

فاصله همینگ چیست و چرا برای جستجوی پایگاه داده اهمیت دارد؟

فاصله همینگ تعداد موقعیت‌هایی را که دو رشته دوتایی با طول مساوی با هم متفاوت هستند را اندازه‌گیری می‌کند. به عنوان مثال، رشته های باینری 10101100 و 10001101 دارای فاصله همینگ 2 هستند، زیرا دقیقاً در دو موقعیت بیت متفاوت هستند. در زمینه های جستجوی پایگاه داده، این محاسبه به ظاهر ساده بسیار قدرتمند می شود.

جستجوی سنتی SQL به تطابق دقیق یا نمایه‌سازی متن کامل متکی است، که با شباهت معنایی مبارزه می‌کند — یافتن نتایجی که به‌جای اشتراک‌گذاری کلمات کلیدی یکسان، منظور یکسانی دارند. فاصله همینگ این شکاف را با کار بر روی کدهای هش باینری مشتق شده از جاسازی محتوا پر می کند و به پایگاه های داده ای مانند SQLite اجازه می دهد میلیون ها رکورد را در میلی ثانیه با استفاده از عملیات XOR بیتی مقایسه کنند.

این معیار توسط ریچارد همینگ در سال 1950 در زمینه کدهای تصحیح خطا معرفی شد. دهه‌ها بعد، به ویژه در سیستم‌هایی که سرعت بیش از دقت کامل اهمیت دارد، به مرکزی برای بازیابی اطلاعات تبدیل شد. محاسبه O(1) آن در هر مقایسه (با استفاده از دستورالعمل‌های popcount CPU) باعث می‌شود که برای موتورهای پایگاه داده تعبیه‌شده و سبک وزن مناسبی منحصر به فرد داشته باشد.

چگونه جستجوی ترکیبی فاصله Hamming را با جستجوهای SQLite سنتی ترکیب می‌کند؟

جستجوی ترکیبی در SQLite دو استراتژی بازیابی مکمل را ترکیب می‌کند: جستجوی کلمه کلیدی پراکنده (با استفاده از پسوند جستجوی متن کامل FTS5 داخلی SQLite) و جستجوی شباهت متراکم (با استفاده از فاصله همینگ در جاسازی‌های کوانتیزه شده باینری). هیچ یک از این روش ها به تنهایی برای نیازهای جستجوی مدرن کافی نیست.

یک خط لوله جستجوی ترکیبی معمولی به شرح زیر عمل می کند:

  1. تولید جاسازی: هر سند یا رکورد با استفاده از مدل زبان یا تابع رمزگذاری به یک بردار ممیز شناور با ابعاد بالا تبدیل می‌شود.
  2. کوانتیزه‌سازی باینری: بردار شناور با استفاده از تکنیک‌هایی مانند SimHash یا نمایش تصادفی به یک هش باینری فشرده (مثلاً 64 یا 128 بیت) فشرده می‌شود و نیازهای ذخیره‌سازی را به شدت کاهش می‌دهد.
  3. ذخیره‌سازی نمایه Hamming: هش باینری به‌عنوان یک ستون INTEGER یا BLOB در SQLite ذخیره می‌شود و عملیات بیتی سریع را در زمان درخواست امکان‌پذیر می‌کند.
  4. امتیاز در زمان پرس و جو: وقتی کاربر درخواستی را ارسال می‌کند، SQLite فاصله Hamming را از طریق یک تابع اسکالر سفارشی با استفاده از XOR و popcount محاسبه می‌کند و نامزدها را بر اساس شباهت بیت مرتب می‌کند.
  5. تلفیقی امتیاز: نتایج جستجوی معنایی مبتنی بر Hamming و جستجوی کلیدواژه FTS5 با استفاده از ترکیب رتبه‌بندی متقابل (RRF) یا امتیازدهی وزنی برای ایجاد فهرست رتبه‌بندی نهایی ادغام می‌شوند.

توسعه پذیری SQLite از طریق پسوندهای قابل بارگیری یا توابع کامپایل شده، این معماری را بدون مهاجرت به یک سیستم پایگاه داده سنگین تر قابل دستیابی می کند. نتیجه یک موتور جستجوی مستقل است که در هر جایی که SQLite اجرا می‌شود اجرا می‌شود - از جمله دستگاه‌های جاسازی شده، برنامه‌های تلفن همراه، و استقرارهای لبه.

بینش کلیدی: جستجوی همینگ باینری در هش‌های 64 بیتی تقریباً 30 تا 50 برابر سریع‌تر از شباهت کسینوس در بردارهای float32 کامل با ابعاد معادل است. برای برنامه‌هایی که نیاز به تأخیر جستجوی زیر 10 میلی‌ثانیه در میلیون‌ها رکورد بدون سخت‌افزار تخصصی دارند، فاصله همینگ در SQLite اغلب بهترین مبادله مهندسی بین دقت و عملکرد است.

ویژگی های عملکرد جستجوی Hamming در SQLite چیست؟

SQLite یک پایگاه داده بدون سرور تک فایلی است که محدودیت ها و فرصت های منحصر به فردی را برای اجرای جستجوی فاصله همینگ ایجاد می کند. SQLite بدون ساختارهای نمایه‌سازی برداری بومی مانند HNSW یا IVF (که در فروشگاه‌های بردار اختصاصی یافت می‌شود)، به اسکن خطی برای جستجوی Hamming متکی است - اما این کمتر از آنچه به نظر می‌رسد محدود است.

محاسبات فاصله همینگ 64 بیتی فقط به یک XOR و سپس یک popcount (تعداد جمعیت، شمارش بیت های مجموعه) نیاز دارد. CPU های مدرن این کار را در یک دستورالعمل واحد اجرا می کنند. اسکن خطی کامل 1 میلیون هش 64 بیتی تقریباً در 5 تا 20 میلی ثانیه روی سخت‌افزار کالا کامل می‌شود و SQLite را برای مجموعه‌های داده تا چندین میلیون رکورد بدون ترفندهای نمایه‌سازی اضافی عملی می‌کند.

💡 DID YOU KNOW?

Mewayz replaces 8+ business tools in one platform

CRM · Invoicing · HR · Projects · Booking · eCommerce · POS · Analytics. Free forever plan available.

Start Free →

برای مجموعه داده‌های بزرگ‌تر، بهبود عملکرد از پیش فیلتر کردن نامزد به دست می‌آید: استفاده از بندهای WHERE SQLite برای حذف ردیف‌ها بر اساس فراداده (محدوده‌های تاریخ، دسته‌ها، بخش‌های کاربر) قبل از اعمال فاصله همینگ، کاهش اندازه موثر اسکن با مرتبه‌های بزرگی. اینجاست که معماری‌های جستجوی ترکیبی واقعاً می‌درخشند - فیلتر کلمه کلیدی پراکنده به عنوان یک پیش فیلتر سریع عمل می‌کند و فاصله همینگ، نامزدهای باقی مانده را مجدداً رتبه‌بندی می‌کند.

چگونه یک تابع فاصله همینگ را در SQLite پیاده سازی می کنید؟

SQLite تابع فاصله Hamming بومی را شامل نمی شود، اما API پسوند C آن، ثبت توابع اسکالر سفارشی را آسان می کند. در پایتون با استفاده از ماژول sqlite3، می توانید تابعی را ثبت کنید که فاصله همینگ بین دو عدد صحیح را محاسبه می کند:

این تابع دو آرگومان عدد صحیح را که هش‌های باینری را نشان می‌دهند، می‌پذیرد، XOR آنها را محاسبه می‌کند، سپس بیت‌های مجموعه را با استفاده از bin().count('1') پایتون یا یک رویکرد دستکاری بیت سریع‌تر می‌شمارد. پس از ثبت، این تابع مانند هر تابع داخلی در جستجوهای SQL در دسترس قرار می گیرد، و پرس و جوهایی مانند انتخاب ردیف هایی را که فاصله همینگ تا هش پرس و جو زیر یک آستانه قرار می گیرد، فعال می کند، که بر اساس افزایش فاصله مرتب می شود تا ابتدا نزدیکترین موارد منطبق را بازیابی کند.

برای استقرار تولید، کامپایل کردن منطق popcount به عنوان یک پسوند C با استفاده از API sqlite3_create_function SQLite، 10 تا 100 برابر عملکرد بهتری نسبت به Python تفسیر شده دارد، و جستجوی Hamming SQLite را در دسترس پایگاه‌های داده‌های بردار تخصصی برای بسیاری از کارهای عملی قرار می‌دهد.

چه زمانی کسب‌وکارها باید جستجوی SQLite Hamming را از پایگاه‌های داده وکتور اختصاصی انتخاب کنند؟

انتخاب بین جستجوی Hamming مبتنی بر SQLite و پایگاه‌های داده برداری اختصاصی مانند Pinecone، Weaviate یا pgvector به مقیاس، پیچیدگی عملیاتی و محدودیت‌های استقرار بستگی دارد. جستجوی SQLite Hamming زمانی که سادگی، قابلیت حمل و هزینه بیشتر اهمیت دارد، انتخاب مناسبی است - که در مورد اکثر برنامه‌های تجاری صدق می‌کند.

پایگاه های داده برداری اختصاصی سربار عملیاتی قابل توجهی را معرفی می کنند: زیرساخت جداگانه، تأخیر شبکه، پیچیدگی همگام سازی، و هزینه قابل توجه در مقیاس. برای برنامه‌هایی که ده‌ها هزار تا میلیون‌ها رکورد را ارائه می‌کنند، جستجوی SQLite Hamming ارتباط قابل مقایسه با کاربر را با زیرساخت‌های اضافی صفر ارائه می‌دهد. فهرست جستجوی شما را با داده‌های برنامه‌تان هم‌آمیزی می‌کند و یک دسته کامل از حالت‌های خرابی سیستم‌های توزیع‌شده را حذف می‌کند.

سوالات متداول

آیا جستجوی فاصله همینگ برای برنامه های جستجوی تولید به اندازه کافی دقیق است؟

فاصله همینگ در جاسازی‌های باینری کوانتیزه شده، مقدار کمی دقت یادآوری را برای افزایش سرعت عظیم معامله می‌کند. در عمل، کوانتیزاسیون باینری معمولاً 90 تا 95 درصد از کیفیت فراخوانی جستجوی شباهت کسینوس کامل float32 را حفظ می‌کند. برای اکثر برنامه های کاربردی جستجوی تجاری - کشف محصول، بازیابی اسناد، پایگاه های دانش پشتیبانی مشتری - این مبادله کاملاً قابل قبول است و کاربران نمی توانند تفاوت کیفیت نتیجه را درک کنند.

آیا SQLite می‌تواند خواندن و نوشتن همزمان را در طول عبارت‌های جستجوی Hamming انجام دهد؟

SQLite از خواندن همزمان از طریق حالت WAL (Logging پیش از نوشتن) پشتیبانی می‌کند و به چندین خواننده اجازه می‌دهد به طور همزمان بدون مسدود کردن پرس و جو کنند. همزمانی نوشتن محدود است - SQLite نوشتن را به صورت سریالی انجام می دهد - اما این به ندرت یک گلوگاه برای بارهای کاری سنگین است که در آن نوشتن نسبت به خواندن نادر است. برای برنامه‌های جستجوی ترکیبی فشرده خواندن، حالت WAL SQLite کاملاً کافی است.

کوانتیزاسیون باینری چگونه بر نیازهای ذخیره سازی در مقایسه با بردارهای شناور تأثیر می گذارد؟

صرفه جویی در فضای ذخیره سازی چشمگیر است. یک تعبیه معمولی 768 بعدی float32 به 3072 بایت (3 کیلوبایت) در هر رکورد نیاز دارد. یک هش باینری 128 بیتی از همان جاسازی فقط به 16 بایت نیاز دارد - کاهش 192 برابری. برای مجموعه داده ای از 1 میلیون رکورد، این به معنای تفاوت بین 3 گیگابایت و 16 مگابایت فضای ذخیره سازی جاسازی شده است، که جستجوی مبتنی بر Hamming را در محیط های دارای محدودیت حافظه که در آن ذخیره سازی شناور کامل غیرعملی است، امکان پذیر می کند.


ساخت محصولات هوشمند و قابل جستجو دقیقاً همان قابلیتی است که مشاغل در حال رشد را از مشاغل راکد جدا می کند. Mewayz سیستم‌عامل کسب‌وکار همه‌جانبه مورد اعتماد بیش از 138000 کاربر است و 207 ماژول یکپارچه را ارائه می‌دهد - از CRM و تجزیه و تحلیل گرفته تا مدیریت محتوا و فراتر از آن - از 19 دلار در ماه شروع می‌شود. دوختن ابزارهای جدا شده را متوقف کنید و شروع به ساختن روی یک پلت فرم طراحی شده برای مقیاس کنید.

سفر Mewayz خود را همین امروز در app.mewayz.com شروع کنید و تجربه کنید که یک سیستم عامل کسب و کار واقعاً یکپارچه می تواند برای تیم شما انجام دهد.