Hacker News

Hamingo atstumas hibridinei paieškai SQLite

Hamingo atstumas hibridinei paieškai SQLite Šis tyrinėjimas gilinasi į kalimą, nagrinėja jo reikšmę ir galimą poveikį. Apimtos pagrindinės sąvokos Šiame turinyje nagrinėjama: Pagrindiniai principai ir teorijos Prac...

8 min read Via notnotp.com

Mewayz Team

Editorial Team

Hacker News

Hammingo atstumas yra pagrindinė panašumo metrika, kuri skaičiuoja skirtingus dviejų dvejetainių eilučių bitus, todėl tai yra vienas greičiausių ir efektyviausių metodų apytiksliai artimiausio kaimyno paieškai duomenų bazėse. Pritaikius SQLite per hibridines paieškos architektūras, Hamingo atstumas atrakina įmonės lygio semantinės paieškos galimybes be specialių vektorinių duomenų bazių.

Kas yra Hamingo atstumas ir kodėl jis svarbus paieškai duomenų bazėse?

Hammingo atstumas matuoja padėčių, kuriose skiriasi dvi vienodo ilgio dvejetainės eilutės, skaičių. Pavyzdžiui, dvejetainių eilučių 10101100 ir 10001101 Hamingo atstumas yra 2, nes jos skiriasi tiksliai dviem bitų pozicijomis. Duomenų bazės paieškos kontekste šis, atrodytų, paprastas skaičiavimas tampa nepaprastai galingas.

Tradicinė SQL paieška remiasi tikslios atitikties arba viso teksto indeksavimu, kuris kovoja su semantiniu panašumu – randama rezultatų, reiškiančių tą patį, o ne dalijantis identiškais raktiniais žodžiais. Hamming atstumas užpildo šią spragą, naudodamas dvejetainius maišos kodus, gautus iš turinio įterpimų, leidžiant tokioms duomenų bazėms kaip SQLite milisekundėmis palyginti milijonus įrašų naudojant bitines XOR operacijas.

Metriką 1950 m. pristatė Richardas Hamingas, naudodamas klaidų taisymo kodus. Po kelių dešimtmečių ji tapo svarbia informacijos paieškai, ypač sistemose, kuriose greitis yra svarbesnis už tobulą tikslumą. Dėl O(1) skaičiavimo pagal palyginimą (naudojant CPU popcount instrukcijas), jis yra unikalus įterptųjų ir lengvų duomenų bazių varikliams.

Kaip hibridinė paieška sujungia Hamingo atstumą su tradicinėmis SQLite užklausomis?

Hibridinė paieška SQLite sujungia dvi viena kitą papildančias paieškos strategijas: negausią raktinių žodžių paiešką (naudojant SQLite integruotą FTS5 viso teksto paieškos plėtinį) ir tankią panašumo paiešką (naudojant Hamingo atstumą dvejetainiuose kvantiniuose įterpimuose). Nė vieno požiūrio nepakanka šiuolaikiniams paieškos reikalavimams.

Įprastas hibridinis paieškos vamzdynas veikia taip:

  1. Įterpimo generavimas: kiekvienas dokumentas arba įrašas konvertuojamas į didelio matmens slankiojo kablelio vektorių, naudojant kalbos modelį arba kodavimo funkciją.
  2. Dvejetainis kvantavimas: slankusis vektorius suspaudžiamas į kompaktišką dvejetainį maišą (pvz., 64 arba 128 bitų), naudojant tokius metodus kaip „SimHash“ arba atsitiktinė projekcija, taip smarkiai sumažinant saugyklos poreikius.
  3. Hammingo indekso saugykla: dvejetainė maiša saugoma kaip INTEGER arba BLOB stulpelis sistemoje SQLite, todėl užklausos metu galima greitai atlikti bitines operacijas.
  4. Užklausos laiko įvertinimas: kai naudotojas pateikia užklausą, SQLite apskaičiuoja Hamingo atstumą naudodama pasirinktinę skaliarinę funkciją, naudodama XOR ir popcount, grąžindama kandidatus, surūšiuotus pagal bitų panašumą.
  5. Balų suliejimas: Hamingo semantinės paieškos ir FTS5 raktinių žodžių paieškos rezultatai sujungiami naudojant abipusį reitingų susiliejimą (RRF) arba svertinį balą, kad būtų sudarytas galutinis reitinguotų sąrašas.

