Я думаю об использовании/осуществлении некоторого вложенного значения ключа (или документ) магазин для своего настольного приложения Windows. Я хочу быть в состоянии сохранить различные типы данных (следы GPS были бы одним примером) и конечно быть в состоянии подвергнуть сомнению эти данные. Объем данных был бы таков, что не мог все быть загружен в память одновременно.
Я думаю об использовании sqlite как двигатель хранения для магазина значения ключа, чего-то как y-serial, но написанный в .NET. Я также читал об использовании FriendFeed MySQL, чтобы хранить данные схемы меньше, которые являются хорошим указателем о том, как использовать RDBMS для неотносительных данных. sqlite, кажется, хороший вариант из-за своей простоты, мобильности и размера библиотеки.
Мой вопрос состоит в том, есть ли какие-либо другие возможности для вложенного неотносительного магазина? Это не должно быть распределяемо, и это не должно поддерживать сделки, но это действительно должно быть доступно от .NET, и у этого должен быть небольшой размер загрузки.
ОБНОВЛЕНИЕ: я нашел, что статья назвала SQLite как Базу данных Значения ключа, которая сравнивает sqlite с DB Беркли, которая является вложенной библиотекой магазина значения ключа.
Лично я бы пошел на SQLite с Nibernate (и свободно владеет Nibernate). NHIBERNATE может автоматически генерировать схему базы данных базы данных для ваших классов, поэтому вам просто нужно указать, какие классы вы хотите сохранить, и это довольно легко с беглым Nibernate. Кроме того, вы можете искать определенные объекты, и вам не нужно загружать все данные в память.
Windows имеет встроенное встроенное нереляционное хранилище. Он называется ESENT и используется несколькими приложениями Windows, включая Active Directory и Windows Desktop Search.
Если вам нужен .NET доступ вы можете использовать на уровне ManagedEsent на CodePlex.
http://managedesent.codeplex.com/
В этом проекте есть класс PersistentDictionary, реализующий хранилище значений ключей, реализующий интерфейс IDictionary, но поддерживаемый базой данных.
Применяя принцип KISS к вашей проблеме, я бы рекомендовал вам использовать файлы.
Как в имени файла - это ключ. Содержимое файла - это значение. Папка Windows - это индекс.
Простой, быстрый, эффективный, гибкий и надежный (при условии, что у дураков низкий интеллект).
Спасибо за любезное упоминание y_serial... точнее, это модуль Python:
хранение объектов Python с помощью SQLite
"Serialization + persistance :: в несколько строк кода, сжимайте и аннотируйте объекты Python в SQLite; затем позже извлекайте их в хронологическом порядке по ключевым словам без какого-либо SQL. Самый полезный "стандартный" модуль для базы данных для хранения бессхемных данных."
http://yserial.sourceforge.net
По моему опыту, SQLite является более быстрым и надежным выбором, чем большинство баз данных (включая PostgresQL и Berkeley DB) для большинства проектов -- и, конечно, ему не нужен демон сервера.
yserial очень легко реализовать (и гораздо быстрее, чем подход "имя файла - ключ / содержимое файла - значение" ;-)
.Не могли бы вы создать простую базу данных sqlite с двумя столбцами:
==documents==
id|data
и данными будут данные json.
Вы также можете создать таблицу ключей:
==keys==
keyname|keyvalue|id
, которая будет индексироваться по имени и значению ключа для быстрого поиска.
Один файл базы данных может быть коллекцией, и вы можете создать несколько файлов базы данных для нескольких коллекций.
Вы можете использовать папки как «dbs», чтобы соответствовать иерархии mongodb db-> collection-> document
Взгляните на RavenDB . Похоже, что он может быть встроен, не имеет схемы и работает с .NET
С веб-сайта: