Jak dlouhé jsou vaše struny?
Pokud jsou relativně krátké (např. anglická slova; avg_len=5) a máte volné místo v databázi, zkuste tento postup:
- Pro každé slovo, které chcete uložit do tabulky, vezměte místo toho všechny možné přípony daného slova. Jinými slovy, stále odebíráte první znak, dokud nezůstane nic. Například slovo
value
dává:value
alue
lue
ue
e
- Uložte každý těchto přípon v databázi.
- Nyní můžete vyhledávat podřetězce pomocí
LIKE 'alu%'
(který najde 'alu' jako součást 'value').
Uložením všech přípon jste odstranili potřebu úvodního zástupného znaku (což umožňuje použití indexu pro rychlé vyhledávání), a to za cenu úložného prostoru.
Cena úložiště
Počet znaků potřebných k uložení slova se změní na word_len*word_len / 2
, tedy kvadratický v délce slova, na základě slov. Zde je faktor zvýšení pro různé velikosti slov:
- 3písmenné slovo:
(3*3/2) / 3 = 1.5
- 5písmenné slovo:
(5*5/2) / 5 = 2.5
- 7písmenné slovo:
(7*7/2) / 7 = 3.5
- 12písmenné slovo:
(12*12/2) / 12 = 6
Počet řádků potřebných k uložení slova se zvýší z 1 na word_len
. Mějte na paměti tuto režii. Další sloupce by měly být omezeny na minimum, aby se zabránilo ukládání velkého množství nadbytečných dat. Například číslo stránky, na které bylo slovo původně nalezeno, by mělo být v pořádku (uvažujte bez znaménka smallint), ale rozsáhlá metadata o slovu by měla být uložena v samostatné tabulce pro jednotlivá slova, nikoli pro každou příponu.
Úvahy
Existuje kompromis v tom, kde rozdělujeme „slova“ (nebo fragmenty). Jako příklad ze skutečného světa:co děláme s pomlčkami? Ukládáme přídavné jméno five-letter
jako jedno nebo dvě slova?
Kompromis je následující:
- Cokoli, co je rozděleno, nelze nalézt jako jeden prvek. Pokud uložíme
five
aletter
samostatně vyhledánímfive-letter
nebofiveletter
selže. - Cokoli, co není rozbité zaberou více úložného prostoru. Pamatujte, že požadavek na úložiště se zvyšuje kvadraticky v délce slova.
Pro usnadnění můžete chtít odstranit pomlčku a uložit fiveletter
. Slovo lze nyní najít vyhledáním five
, letter
a fiveletter
. (Pokud odstraníte pomlčky i z jakéhokoli vyhledávacího dotazu, uživatelé mohou stále úspěšně najít five-letter
.)
A konečně, existují způsoby ukládání polí přípon, které nevyžadují mnoho režijních nákladů, ale zatím si nejsem jistý, zda se dobře překládají do databází.