самый быстрый способ создать контрольную сумму для больших файлов в Python

Я всегда рассматриваю маркировки как ответвление ленивого человека. Если Вы собираетесь сделать что-то столь значительное, что оно требует маркировки полного источника затем, вероятно, лучше обозначить это с ответвлением так, чтобы все задачи, связанные с тем усилием, были в организованном месте только с произведенным кодом.

Ветвление очень мощно однако и что-то стоящее узнать о. TFS не является лучшим управлением исходным кодом, но это не хуже также. TFS действительно поддерживает понятие соединительной линии, от которой все ответвления вырастают также.

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

6
задан Nakilon 26 November 2012 в 11:26
поделиться

6 ответов

Я предполагаю, что вам просто нужно вызвать base64_decode () на $ _ REQUEST ['data'] перед записью в файл. Этого должно быть достаточно :).

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

Следующим шагом может быть формализация этой обработки файлов по порядку разделы, и передать их как таковые (для повторного склеивания на стороне получателя). Этот подход, наряду с дополнительной информацией о способе создания файлов (например, они могут быть изменены исключительно с помощью добавления, как файлы журнала), может даже позволить ограничить объем требуемого вычисления хэша. Дополнительная сложность этого подхода должна быть взвешена против стремления к быстрому быстрому вычислению CRC.

Примечание: Alder32 не ограничен размерами сообщений ниже определенного порога. Это может быть просто ограничение zlib API. (Кстати,

4
ответ дан 17 December 2019 в 00:11
поделиться

Невозможно использовать более одного ядра для вычисления хэша MD5 большого файла из-за самой природы MD5: он ожидает, что сообщение будет разбито на куски и передано в функцию хеширования в строгая последовательность. Однако вы можете использовать один поток для чтения файла во внутреннюю очередь, а затем вычислить хэш в отдельном потоке, чтобы. Я не думаю, что это даст вам сколько-нибудь значительный прирост производительности.

Тот факт, что обработка большого файла занимает так много времени, может быть из-за "небуферизованного" чтения. Попробуйте читать, скажем, по 16 Кбайт за раз, а затем передавать контент по частям в функцию хеширования.

0
ответ дан 17 December 2019 в 00:11
поделиться

Сам md5 не может работать параллельно. Однако вы можете создать md5 файл в секциях (параллельно) и взять md5 из списка хэшей.

Однако это предполагает, что хеширование не ограничено вводом-выводом, как я подозреваю. Как предлагает Антон Гоголев - убедитесь, что вы читаете файл эффективно (большими кусками с степенью двойки). Как только вы это сделаете, убедитесь, что файл не фрагментирован.

Также для новых проектов следует выбирать хэш, например sha256, а не md5.

Значительно ли быстрее контрольные суммы zlib, чем md5 для файлов 4 Гб?

0
ответ дан 17 December 2019 в 00:11
поделиться

Вы пробовали модуль crc-generator ?

0
ответ дан 17 December 2019 в 00:11
поделиться

Во-первых, в алгоритмах CRC нет ничего, что могло бы помешать им работать с данными произвольной длины (однако конкретная реализация вполне может наложить ограничение).

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

Что касается самого алгоритма хеширования, основной компромисс скорость vs. отсутствие коллизий (два разных блока данных дают один и тот же хэш). CRC-32 работает быстро, но при наличии только 2 ^ 32 уникальных значений могут наблюдаться конфликты. MD5 намного медленнее, но имеет 2 ^ 128 уникальных значений, поэтому столкновения почти никогда не будут видны (но все же теоретически возможны). Более крупные хэши (SHA1, SHA256, ...) имеют еще более уникальные значения, но работают еще медленнее: я сомневаюсь, что они вам нужны: вы беспокоитесь о случайных столкновениях, в отличие от приложений цифровой подписи, где вы беспокоитесь о намеренно ( злонамеренно) спроектированные коллизии.

Похоже, вы пытаетесь сделать что-то очень похожее на то, что делает утилита rsync. Можно просто использовать rsync?

поэтому столкновения почти никогда не будут видны (но теоретически все же возможны). У более крупных хэшей (SHA1, SHA256, ...) есть еще более уникальные значения, но они все же медленнее: я сомневаюсь, что они вам нужны: вы беспокоитесь о случайных столкновениях, в отличие от приложений цифровой подписи, где вас беспокоят намеренно ( злонамеренно) спроектированные коллизии.

Похоже, вы пытаетесь сделать что-то очень похожее на то, что делает утилита rsync. Можно просто использовать rsync?

поэтому столкновения почти никогда не будут видны (но теоретически все же возможны). Более крупные хэши (SHA1, SHA256, ...) имеют еще более уникальные значения, но работают еще медленнее: я сомневаюсь, что они вам нужны: вы беспокоитесь о случайных столкновениях, в отличие от приложений цифровой подписи, где вы беспокоитесь о намеренно ( злонамеренно) спроектированные коллизии.

Похоже, вы пытаетесь сделать что-то очень похожее на то, что делает утилита rsync. Можно просто использовать rsync?

Похоже, вы пытаетесь сделать что-то очень похожее на то, что делает утилита rsync. Можно просто использовать rsync?

Похоже, вы пытаетесь сделать что-то очень похожее на то, что делает утилита rsync. Можно просто использовать rsync?

2
ответ дан 17 December 2019 в 00:11
поделиться

You might be hitting a size limit for files in XP. The 64-bit gives you more addressing space (removing the 2GB (or so) addressing space per application), but probably does nothing for the file size problem.

1
ответ дан 17 December 2019 в 00:11
поделиться
Другие вопросы по тегам:

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