Встроенный нереляционный (nosql) хранилище данных
Я думаю об использовании/внедрении какого-либо встроенного хранилища ключей (или документов) для моего рабочего стола Windows. Я хочу иметь возможность хранить различные типы данных (например, треки GPS), и, конечно, можно запросить эти данные. Объем данных будет таким, что он не может быть загружен в память одновременно.
Я думаю об использовании sqlite в качестве механизма хранения для хранилища ключей, что-то вроде y-serial, но написано. СЕТЬ. Я также читал о использовании FriendFeed MySQL для хранения данных без схемы, что является хорошим указателем на использование RDBMS для нереляционных данные. sqlite кажется хорошим вариантом из-за его простоты, мобильности и размера библиотеки.
Мой вопрос: есть ли какие-либо другие варианты встроенного нереляционного хранилища? Его не нужно распространять, и он не должен поддерживать транзакции, но он должен быть доступен из .NET, и он должен иметь небольшой размер загрузки.
UPDATE: я нашел статью под названием SQLite в качестве базы данных ключевых значений, которая сравнивает sqlite с Berkeley DB, который является встроенным ключом библиотека хранения значений.
Ответы
Ответ 1
В 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, но поддерживается базой данных.
Ответ 2
Посмотрите RavenDB. Похоже, что он может быть встроен и схематичен и работает с .NET.
С веб-сайта:
- Масштабируемая инфраструктура: Raven строится поверх существующей, проверенной и масштабируемой инфраструктуры.
- Простая конфигурация Windows: Raven прост в настройке и запуске в Windows как служба или веб-сайт IIS7.
- Транзакция: Ворон поддерживает System.Transaction с транзакциями ACID. Если вы поместите в него данные, эти данные будут оставаться там.
- Карта/Уменьшить: легко определить индексы карты/уменьшения с помощью запросов Linq
- .NET Client API: Raven поставляется с полностью функциональным API-интерфейсом .NET, который реализует Единицу работы и многое другое
- RESTful: Raven построен вокруг API RESTful
Ответ 3
Лично я бы пошел на SQLite с NHibernate (и Fluent NHibernate). NHibernate может автоматически генерировать схему базы данных для ваших классов, поэтому вам просто нужно указать, какие классы вы хотите сохранить, и это довольно просто с Fluent NHibernate. Кроме того, вы можете искать определенные объекты, и вам не нужно загружать все данные в память.
Ответ 4
Применяя принцип KISS к вашей проблеме, я бы рекомендовал вам использовать файлы.
Как и в имени файла, это ключ.
Содержимое файла - это значение.
Папка Windows - это индекс.
Простая, быстрая, эффективная, гибкая и надежная (при условии, что дураки имеют низкий интеллект).
Ответ 5
Не удалось создать простую базу данных sqlite с двумя столбцами:
==documents==
id|data
и данные будут json-данными.
Вы также можете создать таблицу ключей, которая будет:
==keys==
keyname|keyvalue|id
который будет индексироваться по ключевым словам и ключевым значениям для быстрого поиска.
Один файл db может быть коллекцией, и вы можете создать несколько файлов db для нескольких коллекций.
Вы можете использовать папки как "dbs", чтобы соответствовать иерархии mongodb документа db- > collection- >
Ответ 6
Это старый вопрос, но я подумал, что добавлю ответ, если кто-то наткнется на него. Моя компания только что выпустила встроенную базу данных XML с открытым исходным кодом для платформы .NET под названием Nxdb. Он под лицензией Apache 2.0 и находится в разработке и использовании внутри уже несколько лет. Это в основном привязка к кросс-скомпилированной (с использованием IKVM) версии BaseX (фантастической базы данных Java XML), а также дополнительной функциональности для встроенного варианта использования и среды .NET. Страница проекта находится здесь: https://dracorp.assembla.com/spaces/nxdb
XML хорошо работает для хранилища данных такого типа, учитывая, что до тех пор, пока контент, который вы пытаетесь сохранить, сериализуется в текст, вы можете хранить сложные иерархические деревья. Фактически, если вы напрямую обращаетесь к базе данных, вам даже не нужно прикасаться к "XML". Он также может быть запрошен с помощью XQuery, мощного и полного языка запросов.
Ответ 7
Спасибо за ваше любезное упоминание о y_serial... точнее, это модуль Python:
хранилище объектов Python с SQLite
"Сериализация + персистентность:: в нескольких строках кода, сжатие и аннотирование объектов Python в SQLite, а затем их хронологически восстановить по ключевым словам без какого-либо SQL. Самый полезный" стандартный "модуль для базы данных для хранения данных без схемы."
http://yserial.sourceforge.net
По моему опыту, SQLite - это более быстрый и надежный выбор, чем большинство баз данных (включая PostgresQL и Berkeley DB) для большинства проектов - и, конечно же, ему не нужен демон сервера.
yserial очень прост в реализации (и намного быстрее, чем "имя файла - это ключ/содержимое файла - это значение"; -)
Ответ 8
Вы можете попробовать этот https://github.com/mdsoftware/mData. Маленький, свободный и довольно необычный. Lisp -подобный язык запросов данных, компилятор выражений, высокопроизводительная двоичная сериализация, все включено.