5

Я ищу общую структуру доступа к данным, которая обеспечит переносимость различных баз данных nosql, таких как SimpleDB, Azure Tables, Cassandra, CouchDB, MongoDb и т. Д. Я создаю приложение и хочу, чтобы мои клиенты могли использовать которые когда-либо хранят в магазине nosql.Есть ли агрегированная база данных nosql для .NET?

В более реляционном сценарии я бы использовал Linq над nHibernate или Entity Framework, но я не нашел эквивалентную структуру для баз данных nosql. Все, что я нашел, это API, специфичный для базы данных, хотя, похоже, существует значительная общность. Есть ли один? Предпочтительно один с LINQ.

ответ

4

Нет эти вещи слишком разные и слишком специфичны (по крайней мере, сейчас). Если вы хотите что-то действительно просто, как просто обертка на объекте, к которому обращается только по ID, тогда у вас может быть надежда. Фактически, если вы посмотрите на NoRM, можно будет адаптировать это к различным провайдерам.

Однако, за пределами небольшого набора основных функций эти базы данных «NoSQL» во многих отношениях сильно отличаются друг от друга. Я имею в виду, как вы агностически реализуете различные функции map/reduce? Как вы реализуете атомные операции, когда они поддерживают разные атомные операции?

В любом случае, мы слишком рано находимся в жизненном цикле NoSQL, чтобы иметь все это для агностики. Azure в основном отказались от предложения NoSQL в пользу «размещенного SQL-сервера». MongoDB, возможно, 20 месяцев, CouchDB по-прежнему находится на версии 0.11.x, SimpleDB составляет менее 24 месяцев, Cassandra - на версии 0.6.2 и, возможно, регулярно используется в течение нескольких лет.

Мы просто еще нет.

+0

Итак, каков основной набор общих функций прямо сейчас? Это действительно просто объект, доступ к которому осуществляется через его идентификатор объекта? BTW. Azure не отказались от таблиц, они просто предложили как Relational, так и NoSQL. То же самое, что Амазонка сделала с RDS. –

+1

На этом этапе я думаю, что вы получаете базовые операции CRUD. Map/Reduce значительно отличается даже между Couch и Mongo (которые относительно похожи). Некоторые из перечисленных предложений поддерживают управление версиями, но Mongo этого не делает. У Couch есть концепция «взглядов», которая является центральной для уменьшения карты, но Mongo просто бросает выходы с уменьшением карты в новую коллекцию. Таким образом, возможно, что вы могли бы «абстрагировать» это, но это много абстрагируется, b/c они делают разные вещи. –

1

Есть поставщики LINQ для MongoDB, но я не думаю, что существует общий провайдер linux .net для «всех» nosql db.

Некоторые люди рассматриваются около родового языка NoSQL запроса: http://nosql.mypopescu.com/post/731261002/a-common-nosql-query-language

+1

Итак, структурированный язык запросов «без структурированного запроса»? Хмммм ... вроде промахивается, не так ли? :-) –

+0

@Warren, что довольно иронично – Mocky

0

Если у вас есть только основные требования к сохранению персистентности, я поддерживаю common caching API с провайдерами для кэширования Memcached, Redis, InMemory и FileSystem.

Он поддерживает только Redis, но у меня есть C# Redis Client, который имеет очень знакомый C# API. Он изначально поддерживает сохраняющиеся типы POCO и предоставляет все передовые серверные структуры данных Redis как собственные структуры данных .NET IList, ICollection, поэтому их можно легко использовать в существующих API-интерфейсах C#, таких как LINQ и т. Д.