Вложенное неотносительное (nosql) хранилище данных [закрылось]

Я думаю об использовании/осуществлении некоторого вложенного значения ключа (или документ) магазин для своего настольного приложения Windows. Я хочу быть в состоянии сохранить различные типы данных (следы GPS были бы одним примером) и конечно быть в состоянии подвергнуть сомнению эти данные. Объем данных был бы таков, что не мог все быть загружен в память одновременно.

Я думаю об использовании sqlite как двигатель хранения для магазина значения ключа, чего-то как y-serial, но написанный в .NET. Я также читал об использовании FriendFeed MySQL, чтобы хранить данные схемы меньше, которые являются хорошим указателем о том, как использовать RDBMS для неотносительных данных. sqlite, кажется, хороший вариант из-за своей простоты, мобильности и размера библиотеки.

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

ОБНОВЛЕНИЕ: я нашел, что статья назвала SQLite как Базу данных Значения ключа, которая сравнивает sqlite с DB Беркли, которая является вложенной библиотекой магазина значения ключа.

21
задан Igor Brejc 17 January 2010 в 20:30
поделиться

6 ответов

Лично я бы пошел на SQLite с Nibernate (и свободно владеет Nibernate). NHIBERNATE может автоматически генерировать схему базы данных базы данных для ваших классов, поэтому вам просто нужно указать, какие классы вы хотите сохранить, и это довольно легко с беглым Nibernate. Кроме того, вы можете искать определенные объекты, и вам не нужно загружать все данные в память.

5
ответ дан 29 November 2019 в 20:32
поделиться

Windows имеет встроенное встроенное нереляционное хранилище. Он называется ESENT и используется несколькими приложениями Windows, включая Active Directory и Windows Desktop Search.

http://blogs.msdn.com/windowssdk/archive/2008/10/23/esent-extensible-storage-engine-api-in-the-windows-sdk.aspx

Если вам нужен .NET доступ вы можете использовать на уровне ManagedEsent на CodePlex.

http://managedesent.codeplex.com/

В этом проекте есть класс PersistentDictionary, реализующий хранилище значений ключей, реализующий интерфейс IDictionary, но поддерживаемый базой данных.

19
ответ дан 29 November 2019 в 20:32
поделиться

Применяя принцип KISS к вашей проблеме, я бы рекомендовал вам использовать файлы.

Как в имени файла - это ключ. Содержимое файла - это значение. Папка Windows - это индекс.

Простой, быстрый, эффективный, гибкий и надежный (при условии, что у дураков низкий интеллект).

2
ответ дан 29 November 2019 в 20:32
поделиться

Спасибо за любезное упоминание y_serial... точнее, это модуль Python:

хранение объектов Python с помощью SQLite

"Serialization + persistance :: в несколько строк кода, сжимайте и аннотируйте объекты Python в SQLite; затем позже извлекайте их в хронологическом порядке по ключевым словам без какого-либо SQL. Самый полезный "стандартный" модуль для базы данных для хранения бессхемных данных."

http://yserial.sourceforge.net

По моему опыту, SQLite является более быстрым и надежным выбором, чем большинство баз данных (включая PostgresQL и Berkeley DB) для большинства проектов -- и, конечно, ему не нужен демон сервера.

yserial очень легко реализовать (и гораздо быстрее, чем подход "имя файла - ключ / содержимое файла - значение" ;-)

.
1
ответ дан 29 November 2019 в 20:32
поделиться

Не могли бы вы создать простую базу данных sqlite с двумя столбцами:

==documents==
id|data

и данными будут данные json.

Вы также можете создать таблицу ключей:

==keys==
keyname|keyvalue|id

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

Один файл базы данных может быть коллекцией, и вы можете создать несколько файлов базы данных для нескольких коллекций.

Вы можете использовать папки как «dbs», чтобы соответствовать иерархии mongodb db-> collection-> document

2
ответ дан 29 November 2019 в 20:32
поделиться

Взгляните на RavenDB . Похоже, что он может быть встроен, не имеет схемы и работает с .NET

С веб-сайта:

  • Масштабируемая инфраструктура: Raven строится поверх существующей, проверенной и масштабируемой инфраструктуры
  • Простая конфигурация Windows: Raven прост для настройки и запуска в Windows в качестве службы или веб-сайта IIS7
  • Транзакционный: Raven поддерживает System.Transaction с транзакциями ACID. Если вы поместите в него данные, эти данные останутся там.
  • Map / Reduce: легко определять сопоставление / сокращение индексов с помощью запросов Linq
  • .NET Client API: Raven поставляется с полнофункциональным .NET client API, который реализует Единица работы и многое другое
  • RESTful: Raven построен на основе RESTful API
10
ответ дан 29 November 2019 в 20:32
поделиться
Другие вопросы по тегам:

Похожие вопросы: