|
Дэниэл Бернштейн (Daniel J. Bernstein), известный эксперт в области криптографии и создания защищённого ПО, разработавший такие проекты, как qmail, djbdns, NaCl, Ed25519, Curve25519 и ChaCha20-Poly1305, опубликовал выпуск проекта cdb 20250121, предлагающего формат хранения данных и сопутствующую библиотеку для встраивания в приложения функций для работы с БД в форме ключ/значение. Выпуск сформирован спустя более 25 лет с момента прошлого обновления cdb 0.75, сформированного в феврале 2000 года.
В новой версии реализован формат cdb64, переведённый на структуры с 64-разрядными типами. На 64-разрядных платформах новый формат позволяет создавать БД размером до эксабайта (ранее размер БД не мог превышать 4 ГБ). БД очень компактная и использует 4096-байтовый заголовок и по 48 байт служебной информации на каждую запись (для 32-разрядного варианта заголовок 2048 и по 24 байта на запись). При обращении к БД выполняются всего две операции доступа к диску при наличии ключа и один - при отсутствии. Поддерживается атомарная замена БД, стойкая к аварийным завершениям и не блокирующая доступ на чтение.
Другие изменения:
- Поддержка сборки с использованием скрипта configure и установки командой "make install".
- Убрана привязка тестовых сценариев к csh.
- Все внутренние целые значения заменены на тип "num", определённый как "long long". Функции uint32, fmt и scan заменены на функции, работающие с типом num.
- Программный интерфейс работы с буферами разделён на inbuf и outbuf. Проведена чистка интерфейса hier.
- Из кода убраны определения неиспользуемых функций.
- Прекращено использование обвязок, таких как str_len, alloc, uint32, exit, error и systype.
- Код переделан для прекращения использования устаревших Си-конструкций, таких как старый стиль определения функций, пустые прототипы и старый стиль определения main().
- Задействованы определения const и static.
- При сборке активирован флаг "-Wall", а код почищен для устранения предупреждений.
- При компиляции включены опции -fwrapv, -fno-delete-null-pointer-checks, -fno-strict-aliasing и -fno-strict-overflow.
|