> Ценность БДБ не только в скорости, но и в хранении данных > (Durability), и в быстром поиске для большого кол-ва > данных, и во вторичных индексах, и в транзакциях, и в > журналировании ;-) Внутри код достаточно «ветвистый» для > поддержки всего этого, хотя бы проверка тех же условий, как > в данный момент произвести то или иное действие в > зависимости от опций DB_ENV.
Я не спорю. Но ведь если перформанс был бы выше, так это только лучше. Так ведь?
> В тестах использовалась stand-alone DB или создавалась > сперва DB_ENV, а потом уже открывалась DB? Конечно DB_ENV.
> При открытии среды нужно указывать (в твоём случае) только > DB_INIT_LOCK | DB_INIT_MPOOL | DB_THREAD флаги.
В принципе, код инициализации весьма стандартный:
#ifdefIN_MEMORY_DB m_db_env = new DbEnv(0);
// cache & in-memory logs
m_db_env->set_cachesize(0,10*1024*1024,1);
m_db_env->log_set_config(DB_LOG_IN_MEMORY, 1);
m_db_env->set_lg_bsize(10*1024*1024);
m_db_env->open(NULLin-memory, DB_PRIVATEin-memory|DB_CREATE|DB_INIT_CDB|DB_INIT_MPOOL|DB_THREAD, 0);
m_db = new Db(m_db_env, 0);
m_db->open(NULL, NULL, db_name_t.c_str(), DB_HASH, DB_CREATE|DB_THREAD, 0);
/*in-memory cache file*/
DbMpoolFile* mpf = m_db->get_mpf();
if (mpf)
{
mpf->set_flags(DB_MPOOL_NOFILE, 1);
}
else
{
}
#else
m_db_env = new DbEnv(0);
m_db_env->open(env_name_t.c_str(), DB_CREATE|DB_INIT_CDB|DB_INIT_MPOOL|DB_THREAD, 0);
m_db = new Db(m_db_env, 0);
m_db->open(NULL, db_name_t.c_str(), NULL, DB_HASH, DB_CREATE|DB_THREAD, 0);
#endif
---
Не уверен, что нужно инициализировать подсистему DB_INIT_LOCK
> Если нужна какая-то ультраскорость :) попробуй убрать флаг > DB_INIT_LOCK и сам занимайся синхронизацией. > С флагами памяти ещё можно поиграться... Только наврядли > это что-то даст. > Больше мыслей нет.
Основная проблема, как мне кажется - блокировка page-level locking. Например, для DB_QUEUE, где этого нет (там record-level locking) - работает просто ультрасаунд. Поетому, если ключи и данные небольшие, так что всё помещается на нескольких страницах, блокировка страницы душит всю DB. Надо б найти способ уменьшить кол-во записей на страницу.
|