База данных ключ / значение для хранения двоичных данных - PullRequest
5 голосов
/ 21 марта 2012

Я ищу легкую, надежную и быструю базу данных ключ / значение для хранения двоичных данных.Просто без сервера.Большинство популярных баз данных ключ / значение, таких как CDB и BerkeleyDB, изначально не хранят BLOB.Что может быть лучшим выбором, который я пропустил?

Мой текущий выбор - SQLite, но он слишком сложен для моего простого использования.

Ответы [ 6 ]

8 голосов
/ 21 марта 2012

Как было указано ранее, BerkeleyDB поддерживает непрозрачные значения и ключи, но я бы предложил лучшую альтернативу: LevelDB.

LevelDB:

Google isВаш друг :), настолько, что они даже предоставляют вам встроенную базу данных: Быстрая и легкая библиотека баз данных ключей / значений от Google.

Особенности:

  • Ключи и значения являются произвольными байтовыми массивами.
  • Данные хранятся отсортированными по ключу.
  • Вызывающие стороны могут предоставить пользовательскую функцию сравнения для отмены порядка сортировки.
  • Базовыми операциями являются Put (ключ, значение), Get (ключ), Delete (ключ).
  • В одну атомную партию можно внести несколько изменений.
  • Пользователи могутсоздайте временный снимок для получения согласованного представления данных.
  • Для данных поддерживается прямая и обратная итерация.
  • Данные автоматически сжимаются с использованием библиотеки сжатия Snappy.
  • Внешняя активность (работа файловой системыи т. д.) передается через виртуальный интерфейс, чтобы пользователи могли настраивать взаимодействия операционной системы.
  • Подробная документация по использованию библиотеки включена в исходный код.
3 голосов
/ 21 марта 2012

С чего вы взяли, что BerkDB не может хранить двоичные данные?Из их документов:

Ключевыми и контентными аргументами являются объекты, описываемые datum typedef.Datum определяет строку байтов dsize, на которую указывает dptr.Разрешены произвольные двоичные данные, а также обычные текстовые строки.

Также см. Их примеры :

money = 122.45;
key.data = &money;
key.size = sizeof(float);
...
ret = my_database->put(my_database, NULL, &key, &data, DB_NOOVERWRITE);
1 голос
/ 08 февраля 2013

Если вам не нужны «множественные процессы записи» (работает только несколько читателей), хотите что-то маленькое и хотите что-то, доступное почти на каждом linux, вы можете взглянуть на gdbm, который похож на berkeley db, но гораздо проще.Кроме того, возможно, это не так быстро.

Почти в одной и той же области есть такие вещи, как tokyocabinet, qdbm и уже упомянутый leveldb.

Беркли БД и sqlite опережают их, потому что они поддерживают несколькописатели.Berkeley db иногда работает с версиями.

Главный профессионал gdbm: он уже есть на каждом linux, проблем с версиями нет, маленький.

0 голосов
/ 22 февраля 2016

Использование sqlite теперь легко с новыми функциями readfile (X) и writefile (X, Y), которые доступны с 2014-06.Например, чтобы сохранить большой двоичный объект в базе данных из файла и извлечь его снова

     CREATE TABLE images(name TEXT, type TEXT, img BLOB);
     INSERT INTO images(name,type,img) VALUES('icon','jpeg',readfile('icon.jpg'));
     SELECT writefile('icon-copy2.jpg',img) FROM images WHERE name='icon';

см. https://www.sqlite.org/cli.html «Функции ввода-вывода файла»

0 голосов
/ 30 января 2015

Вы можете взглянуть на http://www.codeproject.com/Articles/316816/RaptorDB-The-Key-Value-Store-V2 мой друг Базы данных.

0 голосов
/ 21 марта 2012

Какая ОС у вас работает? Для Windows вы можете попробовать ESE , который является очень надежным механизмом хранения, который поставляется как часть ОС. Он поддерживает Active Directory, Exchange, DNS и некоторые другие серверные продукты Microsoft и используется многими сторонними продуктами (в качестве хорошего примера вспоминается RavenDB ).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...