Baza e të dhënave 9.7 e Percona shton pikëzimin e distancës vektoriale në SQL
Versioni 9.7.2-2 i serverit të bazës së të dhënave me burim të hapur të Percona tani u lejon zhvilluesve të llogarisin ngjashmërinë vektoriale drejtpërdrejt në SQL. Funksionet e reja DISTANCE() dhe VECTOR_DISTANCE(), të shpallura nga Catalin Besleaga më 21 shtator 2026, mbështesin metrikat COSINE, EUCLIDEAN, EUCLIDEAN_SQUARED, MANHATTAN dhe DOT. Funksionet vendase të distancës së serverit të bazës së të dhënave upstream janë të disponueshme vetëm në HeatWave, një shërbim i menaxhuar i bazës së të dhënave cloud në infrastrukturën e një ofruesi kryesor cloud të ndërmarrjeve, dhe ato mbulojnë vetëm tre metrika (COSINE, DOT, EUCLIDEAN). Percona sjell të njëjtën aftësi për këdo që ekzekuton këtë server të bazës së të dhënave me burim të hapur në çdo platformë të mbështetur. Karakteristika u përshkrua në një postim në blogun e Percona të shkruar nga Catalin Besleaga dhe të rishikuar nga Dennis Kittrell dhe Peter Zaitsev.
Një vektor është një listë me gjatësi fikse numrash, shpesh e quajtur embedding, e prodhuar nga një model i mësimit të makinerive për të përfaqësuar diçka si tekst, imazh, produkt ose preferencë përdoruesi. Gjërat e ngjashme përfundojnë me vektorë numerikisht të afërt, kështu që llogaritja e distancës midis dy vektorëve lejon renditjen ose filtrimin sipas ngjashmërisë. Ky version 9.7 i serverit të bazës së të dhënave me burim të hapur tashmë mbështet llojin e të dhënave VECTOR, së bashku me funksionet TO_VECTOR() dhe FROM_VECTOR(), për ruajtjen e embedding-eve. Një metrikë distancash është një funksion matematikor që kthen dy vektorë në një numër të vetëm që përshkruan ngjashmërinë. Ky version mbështet pesë metrika. EUCLIDEAN (L2) është distanca gjeometrike në vijë të drejtë dhe funksionon mirë kur madhësia ka rëndësi. EUCLIDEAN_SQUARED e anashkalon rrënjën katrore, duke mbajtur të njëjtën renditje por duke u ekzekutuar më shpejt për krahasime dhe klauzola ORDER BY kur vetëm renditja ka rëndësi. MANHATTAN (L1) është distanca në stil rrjeti, si distanca e taksisë në një rrjet qyteti, dhe mund të jetë më e fortë ndaj vlerave jonormale në disa aplikacione. Ngjashmëria COSINE mat këndin midis dy vektorëve; distanca kosinus llogaritet si 1 minus ngjashmëria kosinus në mënyrë që vlerat më të vogla të nënkuptojnë më të ngjashëm. DOT është produkti i papërpunuar skalar sum(a[i]*b[i]), i përdorur nga modelet e trajnuara posaçërisht për ngjashmërinë me produkt skalar; industria zakonisht e shumëzon me -1 për të kthyer shkallën, kështu që vlerat më të vogla nënkuptojnë më të ngjashëm, në përputhje me metrikat e tjera.
Nënshkrimi i funksionit është DISTANCE(vector1, vector2, metric). Dy argumentet vektoriale mund të jenë vlera të llojit të të dhënave VECTOR ose vargje binare të krijuara me TO_VECTOR(). Metrika duhet të jetë një varg literal fiks, i pandjeshëm ndaj madhësisë së shkronjave, jo një kolonë ose shprehje. VECTOR_DISTANCE() është një alias me sjellje identike. Funksioni kthen një DOUBLE. Të gjitha dimensionet duhet të përputhen; nëse njëri prej hyrjeve është NULL, rezultati është NULL. Për të përputhur metrikën me modelin, shumica e modeleve moderne të embedding-eve si OpenAI dhe Cohere janë trajnuar me ngjashmërinë COSINE, kështu që përdorni COSINE. Nëse madhësia ka kuptim, përdorni EUCLIDEAN ose EUCLIDEAN_SQUARED; kur jeni në dyshim, kontrolloni dokumentacionin e modelit. Një shembull hap pas hapi krijon një tabelë products me një kolonë VECTOR(1536), fut rreshta me TO_VECTOR('[0.1, 0.2, 0.3, ..., 0.384]'), dhe kërkon pesë produktet kryesore me DISTANCE(embedding, TO_VECTOR('[0.12, 0.22, 0.32, ..., 0.382]'), 'EUCLIDEAN') ORDER BY similarity_score LIMIT 5. Rezultatet e shembullit tregojnë Produktin B të parin me 0.5432109, pastaj Produktin A me 0.9654321, pastaj Produktin C me 0.9876543, të renditura sipas ngjashmërisë më të lartë së pari.
Nën kapuç, implementimi përdor SIMD (Single Instruction, Multiple Data), një aftësi e CPU-së që kryen të njëjtën aritmetikë mbi shumë numra njëherësh. Matematika e distancës mbi qindra dimensione është pikërisht aritmetika e përsëritur që SIMD e përshpejton. Percona zbulon aftësitë e CPU-së në nisje dhe zgjedh nivelin më të mirë të disponueshëm SIMD, pa nevojë për rikompilim për arkitekturën e synuar. Nivelet janë SSE4.2 ose NEON në 128-bit (rreth 2 deri në 3 herë përshpejtim mbi skalar), AVX2 në 256-bit (rreth 4 deri në 6 herë), AVX-512F në 512-bit (rreth 8 deri në 12 herë), SVE2 në ARM (SIMD i shkallëzueshëm që përshtatet me gjerësinë vektoriale të CPU-së), dhe rezervë skalare që funksionon kudo. Zgjedhja e kernelit të vetëdijshëm për dimensionet do të thotë që llogaritjet e distancës mbi vektorë të vegjël me më pak se 16 dimensione përdorin nivelin më të ngushtë 128-bit sepse kostoja e konfigurimit të regjistrave më të mëdhenj SIMD tejkalon përfitimin; vektorët më të mëdhenj përdorin automatikisht nivelin më të gjerë të disponueshëm. Ngarkesat e parreshtuara përdoren me qëllim: të dhënat e kolonës VECTOR nuk garantohen të jenë të rreshtuara në vijën e cache-it dhe nuk duhet të kërkojnë rreshtim. CPU-të moderne kanë xhiro identike për ngarkesa të rreshtuara dhe të parreshtuara kur të dhënat janë në cache, kështu që të gjitha kernel-et SIMD përdorin intrinsikë të ngarkesave të parreshtuara për të shmangur gabimet në hyrje të parreshtuara pa sakrifikuar performancën.
DISTANCE() është një funksion skalar që llogarit distancën midis dy vektorëve dhe kthen një numër të vetëm. Pa një indeks të përafërt të fqinjit më të afërt (ANN), një pyetje si ORDER BY DISTANCE(...) LIMIT k mbi një tabelë të madhe është një skanim i plotë i tabelës: baza e të dhënave thërret funksionin e distancës në çdo rresht dhe pastaj rendit. Është i saktë dhe i përshpejtuar me SIMD për rresht, por shkallëzohet si O(n), jo O(log n). Hapi tjetër natyror është indeksimi ANN, si HNSW (Hierarchical Navigable Small World) ose IVF (Inverted File me rafinim), të cilat krasisin hapësirën e kërkimit dhe kthejnë rezultate të përafërta shumë më shpejt. Ky drejtim është në planin e zhvillimit. Ndërsa indeksimi ANN sjell shpejtësi, ai mbështetet në rezultate të përafërta; nëse një aplikacion kërkon saktësi të saktë në vend të vlerësimeve, DISTANCE() është i disponueshëm në këtë version 9.7.2-2 të serverit të bazës së të dhënave me burim të hapur.
Percona i fton përdoruesit të provojnë karakteristikën dhe të ndajnë komente: raportoni gabime ose ide për karakteristika në JIRA, bashkohuni në bisedën në forumin e komunitetit Percona, ose kontaktoni me pyetje për përdorimin ose performancën. Komentet do të formësojnë planin e zhvillimit, veçanërisht rastet e përdorimit si strategjitë specifike të indeksit ANN, integrimet e modeleve të embedding-eve dhe akordimi i performancës. Për ekipet që ekzekutojnë këtë bazë të dhënash me burim të hapur në prodhim, një shërbim i menaxhuar i bazës së të dhënave si AEU Data mund të trajtojë kopje rezervë të automatizuara, ruajtje të kriptuar, monitorim dhe disponueshmëri të lartë, duke i lënë ata të përqendrohen në dizajnin e pyetjeve dhe indekseve duke përfshirë funksionet e reja të distancës.