Мне любопытно, когда TokyoCabinet загружает ключи 1B за 25 минут, каковы размеры хранимых ключей / значений? Какие системы ввода-вывода и системы хранения вы используете? Используете ли вы термин «нагрузка» для обозначения транзакционных транзакций 1B в постоянное стабильное хранилище? Это будет ~ 666 666 вставок в секунду, что физически невозможно, учитывая любую систему ввода-вывода, о которой я знаю. Умножьте это число на величину ключа и значения, и теперь вы безнадежно выйдете за физические пределы.
Пожалуйста, взгляните на блог Gustavo Duarte , прочитайте немного о системах ввода-вывода и о том, как работают аппаратные средства, а затем просмотрите ваше утверждение. Мне очень интересно узнать, что именно TokyoCabinet делает, а что нет. Если бы мне пришлось угадывать, я бы сказал, что он либо фиксирует кэш файловой системы в операционной системе, но не сбрасывает (fdsync () -) эти буферы на диск.
Полное раскрытие информации: я являюсь менеджером по продукту в Oracle для Oracle Berkeley DB (прямой конкурент TokyoCabinet), я играю с этими базами данных и с лучшим оборудованием для них около десяти лет, поэтому я оба предвзятый и скептический.
В Berkeley DB есть флаги, которые вы можете установить в дескрипторе транзакции, которые имитируют этот и другие подобные методы замены долговечности ("D" в ACID) для скорости.
Что касается того, как сделать Berkeley DB Java Edition (BDB-JE) быстрее, вы можете попробовать следующее:
- Отложенные записи: это задерживает запись
в журнал транзакций до тех пор, пока
возможно (когда буферы заполнены, это
сбрасывает данные)
- Сортируйте ключи заранее: большинство
B-Trees (включая наших) делают много
лучше с порядком вставок для
быстрое время загрузки-
- Увеличение размера бревна
файлы по умолчанию от 10 МБ до
что-то большее, как 100MiB, это
снижает стоимость ввода-вывода -
Очень важно иметь четкое представление о требованиях к производительности с базами данных. Они кажутся простыми, но, оказывается, очень сложно сделать их правильно, чтобы они никогда не повредили данные и не потеряли совершенные транзакции.
Надеюсь, это вам немного поможет.