„SQLite“ išplečiamumas naudojant įkeliamus plėtinius arba sukompiliuotas funkcijas leidžia pasiekti šią architektūrą neperkėlus į sunkesnę duomenų bazių sistemą. Rezultatas yra savarankiškas paieškos variklis, kuris veikia visur, kur veikia SQLite, įskaitant įterptuosius įrenginius, programas mobiliesiems ir kraštinius diegimus.

Pagrindinė įžvalga: dvejetainė Hamingo paieška naudojant 64 bitų maišą yra maždaug 30–50 kartų greitesnė nei kosinuso panašumas naudojant lygiaverčio matmens visiškai float32 vektorius. Programoms, kurioms reikalingas mažesnis nei 10 ms paieškos delsa milijonuose įrašų be specializuotos aparatinės įrangos, Hamingo atstumas SQLite dažnai yra optimalus inžinerinis kompromisas tarp tikslumo ir našumo.

Kokios yra Hamingo paieškos SQLite našumo charakteristikos?

SQLite yra vieno failo duomenų bazė be serverio, kuri sukuria unikalius apribojimus ir galimybes įgyvendinti Hamingo nuotolio paiešką. Be vietinių vektorių indeksavimo struktūrų, pvz., HNSW ar IVF (randamų tam skirtose vektorių parduotuvėse), SQLite naudoja linijinį Hamingo paieškos nuskaitymą, tačiau tai yra mažiau ribojanti, nei atrodo.

64 bitų Hamingo atstumui apskaičiuoti reikalingas tik XOR, po kurio seka popcount (populiacijų skaičius, skaičiavimo rinkinio bitai). Šiuolaikiniai procesoriai tai vykdo viena instrukcija. Visas linijinis 1 milijono 64 bitų maišos nuskaitymas užbaigiamas per maždaug 5–20 milisekundžių, naudojant aparatinę įrangą, todėl SQLite yra praktiškas duomenų rinkiniuose iki kelių milijonų įrašų be papildomų indeksavimo gudrybių.

💡 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 →

Didesnių duomenų rinkinių našumas pagerinamas naudojant išankstinį filtravimą: naudojant SQLite WHERE sąlygas, kad būtų pašalintos eilutės pagal metaduomenis (datų sekas, kategorijas, naudotojų segmentus), prieš taikant Hamingo atstumą, sumažinant efektyvų nuskaitymo dydį dydžių tvarka. Čia hibridinės paieškos architektūros tikrai šviečia – retas raktinių žodžių filtras veikia kaip greitas išankstinis filtras, o Hamingo atstumas perskirsto išlikusius kandidatus.

Kaip įdiegti Hamingo atstumo funkciją SQLite?

SQLite neapima savosios Hamingo atstumo funkcijos, bet jos C plėtinio API leidžia lengvai užregistruoti pasirinktines skaliarines funkcijas. Python, naudodami modulį sqlite3, galite užregistruoti funkciją, kuri apskaičiuoja Hamingo atstumą tarp dviejų sveikųjų skaičių:

Funkcija priima du sveikųjų skaičių argumentus, vaizduojančius dvejetaines maišas, apskaičiuoja jų XOR, tada suskaičiuoja nustatytus bitus naudodama Python bin().count('1') arba greitesnį bitų manipuliavimo metodą. Užregistravus šią funkciją, ji tampa prieinama SQL užklausose, kaip ir bet kuri įmontuota funkcija, leidžianti atlikti užklausas, pvz., pasirinkti eilutes, kuriose Hamingo atstumas iki užklausos maišos nukrenta žemiau slenksčio, išdėstytas pagal atstumą didėjančia tvarka, kad pirmiausia būtų gautos artimiausios atitiktys.

Gamybos diegimo atveju popcount logikos kompiliavimas kaip C plėtinys naudojant SQLite sqlite3_create_function API užtikrina 10–100 kartų geresnį našumą nei interpretuotas Python, todėl SQLite Hamming paieška yra pasiekiama specializuotose vektorinėse duomenų bazėse daugeliui praktinių darbo krūvių.

Kada įmonės turėtų rinktis SQLite Hamming Search, o ne tam skirtas vektorines duomenų bazes?

