sql >> Database teknologi >  >> RDS >> Mysql

SQL-ydeevne søger efter lange strenge

Din idé om at hash lange strenge for at skabe et token, som du kan slå efter i en butik (cache eller database) er god. Jeg har set dette gjort for ekstremt store strenge og i miljøer med høj lydstyrke, og det fungerer fantastisk.

"Hvilken hash ville du bruge til denne applikation?"

  • Jeg tror ikke, at krypterings (hashing) algoritmen virkelig betyder noget, da du ikke hash for at kryptere data, du hash for at skabe et token, som du kan bruge som en nøgle til at slå længere værdier op. Så valget af hashing-algoritme bør baseres på hastighed.

"Vil du beregne hashen i kode eller lade db'en håndtere det?"

  • Hvis det var mit projekt, ville jeg lave hashing på applaget og derefter sende det igennem for at slå op i butikken (cache og derefter database).

"Er der en radikalt anderledes tilgang til at gemme/søge lange strenge i en database?"

  • Som jeg nævnte, tror jeg, at din foreslåede løsning til dit specifikke formål er god.

Tabelanbefalinger (kun demonstrative):

user

  • id int(11) unsigned not null
  • navn_første varchar(100) ikke null

user_agent_history

  • user_id int(11) unsigned not null
  • agent_hash varchar(255) ikke null

agent

  • agent_hash varchar(255) ikke null
  • browser varchar(100) ikke null
  • agent tekst ikke null

Et par bemærkninger om skema:

  • Fra din OP lyder det som om du har brug for et M:M forhold mellem bruger og agent, på grund af det faktum, at en bruger muligvis bruger Firefox fra arbejde, men så kan skifte til IE9 derhjemme. Derfor behovet for pivottabellen.

  • Varchar(255) brugt til agent_hash er til debat. MySQL foreslår ved hjælp af en varbinær kolonnetype til lagring af hashes, som der er flere typer af.

  • Jeg vil også foreslå enten at lave agent_hash en primær nøgle, eller i det mindste tilføje en UNIK begrænsning til kolonnen.



  1. Hvordan kan jeg finde ud af, hvilke tabeller der refererer til en given tabel i Oracle SQL Developer?

  2. Indstil mySQL MAX-værdi til java-variabel

  3. Vælg den seneste MySQL-data, men unikke udvej

  4. Django særskilt gruppe efter forespørgsel på to felter