простой в использовании / встраивание бинарно-безопасного ключа / значения БД - PullRequest
1 голос
/ 07 марта 2011

Я ищу БД, которая:

  • может сохранять пары двоичный ключ / двоичное значение и возвращать их по ключу,
  • прост в использовании,
  • легко встраивается в мое приложение C ++,
  • не имеет проблем с огромным объемом данных (~ 100 ГБ) на младших компьютерах (то есть на любом настольном компьютере, на котором достаточно места на жестком диске),
  • не имеет проблем с огромным количеством пар ключ / значение (1000M или более),
  • сохраняет данные на жестком диске,
  • действительно инициализируется очень быстро / мгновенно приперезапуск с учетом предыдущих данных.

Более конкретно, я хочу использовать его здесь: png-db .

Пока я пробовал:

  • Сама файловая система, ключи хранятся в шестнадцатеричном представлении в виде имен файлов, значения в качестве содержимого файла.

    Единственной реальной проблемой было огромное количество пар ключ / значение.Около 50 МБ данных привело к получению около 100 тыс. Файлов (т. Е. Пар ключ / значение).

  • Redis .

    Основная проблема заключается в том, что он пытаетсяхранить все в памяти (или собственную реализацию виртуальной памяти, но это не решает проблему).Очевидно, что он не может обрабатывать такие огромные объемы данных.И запуск также очень медленный, потому что он читает всю БД в память.

  • KyotoCabinet .

    Работает лучше всего, но имеет странное поведениепри выключении и перезагрузке БД.Особеннодля перезагрузки иногда требуется несколько минут для загрузки БД (размером около 1 ГБ).Не понимаю, почему загрузка БД не должна занимать постоянное время.

Другие БД, о которых я думал:

  • SQLite.Я действительно еще не работал с этим;Я только знаю, что это ESP.сделано для встраивания.Но у меня есть ощущение, что язык SQL немного излишний для моего сценария использования, и что у меня также могут возникнуть проблемы с двоичными данными (или я не уверен, как мне справиться с этим; избежать всего? Что будет довольно медленно).

Итак, что бы вы предложили?

Ответы [ 2 ]

2 голосов
/ 08 марта 2011

Berkeley DB обладает возможностями, которые вы ищете.Это библиотека, которая ссылается на ваше приложение.Это маленький и очень быстрый.Он поддерживает пары ключ / значение и простой в использовании API.Это очень портативный, надежный и масштабируемый .Он работает на многих платформах.Он предназначен для использования в стесненных условиях и работает на множестве различных устройств и устройств.

Отказ от ответственности: я менеджер по продукту в Berkeley DB, поэтому я немного предвзят.Но BDB был разработан для того, чтобы делать именно то, что вы ищете - быстрое, надежное, портативное, масштабируемое встроенное хранилище данных.Мы делали пары ключ / значение в течение многих лет.Мы были NoSQL, прежде чем NoSQL был популярен.: -)

Удачи в поиске.- Дэйв

0 голосов
/ 07 марта 2011

Если вы согласны с преобразованием двоичных ключей в шестнадцатеричную реализацию, вы можете попробовать любую базу данных, которая вам нравится, но на младших компьютерах основным узким местом будет дисковый ввод-вывод.

У вас будет много таблиц и связей между ними, или это будет просто большой набор пар ключ / значение? Если это такой простой список, вы можете написать что-нибудь самостоятельно. Основой для этого может быть реализация структурированного хранилища Windows. На самом деле это разновидность файловой системы в файле, которая используется приложениями Microsoft Office, включая Word и Access, для хранения своих данных.

Запись в эти файлы может быть очень быстрой, но они со временем фрагментируются, потому что данные записываются в конце, если недостаточно свободного места. В этом случае вам нужно будет сжать файл, что, очевидно, займет немного времени. Поэтому было бы лучше не создавать огромные файлы, а объединять возможности файловой системы с мощью этих файлов, потому что это не позволит вам создавать миллионы файлов (тратить впустую миллионы частичных кластеров), пока их можно поддерживать легко, потому что файлы данных не слишком большие.

Конечно, вы также можете создать свой собственный файл данных, если структурированное хранилище кажется слишком сложным или медленным или имеет слишком много служебных данных.

Но помните, что будет очень сложно заставить базу данных объемом 100 ГБ работать быстро и мгновенно из простой настольной установки на одном диске.

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