LINUX.ORG.RU

TokyoCabinet: implicit transactions, альтернативы?

 ,


1

3

Всем здратути. А работал ли кто с сабжем?

Приспичило мне тут погуглить на предмет embedded NoSQL for C/C++. Нашёлся сабж. Прям идеально что хотел: безо всяких там json-заморочек, тупая бинарщина – кусок памяти под ключ, кусок памяти под значение; есть Hash DB, B+ Tree DB и Fixed-length DB; что ещё здоровому человеку может быть нужно?

Плюс, судя по нагугленному, по скорости его ещё никто не переплюнул, так что вопрос про альтернативы – чисто на всякий случай. Ихний же KyotoCabinet не интересен: (1) GPL; (2) там нет Fixed-length DB; (3) на SO гуглилось что TC в некоторых аспектах всё равно лучше. А тривиальные RAII-обёртки вокруг евойного сишного API любой дурак напишет.

Но непонятно про транзакции. Что случится, если я буду писать без явных вызовов start transaction (…dbtranbegin()) & commit (…dbtrancommit())? Мне не нужно batch writes, я собираюсь писать по одной записи за раз, но нужно чтобы в момент выхода из функции записи база была на диске и консистентная. Т.е. хочу implicit transactions. Вызвать start transaction & commit явно мне не проблема, но мечтается обойтись без WAL-файла (т.к. это замедление).

По этой теме в доках есть только два пассажа:

(1) «database file is not corrupted even under catastrophic situation» – но corruption тут можно трактовать по-всякому; так есть поведение implicit tranasction или нет?

(2) В функциях …dbopen() для всех типов баз есть флаг HDBOTSYNC, «which means every transaction synchronizes updated contents with the device». Будет ли этот флаг действовать, если я НЕ стартую транзакцию явно?

★★★★★

судя по нагугленному, по скорости его ещё никто не переплюнул

Это не так. Всё сильно зависит от сценариев использования, кто/что замеряет и т.д.

Но непонятно про транзакции.

Без транзакций не будет ACID, конечно не может быть конкурентной работы с БД. Сделанные изменения будут как-то записываться на диск, но при аварии вы можете не увидеть какую-то часть.

Чтобы БД работала привычными образом, нужно не только использовать транзакции вместе с HDBOTSYNC. Иначе после аварии вы можете не увидеть ваших последних транзакций (даже закоммиченных).

вопрос про альтернативы

мечтается обойтись без WAL

Тогда libmdbx (в том числе libfpta), их тут автор рекламировал.

anonymous
()
Ответ на: комментарий от anonymous

Чтобы БД работала привычными образом, нужно не только использовать транзакции вместе с HDBOTSYNC.

Не распарсил «не только».

dimgel ★★★★★
() автор топика
Ответ на: комментарий от dimgel

Не распарсил «не только».

Недоперередактировал.

«Чтобы БД работала привычными образом, нужно использовать транзакции вместе с HDBOTSYNC.»

anonymous
()
Ответ на: комментарий от anonymous

Ок, сенькс. Альтернативы тоже обязательно посмотрю.

dimgel ★★★★★
() автор топика
Ответ на: комментарий от dimgel

Хотя пригласить натив инглиш спикера, чтобы вычитал документацию, сильно не помешало бы. «Хау мач воч» в каждом первом абзаце (UPD: я про каменты в инклуд-файле), не считая опечаток. Моего знания английского хватает чтобы резало глаз, но не хватает чтобы переформулировать правильно и кратко.

dimgel ★★★★★
() автор топика
Последнее исправление: dimgel (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.