Pasirinkimas tarp SQLite pagrįstos Hamming paieškos ir tam skirtų vektorinių duomenų bazių, tokių kaip Pinecone, Weaviate arba pgvector, priklauso nuo masto, veikimo sudėtingumo ir diegimo apribojimų. „SQLite Hamming“ paieška yra tinkamas pasirinkimas, kai svarbiausia yra paprastumas, perkeliamumas ir kaina – taip yra daugumoje verslo programų.

Specialiose vektorinėse duomenų bazėse atsiranda didelės veiklos sąnaudos: atskira infrastruktūra, tinklo delsa, sinchronizavimo sudėtingumas ir didelės išlaidos. Programoms, aptarnaujančioms nuo dešimčių tūkstančių iki mažų milijonų įrašų, SQLite Hamming paieška suteikia panašią naudotojo svarbą ir jokios papildomos infrastruktūros. Ji kartu nustato paieškos indeksą su programos duomenimis, pašalindama visą paskirstytų sistemų gedimo režimų kategoriją.

Dažniausiai užduodami klausimai

Ar Hamingo atstumo paieška yra pakankamai tiksli gamybos paieškos programoms?

Hammingo atstumas dvejetainiu kvantiniu įterpimu pakeičia nedidelį atkūrimo tikslumą ir suteikia didžiulį greičio padidėjimą. Praktiškai dvejetainis kvantavimas paprastai išlaiko 90–95% viso float32 kosinuso panašumo paieškos atkūrimo kokybės. Daugumoje verslo paieškos programų – produktų atradimo, dokumentų gavimo, klientų aptarnavimo žinių bazės – šis kompromisas yra visiškai priimtinas, o naudotojai negali pastebėti rezultatų kokybės skirtumo.

Ar SQLite gali tvarkyti tuo pačiu metu vykstančius skaitymus ir rašymus Hamingo paieškos užklausų metu?

SQLite palaiko vienu metu vykstantį skaitymą per savo WAL (rašymo į priekį registravimo) režimą, todėl keli skaitytuvai vienu metu gali pateikti užklausą neblokuojant. Rašymo lygiagretumas yra ribotas – SQLite nuosekliai sutvarko rašymą, tačiau tai retai būna kliūtis atliekant sunkų paieškos darbo krūvį, kai rašoma retai, palyginti su skaitymu. Intensyviai skaitančioms hibridinės paieškos programoms visiškai pakanka SQLite WAL režimo.

Kaip dvejetainis kvantavimas veikia saugyklos reikalavimus, palyginti su slankiaisiais vektoriais?

Sutaupoma daug saugyklos vietos. Įprastam 768 matmenų float32 įterpimui vienam įrašui reikia 3 072 baitų (3 KB). To paties įterpimo 128 bitų dvejetainei maišai reikia tik 16 baitų – 192 kartų sumažinimas. 1 milijono įrašų duomenų rinkiniui tai reiškia skirtumą tarp 3 GB ir 16 MB įterptosios saugyklos, todėl Hamingo pagrindu atliekama paieška yra įmanoma atmintis apribotose aplinkose, kur visa slankioji saugykla būtų nepraktiška.


Protingų produktų kūrimas, kurių galima ieškoti, yra būtent tokia galimybė, kuri atskiria augančias įmones nuo sustingusių. Mewayz yra „viskas viename“ verslo OS, kuria pasitiki daugiau nei 138 000 vartotojų, siūlanti 207 integruotus modulius – nuo ​​CRM ir analizės iki turinio valdymo ir ne tik nuo 19 USD per mėnesį. Nustokite sujungti atjungtus įrankius ir pradėkite statyti ant platformos, sukurtos pagal mastą.

Pradėkite savo Mewayz kelionę šiandien adresu app.mewayz.com ir patirkite, ką tikrai vieninga verslo operacinė sistema gali padaryti jūsų komandai.

Try Mewayz Free

All-in-one platform for CRM, invoicing, projects, HR & more. No credit card required.

Start managing your business smarter today

Join 30,000+ businesses. Free forever plan · No credit card required.

Ready to put this into practice?

Join 30,000+ businesses using Mewayz. Free forever plan — no credit card required.

Start Free Trial →

Ready to take action?

Start your free Mewayz trial today

All-in-one business platform. No credit card required.

Start Free →

14-day free trial · No credit card · Cancel anytime