sql >> Databáze >  >> RDS >> Mysql

Výkon SQL pro vyhledávání dlouhých řetězců

Váš nápad hašování dlouhých řetězců za účelem vytvoření tokenu, podle kterého lze vyhledávat v obchodě (mezipaměti nebo databázi), je dobrý. Viděl jsem to udělat pro extrémně velké struny a v prostředí s vysokou hlasitostí a funguje to skvěle.

"Jaký hash byste použili pro tuto aplikaci?"

  • Nemyslím si, že na šifrovacím (hašovacím) algoritmu opravdu záleží, protože nehašujete k šifrování dat, ale hašujete, abyste vytvořili token, který lze použít jako klíč k vyhledání delších hodnot. Volba hašovacího algoritmu by tedy měla být založena na rychlosti.

"Vypočítali byste hash v kódu nebo to nechali zpracovat db?"

  • Kdyby to byl můj projekt, provedl bych hašování na vrstvě aplikace a poté bych to prošel, abych vyhledával v obchodě (mezipaměť, poté databáze).

"Existuje radikálně odlišný přístup k ukládání/prohledávání dlouhých řetězců v databázi?"

  • Jak jsem již zmínil, myslím, že pro váš konkrétní účel je vámi navrhované řešení dobré.

Doporučení k tabulce (pouze demonstrativní):

user

  • id int(11) unsigned not null
  • name_first varchar(100) není null

user_agent_history

  • user_id int(11) unsigned není null
  • agent_hash varchar(255) není null

agent

  • agent_hash varchar(255) není null
  • browser varchar(100) není null
  • agent text není null

Několik poznámek ke schématu:

  • Z vašeho OP to zní, jako byste potřebovali M:M vztah mezi uživatelem a agentem, protože uživatel může používat Firefox z práce, ale pak může doma přejít na IE9. Z toho vyplývá potřeba kontingenční tabulky.

  • Varchar(255) použitý pro agent_hash je k diskusi. MySQL doporučuje pomocí varbinárního typu sloupce pro ukládání hashů, kterých je několik typů.

  • Také bych navrhoval vytvořit agent_hash primární klíč nebo přinejmenším přidání omezení UNIQUE do sloupce.



  1. Jak programově generovat DDL z databáze Oracle?

  2. Vyberte první řádek každé skupiny v sql

  3. Jak změnit webový port v EBS 12.2

  4. Vyberte poslední řádek v MySQL