Mysql
 sql >> база данни >  >> RDS >> Mysql

SQL производителност при търсене на дълги низове

Идеята ви за хеширане на дълги низове за създаване на токен, по който да търсите в магазин (кеш или база данни) е добра. Виждал съм това да се прави за изключително големи струни и в среда с голям обем и работи чудесно.

„Кой хеш бихте използвали за това приложение?“

  • Не мисля, че алгоритъмът за криптиране (хеширане) наистина има значение, тъй като не хеширате, за да шифровате данни, вие хеширате, за да създадете токен, върху който да използвате като ключ за търсене на по-дълги стойности. Така че изборът на алгоритъм за хеширане трябва да се основава на скоростта.

„Бихте ли изчислили хеша в кода или ще оставите db да го обработва?“

  • Ако беше моят проект, щях да направя хеширането на слоя на приложението и след това да го прекарам, за да потърся в магазина (кеш, след това база данни).

„Има ли коренно различен подход за съхраняване/търсене на дълги низове в база данни?“

  • Както споменах, мисля, че за вашата конкретна цел, предложеното от вас решение е добро.

Препоръки за таблица (само демонстративни):

user

  • id int(11) unsigned not null
  • name_first varchar(100) не е нула

user_agent_history

  • user_id int(11) unsigned not null
  • agent_hash varchar(255) не е нула

agent

  • agent_hash varchar(255) не е нула
  • browser varchar(100) не е нула
  • agent текстът не е нулев.

Няколко бележки относно схемата:

  • От вашия OP звучи така, сякаш имате нужда от M:M връзка между потребител и агент, поради факта, че потребителят може да използва Firefox от работа, но след това може да премине към IE9 у дома. Оттук и необходимостта от централната таблица.

  • Varchar(255), използван за agent_hash подлежи на дебат. MySQL предлага използване на варбиниран тип колона за съхранение на хешове, от които има няколко типа.

  • Също така бих предложил да направите agent_hash първичен ключ или най-малкото добавяне на ограничение UNIQUE към колоната.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. CakePHP 1.3 - Неизвестна колона в клаузата where

  2. Проблем с съпоставянето на mysql-python:как да принудим unicode тип данни?

  3. Perl DBI вмъкване на множество редове, използвайки собствена способност за многократно вмъкване на mysql

  4. изберете 30 произволни реда, където сумата =x

  5. INSERT INTO или UPDATE с две условия