Самое быстрое хранилище ключей -> значений с несколькими значениями - PullRequest
4 голосов
/ 29 марта 2011

Я ищу эффективный способ хранения множества пар ключ-> значение на диске для сохранения, желательно с некоторым кэшированием.

Необходимые функции - либо добавить к значению (сцепить) для данного ключа или чтобы позволить модели быть ключом -> список значений, оба варианта в порядке. Значение-часть обычно является двоичным документом.

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

В отношении языка мы используем java, и у нас есть опыт работы с классическими базами данных (Oracle, MySQL и др.).

Я вижу пару очевидных сценариев и хотел бы получить совет о том, что является самым быстрым с точки зрения магазинов (и поисков) в секунду:

1) Хранить данные в классических db-таблицах стандартными вставками.

2) Сделайте это самостоятельно, используя дерево файловой системы для распространения на множество файлов, один или несколько на ключ.

3) Использовать хорошо известное хранилище кортежей. Некоторые очевидные кандидаты: 3a) Berkeley db java edition 3b) Современные NoSQL-решения, такие как cassandra и аналогичные

Лично мне нравится Berkely DB JE за мою задачу.

Подводя итог моим вопросам:

  • Похоже ли Berkely на разумный выбор, учитывая вышесказанное?

  • Какую скорость можно ожидать для некоторых операций, таких как обновления (вставка, добавление нового значения для ключа) и поиск заданного ключа?

Ответы [ 4 ]

4 голосов
/ 08 июля 2016

Вы также можете попробовать Карта хроники или JetBrains Xodus , которые оба являются встраиваемыми хранилищами ключей Java намного быстрее, чем Berkeley DB JE (еслиВы действительно ищете скорость).Chronicle Map предоставляет простой в использовании интерфейс java.util.Map.

2 голосов
/ 22 мая 2011

BerkeleyDB звучит разумно.Cassandra также была бы разумной, но, возможно, это излишне, если вам не нужны избыточность, кластеризация и т. Д.

При этом один узел Cassandra может обрабатывать 20 000 операций записи в секунду (при условии, что вы используете несколько клиентов для использования высокой скорости).параллелизм внутри Cassandra) на относительно скромном оборудовании.

1 голос
/ 05 апреля 2011

Berkeley DB JE должен отлично работать для описанного вами варианта использования. Производительность будет варьироваться в значительной степени в зависимости от того, сколько операций ввода-вывода требуется для каждой операции (и, как следствие, насколько велик доступный кэш) и от ограничений долговечности, которые вы определяете для транзакций записи (т. Е. Должна ли транзакция фиксации полностью записать на диск или нет)?

Вообще говоря, мы обычно видим 50-100K операций чтения в секунду и 5-12K операций записи в секунду на обычном оборудовании с BDB JE. Очевидно, YMMV.

Вопросы настройки производительности и пропускной способности BDB JE лучше всего задавать на форуме Berkeley DB JE , где всегда есть активное сообщество разработчиков приложений BDB JE, ​​которые могут помочь. В часто задаваемых вопросах BDB JE есть несколько полезных рекомендаций по настройке производительности, которые также могут пригодиться.

Желаем удачи в вашей реализации. Пожалуйста, дайте нам знать, если мы можем помочь.

С уважением,

Дейв - менеджер по продукции для Berkeley DB

1 голос
/ 29 марта 2011

FWIW, я использую Ehcache с вполне удовлетворительной производительностью; Я никогда не пробовал Беркли DB.

...