Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Сколько цифр в 64 битах?

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Описание: или какой тип данных подойтед для crc64 хэша.
nkl
Отправлено: 16 Октября, 2014 - 09:13:01
Post Id



Посетитель


Покинул форум
Сообщений всего: 305
Дата рег-ции: Янв. 2012  


Помог: 1 раз(а)




Всем привет, мне нужен надежный цифровой хэш для строк в БД, который будет генериться по совокупности данных из нескольких столбцов этой таблицы, что бы потом при обновлении другой таблицы проверять, если хэш изменился, значит и данные изменились, значит эту строку нужно обновит, если нет, то на нет и суда нет.
Почему именно цифровой? Компу быстрее сравнивать цифры чем буквы.
Вот тут товарищ предлагает собственный класс для генерации crc64 хэша.
Почему именно crc64? Потому что нативная php crc32() генерирует crc32-хэш, который может быть подвержен коллизиям (для разных наборов данных может быть сгенерирован один и тот же хэш), что не всегда безопасно.
Проблема вот в чем, как хранить этот crc64-хэш? И если не crc64, то может кто что подскажет? Как лучше организовать подобную проверку изменений в исходной строке? Растерялся
 
 Top
Мелкий Супермодератор
Отправлено: 16 Октября, 2014 - 09:28:13
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




bigint
8 байт, 64 бита.

nkl пишет:
для разных наборов данных может быть сгенерирован один и тот же хэш

Это свойство любых хэшей.
Коллизии будут, коллизии будут всегда. Вопрос и различие только в их количестве. Которое напрямую зависит от объёма занимаемым хэшом места.


-----
PostgreSQL DBA
 
 Top
nkl
Отправлено: 16 Октября, 2014 - 10:44:46
Post Id



Посетитель


Покинул форум
Сообщений всего: 305
Дата рег-ции: Янв. 2012  


Помог: 1 раз(а)




Блин, какую-то фигню выдает класс автора 488c08c3e93f9c6a или 743d18d97d6497f3 - это же на bigint я так понимаю?
(Добавление)
А есть ли в природе нормальна цифровая (only digit) хэш функция максимально устойчивая к коллизиям?
(Добавление)
ЗЫ
Конечно можно конвертить это 16-ричное число в десятичное, но имхо проще уже тогда забыть про эту хрень и взять sha1 или md5 Нахмурился

ЗЫЫ
Может когда-то в будущем, когда это начнет серьезно сказываться на производительности придется написать свою)
 
 Top
Sail
Отправлено: 16 Октября, 2014 - 11:20:54
Post Id



Участник


Покинул форум
Сообщений всего: 1131
Дата рег-ции: Февр. 2014  


Помог: 57 раз(а)




Мелкий пишет:
Вопрос и различие только в их количестве. Которое напрямую зависит от объёма занимаемым хэшом места.
В школе, помнится, употреблялся термин "обратно пропорционально" Закатив глазки
nkl пишет:
Блин, какую-то фигню выдает класс автора 488c08c3e93f9c6a или 743d18d97d6497f3 - это же на bigint я так понимаю?

Обычные шестнадцатеричные числа...
 
 Top
Мелкий Супермодератор
Отправлено: 16 Октября, 2014 - 11:35:36
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




nkl пишет:
488c08c3e93f9c6a или 743d18d97d6497f3 - это же на bigint я так понимаю?

Число из 16 шестнадцатеричных чисел, 8 байт информации и есть.

nkl пишет:
нормальна цифровая

Они все бинарные.
Цифры, буквы - только отображение. Сами хэши бинарны. SHA1 - 20 байт, md5 - 16, crc64 - 8, crc32 - 4 байта (обычно их в битах измеряют, правда).
Чем больше информации в хэше - тем математически ниже вероятность коллизии. Но нулём эта вероятность не будет вплоть до размера, равного или превышающего размер исходных данных.
Ещё раз - хеши по своему определению имеют коллизии! Решайте свою задачу другим способом.


-----
PostgreSQL DBA
 
 Top
Sail
Отправлено: 16 Октября, 2014 - 11:56:59
Post Id



Участник


Покинул форум
Сообщений всего: 1131
Дата рег-ции: Февр. 2014  


Помог: 57 раз(а)




nkl пишет:
если хэш изменился, значит и данные изменились, значит эту строку нужно обновить, если нет, то на нет и суда нет

Угу... соглашусь с предыдущим оратором...
Если хэш не изменился, то для полной уверенности в том, что данные не изменились, надо сравнивать данные.
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« SQL и Архитектура БД »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB