.NET — быстрое легкое постоянное хранилище ключей и значений.

Я ищу постоянное хранилище ключей и значений для .NET. Требования:

  • Хранилище используется для объектов, которые идентифицируются строками и имеют несколько необязательных (именованных) свойств со значениями, которые являются просто массивами байтов. Для решения SQL я бы смоделировал его как одну таблицу string -> id и несколько таблиц id -> blob.
  • Ожидаемый объем данных — несколько мегабайт (более 10 Мб на данный момент маловероятно, но масштабирование до 100 Мб было бы приятным бонусом)
  • Легкий - желательно разовый, обязательно без внешних приложений
  • Чтения происходят чаще, чем записи, по крайней мере, в 100 раз.
  • Быстрый доступ для чтения/записи — я ожидаю хранения в памяти и ленивой записи обновлений данных; Я могу периодически создавать асинхронные записи самостоятельно, бонусные баллы, если это делает хранилище.
  • Атомарный ввод-вывод — база данных не должна ломаться, если процесс завершается в середине записи; в противном случае данные не являются критическими, т. е. дополнительная избыточность не требуется.

В настоящее время я думаю, что здесь будет работать SQLite; однако это кажется небольшим излишеством - мне нужно только хранилище значений ключа, а не полная поддержка SQL. Я также слышал о привязке bdb и libdb-dotnet - она ​​кажется более легкой, но я не знаю характеристик производительности/согласованности.

Кто-нибудь может здесь что-нибудь порекомендовать? Дополнительные ссылки приветствуются (т.е. было бы здорово, если бы в .NET Framework было что-то, что может сделать эту работу), а также опыт работы с SQLite или libdb-dotnet (или bdb в целом) или самодельное решение, если это было безболезненно .


person zeuxcg    schedule 12.04.2011    source источник
comment
Звучит для меня, что использование любой базы данных было бы излишним для этого, всего 10 МБ, почему бы не читать/записывать все сразу на диск и с диска? (это не так уж много памяти занимает)   -  person Doggett    schedule 12.04.2011
comment
@Doggett, это звучит как повторное изобретение базы данных, если предлагаемое приложение нетривиально.   -  person driis    schedule 12.04.2011
comment
@Doggett, проблема в том, что запись полной БД при каждом обновлении будет медленной, и нет единой точки сброса (т. Е. Я не могу записать полную БД при выходе из приложения, потому что приложение может быть завершено преждевременно); Придется поддерживать частичные сбросы и делать их атомарными — пожалуй, это единственная нетривиальная вещь в этом.   -  person zeuxcg    schedule 12.04.2011


Ответы (1)


Возможно, посмотрите на http://ravendb.net/. Он хранит документы JSON в хранилище ключей и значений, но с отличной поддержкой объектов .NET.

Из вашего объяснения ваших потребностей вы также можете рассмотреть возможность использования управляемого механизма хранения «Raven.Munin», который представляет собой единую сборку.

person driis    schedule 12.04.2011