Существует ли алгоритм контрольной суммы, который также поддерживает «вычитание» из него данных?

У меня есть система с примерно 100 миллионами документов, и я хотел бы отслеживать их изменения между зеркалами. Чтобы эффективно обмениваться информацией об изменениях, я хочу отправлять информацию об измененных документах по дням, а не по каждому отдельному документу. Примерно так:

[ 2012/03/26, cs26],
[ 2012/03/25, cs25],
[ 2012/03/24, cs24],
...

где каждый cs— это контрольная сумма меток временивсех документов, созданных в определенный день.

Проблема, с которой я столкнулся, заключается в том, что я не знаю алгоритма, который мог бы «вычитать» данные из контрольной суммы при удалении документа. Ни один из криптографических хэшей не подходил по понятным причинам, и я не смог найти никаких алгоритмов для CRC, которые бы это делали.

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

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

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

Итак, ребята, вы знаете алгоритм контрольной суммы, который позволил бы мне «удалить» некоторые данные из контрольной суммы? Мне нужно, чтобы алгоритм был несколько быстрым, а контрольная сумма точно указывала бы наименьшее из изменений (поэтому я не могу использовать простой XOR).

Или, может быть, у вас есть идеи получше?

10
задан Cœur 17 March 2019 в 02:25
поделиться