Лучший способ идентификации и сравнения файлов в архитектуре клиент-сервер - PullRequest
0 голосов
/ 31 декабря 2011

У меня есть DataStore, созданный для хранения наборов данных.Пользователи могут загружать наборы данных в хранилище данных, но сначала они проверяют, существует ли набор данных в DataStore, и он загружается только в том случае, если возвращаемое значение равно false.См. Диаграмму последовательности:

UML 2.2 Sequence diagram

Это реализуется путем идентификации наборов данных с их контрольными суммами и сравнения контрольных сумм клиентов с данными из DataStore.Алгоритм на данный момент является CRC32.После некоторых исследований выяснилось, что это может быть небезопасно из-за проблемы с днем ​​рождения: С CRC32, для вероятности столкновения 1%, должно быть 9300 наборов данных и 5000 наборов данных для вероятности 25% .

Числа говорят, что это очень рискованно с CRC32.Контрольная сумма должна быть легко рассчитана, чтобы она не слишком загружала клиента.Есть ли способ - может быть, сложная вторичная проверка - сказать, что наборы данных с соответствующими контрольными суммами отличаютсяИли единственный способ - выбрать функцию с большим количеством битов, учитывая максимальное количество наборов данных?

PS: я знаю;все вопросы о сравнении файлов уже задавались, но я не смог найти ни одного, который отвечал бы на все мои вопросы.

1 Ответ

0 голосов
/ 31 декабря 2011

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

...