Vektorová data tvoří jádro moderních funkcí založených na umělé inteligenci: sémantického vyhledávání, doporučovacích systémů, RAG (Retrieval-Augmented Generation) procesů a dalších. Vzhledem k tomu, že pole typu „4D “ a „Vector “ se v databázích 4D stávají plnohodnotnou součástí, je schopnost jejich efektivního indexování nezbytná pro zachování rychlosti dotazů i při rostoucím objemu datových sad. Tento příspěvek vysvětluje, jak funguje vektorové indexování v 4D, jaké algoritmy jsou podporovány a jak programově spravovat vektorové indexy.
Dotazování na vektorové pole obvykle znamená vyhledání záznamů, jejichž vektory jsou „nejblíže“ referenčnímu vektoru, a to pomocí metriky podobnosti. Bez indexu musí 4D prohledat každý vektor v tabulce a vypočítat vzdálenost jeden po druhém, což je sice správné, ale s rostoucí velikostí tabulky také pomalé.
S vektorovým indexem používá 4D algoritmus speciálně navržený pro vyhledávání podobnosti vektorů, což dramaticky zkracuje dobu dotazu a zároveň vrací stejné výsledky jako dotaz bez indexu. Jinými slovy:
- Je zachována správnost: dotazy s indexem i bez indexu vracejí identické sady výsledků.
- Zlepšuje se výkon: dotazy s indexem jsou přibližně 8krát rychlejší než dotazy bez indexu.
Podporované typy vektorových indexů
4D zavádí tři specializované typy indexů pro pole 4D.Vector, které doplňují stávající „standardní“ index:
| Konstantní | Případ použití |
|---|---|
Vektorový kosinový index |
Podobnost založená na úhlu mezi vektory |
Vektorový skalární index |
Podobnost založená na skalárním součinu |
Euklidovský index vektorů |
Podobnost založená na vzdálenosti po přímce |
Tyto jsou k dispozici prostřednictvím CREATE INDEX a SET INDEX, přičemž každý typ indexu lze vybrat samostatně, což umožňuje, aby jedno vektorové pole mělo současně několik indexů (např. jak kosinový, tak euklidovský).
Uživatelské rozhraní
Vektorová pole a jejich indexy jsou plně integrovány do editoru struktur a souvisejících dialogových oken:
- Pole zadaná jako „4D “ (vektorová pole ) a „ Vector “ (polární pole) zobrazují speciální vektorovou ikonu
, a to jak v Editoru struktury, tak v Inspektoru.
- Okno se seznamem indexů zobrazuje vektorové indexy vedle běžných indexů.

- V Inspektoru, kontextovém menu pole a okně Vytvořit/Upravit index jsou pro vektorová pole k dispozici pouze indexy Cosine, Dot, Euclidean a Automatic, přičemž každý z nich lze vybrat samostatně. Výběr jakéhokoli jiného typu indexu vyvolá chybu.

Udržování konzistence indexů
4D zajišťuje konzistenci vektorových indexů s daty:
- Aktualizace vektoru pomocí .save() (nebo jakéhokoli jiného příkazu) automaticky aktualizuje přidružený index.
- Odstranění vektoru pomocí .drop() (nebo jakéhokoli jiného příkazu) automaticky aktualizuje přidružený index.
Mějte na paměti, že:
- Složené indexy nemohou obsahovat vektorové pole.
-
Aktualizace vektorových indexů nejsou v současné době v rámci transakcí podporovány.
Provozní podpora
Vektorové indexy jsou v nástrojích pro údržbu a správu 4D považovány za plnohodnotné prvky:
- Pozastavit / Obnovit: PAUSE INDEXES a RESUME INDEXES s vektorovými indexy lze pracovat stejně jako s jakýmikoli jinými indexy.
- Ukládání: 4D vytvoří ve složce DATA složku s názvem <název projektu>.4DVI pro ukládání vektorových indexů.
- Reindexace: Reindexace spuštěná při restartu provede reindexaci i vektorových indexů.
- Ověření a oprava: Centrum údržby a zabezpečení (MSC) zahrnuje vektorové indexy jak do svých operací ověřování, tak do operací opravy.
- Zálohování: Je-li index uložen v samostatném souboru, je zahrnut do výchozí konfigurace zálohování.
Přesnost vektorů
4D. Funkce „Vector “ a „new()“ nyní přijímají parametr přesnosti, který může být 32 nebo 64 bitů (konstanty „mk single precision “ a „ mk double precision “). Ve výchozím nastavení se nové vektory vytvářejí s 32bitovou přesností (4 bajty na složku). Tím se ve srovnání s 64bitovými vektory sníží nároky na paměť na polovinu, přičemž zůstane zachována dostatečná přesnost pro výpočty podobnosti a vzdálenosti, a proto je toto doporučené výchozí nastavení pro většinu případů použití.
$vector32:=4D.Vector.new([1; 2; 3])
// $vector32.precision=32
$vector64:=4D.Vector.new([1; 2; 3]; mk double precision)
// $vector64.precision=64
Poznámka ke kompatibilitě: Tato změna narušuje kompatibilitu se stávajícím kódem, který se spoléhal na předchozí 64bitové výchozí nastavení. Chcete-li zachovat 64bitovou přesnost, explicitně předávejte parametr ` mk double precision `.
Závěr
Vektorové indexování v 4D přináší výkon na produkční úrovni pro vyhledávání podobnosti přímo v databázovém stroji, aniž by došlo ke snížení konzistence nebo zhoršení uživatelské přívětivosti. Ať už vytváříte doporučovací systém, funkci sémantického vyhledávání nebo RAG pipeline, nyní můžete:
- Vybrat správnou metriku podobnosti (kosinovou, skalární nebo euklidovskou) pro váš konkrétní případ použití.
- Vytvářet a spravovat vektorové indexy pomocí kódu nebo uživatelského rozhraní.
- Spoléhat se na to, že 4D automaticky synchronizuje indexy při změnách dat.
- Prohlížet, pozastavovat, ověřovat a opravovat vektorové indexy pomocí stejných nástrojů, které již používáte pro běžné indexy.
Jako vždy vrací indexované i neindexované dotazy identické výsledky; index slouží výhradně k optimalizaci výkonu, nikdy ke změně chování.
K tomuto příspěvku zatím nelze přidávat komentáře.