Альтернатива BerkeleyDB?
Я ищу библиотеку, подобную dbm, которую я могу использовать вместо Berkeley DB, которую я сейчас использую. Моя основная причина для переключения - плата за лицензирование для BDB довольно высока (бесплатно для приложений с открытым исходным кодом, но мой работодатель не хочет открывать исходное приложение именно по различным причинам).
Я кратко посмотрел на qdbm, но похоже, что он не заполнит мои потребности - много ключей (несколько миллионов) и больших элементов данных ( > 1-5 мегабайт). Прежде чем продолжить поиск, я решил, что спрошу, потому что кажется, что там есть тонны библиотек, похожих на dbm.
Ответы
Ответ 1
C/С++
- http://sphia.org/ хранилище ключей/значений, написанное на C и BSD-лицензированном.
- https://code.google.com/p/leveldb/ Написан на С++, также BSD-Licensed
- http://luxio.sourceforge.net/ Написано на С++, LGPL, быстрее, чем Berkeley DB
- http://symas.com/mdb/ Написанная на языке C лицензией является общедоступная лицензия OpenLDAP (BSD-Like)
- https://github.com/davidar/sdbm
Написано в C, Public Domain, Reimplementation "ndbm"
- http://repetae.net/computer/vsdb/ Написано на C, Лицензия неизвестна, Экспериментальная
- https://github.com/stevedekorte/skipdb Написано в C, BSD-Licensed, Key-value Store, используя индексы Skip-List
- http://unqlite.org/
написанный на C/С++, Embedded NoSQL Database Engine, BSD-лицензированный, похожий на SQLite.
- http://hamsterdb.com/
Написано в C/С++, Embedded NoSQL Database Engine, Apache License 2.0.
Java
- https://github.com/dain/leveldb Порт Java LevelDB, версия Apache 2.0
- https://github.com/jingwei/krati Бывший проект LinkedIn, версия Apache 2.0
- http://www.mapdb.org/ Встроенная база данных Java, Apache License 2.0, поддерживает хранение ключей, очень эффективную сериализацию объектов
- https://github.com/OpenHFT/Chronicle-Map, LGPL v3, встроенное чистое хранилище ключей Java, быстрее, чем Berkeley DB
- https://github.com/jetbrains/xodus, Apache License 2.0, встроенная база данных с транзакционной схемой Java, быстрее, чем Berkeley DB
- https://github.com/lmdbjava/lmdbjava, привязка JNI для LMDB, версия Apache 2.0
Ответ 2
Вы можете посмотреть Токийский кабинет. Его преемник qdbm/gdbm, и если вы решите масштабировать, у вас будет хороший доступ к интерфейсу сети.
Edit:
Другим вариантом является Киотский кабинет; разработанный одним и тем же человеком, но, возможно, более простой в использовании.
Ответ 3
SQLite является общедоступным, что означает, что вы можете использовать его для каких-либо целей и широко используется и поддерживается.
Ответ 4
Вы можете получить значительно улучшенную производительность из любого dbm (даже qdbm) и улучшенного parallelism с простым уровнем косвенности: просто возьмите свои ключи и хэш их и используйте data_dir/H(key)/
в качестве базы данных для хранения этих ключей. Ограничьте вывод хеша на небольшое значение (скажем) 255 для достижения наилучших результатов.
Этот подход имеет ряд преимуществ, легко суммируемых:
- Концептуально простой
- Простота внедрения и тестирования
- Не блокирует всю базу данных для обновлений
- Может поддерживать гораздо большие базы данных
- Легко заменить компонент DBM
Хэш, вероятно, даже не нуждается в криптографической защите; просто в основном единый. DJB cdb hash хорошо работает в большинстве случаев.
Ответ 5
Если вы находитесь в Windows, вы можете использовать встроенный механизм базы данных. http://blogs.msdn.com/windowssdk/archive/2008/10/23/esent-extensible-storage-engine-api-in-the-windows-sdk.aspx
Ответ 6
Вы можете попробовать JDBM. Это бесплатное хранилище ключей (Apache 2) с сохранением диска. Простой API и высокая производительность
Ответ 7
Postgres или HSQLDB и возможно даже база данных H2
Ответ 8
db4o довольно дешево и быстро, но его можно использовать только с java или .net
Ответ 9
Firebird - ваш лучший друг.