Mysql – Обнаружение изменений в данных с хеш-функцией по части таблицы

Я должен генерировать сингл, долго обсуждают некоторые данные в таблице

CREATE TABLE Table1
(
       F1             INT          UNSIGNED NOT NULL AUTO_INCREMENT,
       F2              INT          default     NULL,
       F3               Varchar(50)  default     NULL,
      ..
       FN              INT          default     NULL,
       PRIMARY KEY (F1)
);

т.е. F1, F3, FN, где F2=10

SELECT md5(CONCAT_WS('#',F1,F3,FN)) FROM Tabe1 WHERE F2=10

Дает Хеш для каждой строки в таблице.

ВОПРОСЫ

1) Как действительно добираются, сингл долго обсуждают целую таблицу?

2) Что алгоритм хеширования фестивалей состоит в том, чтобы использовать MD5, SHA1, SHA или кого-либо другого?

Править:

Mysql 4.1 используется - и он НЕ имеет Триггерной Поддержки

9
задан Charles Faiga 24 June 2010 в 08:15
поделиться

3 ответа

1)

SELECT MD5( GROUP_CONCAT( CONCAT_WS('#',F1,F3,FN) SEPARATOR '##' ) ) FROM Table1

2) Скорость не имеет значения, так как функция должна выполняться только один раз, а все хэш-функции достаточно быстры

10
ответ дан 4 December 2019 в 09:12
поделиться

Что касается скорости, то попробуйте. Это зависит от того, как реализованы функции.

Однако есть шанс, что разница в скорости будет очень незначительной. Все приведенные вами хэш-функции быстрее, чем то, что может выдать средний диск, поэтому вопрос не в том, "какая хэш-функция заставит код работать быстрее всего?", а в том, "какая хэш-функция заставит процессор больше всего простаивать в ожидании данных с диска?".

На моем Intel Core2 Q6600 с тактовой частотой 2,4 ГГц (64-битный режим), с моей собственной реализацией хэш-функций на C, я получаю следующие скорости хэширования:

  • MD5: 411 МБ/с
  • SHA-1: 336 МБ/с
  • SHA-256: 145 МБ/с
  • SHA-512: 185 МБ/с

Это только на одном ядре. Скорость моих жестких дисков составляет около 100 МБ/с, поэтому можно сказать, что даже при использовании SHA-256 процесс хэширования будет использовать не более 17% процессорной мощности машины. Конечно, ничто не гарантирует, что реализация, используемая MySQL, настолько быстра, поэтому вам стоит попробовать. Кроме того, в 32-битном режиме производительность SHA-512 довольно сильно падает.

С криптографической точки зрения, в MD5 и SHA-1 были найдены (серьезные) слабые места, поэтому если вы работаете в условиях, связанных с безопасностью (т.е. хотите обнаружить изменения, даже если есть кто-то, кто может выбрать некоторые изменения и предпочел бы, чтобы вы не обнаружили эти изменения), вам следует придерживаться SHA-256 или SHA-512, которые, насколько мы знаем, достаточно надежны. Хотя MD5 и SHA-1 все еще хороши в ситуациях, не связанных с безопасностью.

6
ответ дан 4 December 2019 в 09:12
поделиться

Я бы использовал MySQL Trigger для обнаружения изменений при вставке, удалении, обновлении и т. Д.

3
ответ дан 4 December 2019 в 09:12
поделиться
Другие вопросы по тегам:

Похожие вопросы: