Подтвердить что ты не робот

Встроенный нереляционный (nosql) хранилище данных

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

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

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

UPDATE: я нашел статью под названием SQLite в качестве базы данных ключевых значений, которая сравнивает sqlite с Berkeley DB, который является встроенным ключом библиотека хранения значений.

4b9b3361

Ответ 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 -подобный язык запросов данных, компилятор выражений, высокопроизводительная двоичная сериализация, все включено.