2016-05-20 5 views
0

Если вы используете LMDB только из одного потока и не заботитесь о постоянстве базы данных, есть ли какие-либо причины для открытия и закрытия транзакций?Single Threaded LMDB

Вызывает ли проблема с производительностью выполнение всех операций в рамках одной транзакции? Есть ли успех при открытии и закрытии слишком большого количества транзакций?

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

ответ

0

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

Замедление базы данных может быть вызвано не последовательной записью. Из этого сообщения (https://ayende.com/blog/163330/degenerate-performance-scenario-for-lmdb) не последовательные записи занимают больше времени.

0

Если вы не совершаете свой дБ, он просто растет в памяти, что приведет к тому, что ОС начнет меняться, как только закончится нехватка памяти, которая попадает на диск, который медленный.

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

Если вы совершаете слишком часто, вы просто несете всю стоимость доступа к диску в один момент времени, поэтому я считаю, что имеет смысл распространять эту нагрузку немного.

 Смежные вопросы

  • Нет связанных вопросов^_^