> Нет руководства по программированию с использованием этого ПО.RTFM https://erthink.github.io/libmdbx/usage.html#starting
> Также настораживает:
> > Операции изменения данных никак не блокируют читателей.
RTFM https://github.com/erthink/libmdbx/blob/master/README.md#fea... среди прочего, там есть строки:
- Fully ACID-compliant, through to MVCC and CoW.
- Readers are non-blocking, notwithstanding snapshot isolation.
Со ссылками на пояснения что такое ACID, MVCC, CoW и snapshot isolation.
Кроме этого, см. https://ru.bmstu.wiki/LMDB_(Lightning_Memory-Mapped_Database) - вся эта информация в принципе применима к libmdbx, ибо "Historically, libmdbx is a deeply revised and extended descendant of the Lightning Memory-Mapped Database" (https://github.com/erthink/libmdbx/blob/master/README.md#his....
> Это не очень понятно. Что прочитает "читатель" если "писатель" не завершит изменение?
RTFM: ACID предполагает транзакции с изоляцией, т.е. читатели видят результаты только успешно завершенных транзакций.
> Запись в объект должна блокировать чтение из объекта на время исполнения записи.
RTFM: MVCC, snapshot isolation, page shadowing and CoW.
До фиксации транзакции писатель изменяет копию данных, которая не видна читателям.
Примерно как https://ru.wikipedia.org/wiki/Read-copy-update
> Тем более, если, как Вы говорите, имеется поддержка вторичных ключей.
Еще раз:
- в key-value не может быть вторичны ключей, ибо тогда это не key-value просто по определению.
- типизированные колонки, nullable, вторичные ключи, составные индексы - реализованы в https://github.com/PositiveTechnologies/libfpta поверх libmdbx.