memp_trickle почти наверняка замедляет работу. Часто полезно использовать струйку, но она должна быть эффективной в своем потоке. BDB (за исключением случаев, когда вы входите в API-интерфейсы репликации более высокого уровня) не создает для вас потоков - ничего не происходит за кулисами (по потокам). струйка будет эффективна, когда грязные страницы будут вытеснены из кэша (посмотрите на вывод статистики, чтобы увидеть, происходит ли это).
Вы можете также рассмотреть возможность использования BTREE вместо HASH. Да, я знаю, что ты специально сказал хэш, но почему? Если вы хотите максимизировать производительность, зачем добавлять это ограничение? Возможно, вы сможете воспользоваться ссылочным местоположением, чтобы уменьшить объем кэш-памяти - часто вы полагаете, что гораздо больше локали, или, возможно, вы можете создать их - если вы генерируете ключи со случайными цифрами, например, перед датой и время. Это обычно вводит локальность в воспринимаемую «случайную» систему. Если вы используете btree, вам нужно будет обратить внимание на порядок следования байтов для ваших ключей для вашей системы (посмотрите Endianness в Википедии), если вы используете систему Little Endian, вам нужно поменять местами байты. Использование BTREE с правильным упорядочением и введенным местоположением означает, что ваши пары ключ / значение будут храниться в порядке «времени генерации ключа», поэтому, если вы увидите наибольшее количество действий с последними ключами, вы будете стремиться попасть на те же страницы. снова и снова (смотрите ваш рейтинг попаданий в кеш в вашей статистике). Так что вам понадобится меньше кеша. Еще один способ представить это с тем же объемом кэша, ваше решение будет увеличено в несколько раз.
Я ожидаю, что ваше реальное приложение действительно не вставляет целые ключи по порядку (если это произойдет, вам повезет). Таким образом, вы должны написать тест, который точно имитирует ваши шаблоны доступа, по крайней мере, в отношении: размера ключа, размера данных, шаблона доступа, количества элементов в базе данных, сочетания операций чтения / записи. Как только вы это сделаете, посмотрите на статистику - обратите пристальное внимание на все, что подразумевает IO или конфликт.
Кстати, я недавно начал вести блог на http://libdb.wordpress.com, чтобы обсудить настройку производительности BDB (и другие вопросы, связанные с BDB). Вы можете получить хорошие идеи там. Задержка и пропускная способность могут быть огромными, в зависимости от того, какую настройку вы выполняете. В частности см. http://libdb.wordpress.com/2011/01/31/revving-up-a-benchmark-from-626-to-74000-operations-per-second/