извлечь пользу из того, что в качестве ключей у меня sha256sum?
Git? 😂
Выкинуть sha256 и взять xxhash. Куда вам криптохеши? И ещё на перфоманс жалуетесь...
это особенность реализации, её не выкинуть. И сумма считается на клиенте, сервер этим не занимается. Разве что если валидацию прикрутить
Т.е. данные уже приходят с хешом. Хорошо. Но все равно это никак нельзя использовать, т.к. sha* тормоз. Ужасный тормоз по сравнению с xxhash.
https://github.com/Cyan4973/xxHash
я к тому, чтоб база вообще хеш не считала, а сразу в индекс значение пихала. раз хеш уже посчитан и является ключом
А что у него с коллизиями?
Есть, как и у любого не криптохеша, но на обычных нагрузках почти не заметно.
А после вы хотите взять по ключу и каждый раз считаете хеш? Или он уже у вас где-то лежит?
Коллизии же будут проблемой, разве нет?
Есть криптографический blake3
Они у тебя будут раз в сто лет. На файлах. Разного размера.
Я так понял, что файлы ни разу не рандомные, а контролируются юзером
Это артефакты сборки, блобы. Шанс на колизии крайне минорнвй. А юзер по умолчанию доверенный.
Используй в качестве ключа целые числа, а не строки, и тогда база не будет считать хеши. Правда придётся число битов в хеше урезать до маскимально поддерживаемой DB величины для целых чисел.
не могу, sha256sum мне всё равно нужна, и из базы блобы надо доставать именно по sha256sum. Кэш должен реализовать content addressable storage. От конечных клиентов запросы приходят именно в таком виде - "дай блоб с таких хешом"
Почикай sha256 на несколько чисел допустимого размера, и используй составной индекс по нескольким полям 😊
А можно референс на тс, что это именно артефакты сборки?
https://t.me/rustlang_ru/401446
хм. А какие kv так умеют? Поделить [u8; CONST] на несколько частей не проблема
Если использовать не простейший kv, то можно применить тот же самый механизм поиска с хешами что и в базах. Хеши ведь позволяют быстро ограничить объём данных в которых надо искать. На последнем этапе всё равно происходит полное сравнение в соответствии с указанным запросом. Таким образом ты можешь свой sha256 уменьшить, например, до 64 бит и использовать это как не уникальный числовой ключ. А сам sha256 хранить в отдельном поле. По ключу ты быстро получишь 1 или несколько записей, по которым быстро проверишь на полное совпадение с sha256.
Обсуждают сегодня