sql >> Database >  >> RDS >> Mysql

SQL-prestaties zoeken naar lange tekenreeksen

Uw idee om lange strings te hashen om een ​​token te maken waarop u in een winkel (cache of database) kunt zoeken, is een goed idee. Ik heb dit gezien voor extreem grote strings en in omgevingen met een hoog volume, en het werkt geweldig.

"Welke hash zou je voor deze applicatie gebruiken?"

  • Ik denk niet dat het coderingsalgoritme (hashing) er echt toe doet, omdat je niet aan het hashen bent om gegevens te coderen, maar om een ​​token te creëren dat als sleutel kan worden gebruikt om langere waarden op te zoeken. Dus de keuze van het hash-algoritme moet gebaseerd zijn op snelheid.

"Zou je de hash in code willen berekenen of de db het laten afhandelen?"

  • Als het mijn project was, zou ik het hashen doen op de app-laag en het dan doorgeven om in de winkel op te zoeken (cache, dan database).

"Is er een radicaal andere benadering voor het opslaan/doorzoeken van lange strings in een database?"

  • Zoals ik al zei, denk ik dat uw voorgestelde oplossing voor uw specifieke doel een goede is.

Tabelaanbevelingen (alleen ter demonstratie):

user

  • id int(11) unsigned niet null
  • name_first varchar(100) niet null

user_agent_history

  • user_id int(11) unsigned niet null
  • agent_hash varchar(255) niet null

agent

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

Enkele opmerkingen over het schema:

  • Vanuit je OP klinkt het alsof je een M:M-relatie tussen gebruiker en agent nodig hebt, vanwege het feit dat een gebruiker Firefox vanaf het werk gebruikt, maar thuis kan overschakelen naar IE9. Vandaar de noodzaak voor de draaitabel.

  • De varchar(255) gebruikt voor agent_hash staat ter discussie. MySQL suggereert een varbinair kolomtype gebruiken voor het opslaan van hashes, waarvan er verschillende soorten zijn.

  • Ik zou ook aanraden om agent_hash . te maken een primaire sleutel, of op zijn minst het toevoegen van een UNIEKE beperking aan de kolom.



  1. Standaard tekencodering van SQL Server

  2. Hex-tekens in regexp-overeenkomsten in mysql

  3. MySQL:#126 - Onjuist sleutelbestand voor tabel

  4. Springboot + MySQL:kan geen enkel datumtype lezen van (DATE, DATETIME, TIMESTAMP) MySQL