Я должен генерировать сингл, долго обсуждают некоторые данные в таблице
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 используется - и он НЕ имеет Триггерной Поддержки
1)
SELECT MD5( GROUP_CONCAT( CONCAT_WS('#',F1,F3,FN) SEPARATOR '##' ) ) FROM Table1
2) Скорость не имеет значения, так как функция должна выполняться только один раз, а все хэш-функции достаточно быстры
Что касается скорости, то попробуйте. Это зависит от того, как реализованы функции.
Однако есть шанс, что разница в скорости будет очень незначительной. Все приведенные вами хэш-функции быстрее, чем то, что может выдать средний диск, поэтому вопрос не в том, "какая хэш-функция заставит код работать быстрее всего?", а в том, "какая хэш-функция заставит процессор больше всего простаивать в ожидании данных с диска?".
На моем Intel Core2 Q6600 с тактовой частотой 2,4 ГГц (64-битный режим), с моей собственной реализацией хэш-функций на C, я получаю следующие скорости хэширования:
Это только на одном ядре. Скорость моих жестких дисков составляет около 100 МБ/с, поэтому можно сказать, что даже при использовании SHA-256 процесс хэширования будет использовать не более 17% процессорной мощности машины. Конечно, ничто не гарантирует, что реализация, используемая MySQL, настолько быстра, поэтому вам стоит попробовать. Кроме того, в 32-битном режиме производительность SHA-512 довольно сильно падает.
С криптографической точки зрения, в MD5 и SHA-1 были найдены (серьезные) слабые места, поэтому если вы работаете в условиях, связанных с безопасностью (т.е. хотите обнаружить изменения, даже если есть кто-то, кто может выбрать некоторые изменения и предпочел бы, чтобы вы не обнаружили эти изменения), вам следует придерживаться SHA-256 или SHA-512, которые, насколько мы знаем, достаточно надежны. Хотя MD5 и SHA-1 все еще хороши в ситуациях, не связанных с безопасностью.
Я бы использовал MySQL Trigger для обнаружения изменений при вставке, удалении, обновлении и т. Д.