Какие решения NoSQL существуют для .NET?

Какие NoSQL решения для .NET?

Ответ 1

Вам также следует рассмотреть возможность использования Redis. Это усовершенствованная база данных NoSQL с поддержкой богатых серверных структур данных, таких как списки, наборы, сортированные наборы и хэши. Он работает в памяти, но поддерживает режим сохранения "моментального снимка", а также журнал добавления файлов только для моментальных снимков.

Redis очень быстрый

Это также одна из самых быстрых баз данных NoSQL: 110000 SETs/second, 81000 GETs/second в Linux-блоке начального уровня. Проверить тесты.

Желая остаться верным Redis, я разработал очень быстрый клиент С# Redis с сильным фокусом на производительности. Запуск собственных тестов Raven DB настройка redis-сервера по умолчанию 16,9x быстрее, чем Raven DB. Когда вы настроите параметр appendfsync always (хотя и не рекомендуется), он по-прежнему быстрее на 11.75x.

@marcgravell разработал очень быстрый async С# Redis Client используется для обработки переполнений стека и других распределенных кеширования сайтов Exchange.

Простой и элегантный

Как и в большинстве хранилищ данных NoSQL, Redis не имеет схемы, позволяя вам использовать его сразу, без необходимости определять какие-либо схемы заранее - обеспечивая значительное повышение производительности. Красота Redis заключается в том, что ему нравится доступ к классам общих классов .NET, к которым вы привыкли в С#, поэтому очень мало проекций, которые необходимо выполнить, поскольку его API уже близко соответствует структурам списков и данных в памяти. программа уже использует.

Эта элегантность предлагает фундаментальные структуры данных Comp-sci, которые выделяют Redis, что позволяет ей быть чрезвычайно универсальной, но только поддерживая ограниченный набор операций. то есть Redis обычно рассматривается как распределенный кеш, очередь сообщений, брокера IPC между языками/процессами, Pub/Sub, comm/push-based-comms, распределенная блокировка, источник событий CQRS, генератор уникальных идентификаторов и т.д. не используя его в качестве основного хранилища данных, его скорость и простота дают вам доступ к универсальному инструментарию для швейцарской армии, который может выполнять множество прецедентов.

Полнофункциональный клиент Redis

Существует несколько С#/.NET Redis клиентов и на NuGet. В приведенном ниже примере используется клиент С# с открытым исходным кодом ServiceStack.

Вся документация и руководства для ServiceStack С# Redis Client доступны по адресу: http://www.servicestack.net/docs/redis-client/redis-client

Клиент предоставляет богатый интерфейс, обеспечивающий обертки для общего представления ILIST, IDictionary и ICollection.NET для структур данных на стороне сервера Redis. Для краткого обзора его функций проверить карту изображений API.

Хороший учебник, показывающий, как вы разрабатываете приложения реального мира, находится на: http://www.servicestack.net/docs/redis-client/designing-nosql-database

Смотрите исходный код Redis StackOverflow для другого пример реального приложения, полностью построенного с помощью Redis.

Пример кода, показывающего полное приложение CRUD:

public class Todo
{
    public long Id { get; set; }
    public string Content { get; set; }
    public int Order { get; set; }
    public bool Done { get; set; }
}

//Thread-safe client factory
var redisManager = new PooledRedisClientManager("localhost:6379");

redisManager.ExecAs<Todo>(redisTodos => {
    var todo = new Todo {
        Id = redisTodos.GetNextSequence(),
        Content = "Learn Redis",
        Order = 1,
    };

    redisTodos.Store(todo);

    Todo savedTodo = redisTodos.GetById(todo.Id);
    savedTodo.Done = true;

    redisTodos.Store(savedTodo);

    redisTodos.DeleteById(savedTodo.Id);

    var allTodos = redisTodos.GetAll();

    Assert.That(allTodos.Count, Is.EqualTo(0));
});

Чтобы играть с этим примером, см. ServiceStack Backbone TODO application с поддержкой С# Redis.

Работает на всех языках и платформах

В результате своей простоты он имеет языковые привязки почти для каждого используемого сегодня языка: http://redis.io/clients

Это еще более тонкое в динамических языках, вот как легко создавать неблокирующий веб-сервер с именованными счетчиками в node.js/CoffeeScript:

app.get '/counters/:id', (request, response) ->
    id = request.params.id
    redis.incr id, (err, val) ->
        response.send "#{id}: #{val}", 'Content-Type': 'text/plain', 201

Одним из преимуществ NoSQL является то, что вы можете перейти к с разработчиками из разных языковых фонов, чтобы разобраться, как лучше всего использовать redis для удовлетворения наших требовательных потребностей.

Широко используется крупнейшими компаниями

Из-за своей простоты, стабильности и скорости он использовал многие крупные компании, включая:

  • StackOverflow
  • GitHub
  • Twitter
  • Метель
  • Flickr
  • Digg
  • Instagram

Загрузка Redis для Windows

Я предоставил инструкции по установке и загрузил два наиболее популярных способа запуска Redis на windows: https://github.com/mythz/redis-windows, который показывает, как:

Ответ 2

Вы не указываете, какие ваши требования (т.е. должны выполняться в Windows), поэтому я выкину 2, которые я успешно использовал.

MongoDB - это база данных документов, в которой есть предварительно созданные двоичные файлы для 32-битной и 64-битной Windows. Это всегда приятно видеть.

Клиентский доступ можно выполнить с помощью этого драйвера. Он не является официальным клиентом самой команды MongoDB, но я его использовал. И в моем использовании он поддерживал то, что мне нужно. В репо есть материал LINQ, но я его не пробовал.

// from the wiki
using MongoDB.Driver; 
Mongo db = new Mongo(); 
db.Connect(); //Connect to localhost on the default port. 
Document query = new Document(); 
query["field1"] = 10; 
Document result = db["tests"]["reads"].FindOne(query); 
db.Disconnect();

Я смог без проблем запускать как клиент, так и сервер в Windows.

CouchDB также является опцией. Есть некоторые собственные .NET-клиенты, но все CouchDB выполняется с помощью REST. Таким образом, HttpWebRequest/Response хорошо вам подойдет. A запись в блоге Рината Абдуллина показывает, как некоторые части сочетаются друг с другом. Существует также CouchBrowse. Я никогда не пользовался родным клиентом. GET/PUT/POST отлично поработали для меня.

Я получил CouchDB для работы в Windows (он написан в Erlang), но мое тестирование производительности показало, что Linux был быстрее. Мое предположение, может быть, в том, как реализован сам Эрланг? Не знаю. Но он работает как на Windows, так и на Linux. И я смог легко вызвать экземпляр Linux из Windows (это просто REST).

Этот следующий, который я никогда не пробовал, но у меня есть друг, который является участником проекта HBase. И он думает, что Thrift интерфейс к HBase должен использоваться из .NET(поскольку Thrift будет генерировать С#). Большим преимуществом здесь является тот факт, что Hadoop/HBase больше ориентированы на среды * nix. Но нет причин, по которым вы не могли бы запускать HBase в кластере Linux и подключаться к нему с .NET для Windows для производства. Для разработки вы можете запустить HBase в Windows с помощью Cygwin. Хороший набор инструкций о том, как это сделать, здесь.

Есть и другие (Valdemort, Cassandra и т.д.), но у меня нет реального опыта с ними, поэтому я не буду притворяться, что они интегрируются с С#/. NET. Самое главное, на что посмотреть их API: если у него есть интерфейс Thrift, REST и т.д., Вы можете подключиться к ним без проблем. Возможно, вы не сможете запускать службу NoSQL в ОС Windows так же эффективно, как Linux, но, возможно, это не очень важно.

EDIT Изменено, что есть некоторые родные клиенты CouchDB. Я не знаком с ними, поскольку я всегда использую raw HTTP и свои собственные классы-оболочки.

Ответ 4

RavenDB от Ayende - это бэкэнд на базе .NET и клиентский NoSQL (в частности, база данных документов). Источник свободно доступен. Производительность находится на уровне MongoDB (последние тесты были около 6000 вставок в секунду). Индексирование выполняется очень умным способом, используя LINQ. интерфейс REST, веб-интерфейс. Очень очень умный на самом деле.

RavenDB может работать как служба, IIS или через консоль (exe). Это требует .NET 4 для серверной части.

Клиент может быть .NET 3.5. На самом деле клиент будет работать в Mono Я считаю.

http://groups.google.com/group/ravendb/web - вся документация есть

Я отправился на запуск мероприятия, добавились удивительные возможности и многое другое. Все были потрясены Ворон, поэтому, безусловно, нужно проверить.

Ответ 5

Я использую BrightstarDB для последнего проекта, над которым я работаю. Это родной .NET NoSQL с полной Entity Framework (что заставило задуматься о том, как запустить приложение с первой загрузки).

Сначала я попробовал RavenDB, но хотя было довольно просто установить все MapReduce и инструменты настройки индексации заняли слишком много времени, чтобы я мог размахивать головой и был медленным и неуклюжим, когда я хотел ориентироваться в отношениях между "вещами" в обоих направлениях.

BrightstarDB был блестящим для разработки, и он действительно похож на первый код Entity Framework, но без боли в базе данных, и я могу делать нагрузки изменений в моей datamodel без боли, которую мне пришлось пройти с SQL.

Это определенно стоит взглянуть!

Ответ 6

Посмотрите db4o. Он объектно-ориентированный, простой, автономный (например, sqlite3) работает с LINQ и открытым исходным кодом.

Ответ 7

Если вы хотите, чтобы легкие модули баз данных хорошо работали с .NET и поддерживали LINQ, вы можете попробовать Eloquera, STSdb ​​и Siaqodb.
См. этот пост в своем блоге, чтобы понять, что они предлагают.

Ответ 8

Microsoft выпускает скоро (конец 2011 года) решение NoSQL на SQL Azure.

Он основан на новой функции Federations и использует XML для полуструктурированное хранилище.

[Edit] Перед запуском читайте статьи, в которых объясняется, как использовать функции "NoSQL" в SQL Azure, которая, очевидно, отлично интегрирует .NET/С#/LINQ!

Ответ 9

Вы можете использовать известную базу данных Cassandra. Он также использует интерфейс бережливости.

Ответ 10

Проект Lucene.net соответствует вашим общим требованиям. Он предоставляет API для хранения и индексирования документов, хранения базы данных в файловой системе.

Проект представляет собой, в основном, полнотекстовую библиотеку поиска, первоначально написанную на Java, а затем перенесенную на .NET. Поэтому он не поддерживает Linq, но очень хорошо зарекомендовал себя и довольно зрелый проект.

Недостатком может быть сложность проекта, похоже, что вы ищете решение для plug and play, однако проект Lucene требует, чтобы вы потратили немного времени на понимание особенностей полнотекстовой индексации и поиска.

Но главное, производительность библиотеки Lucene быстро растет, особенно для параллельного поиска по большим наборам данных, поэтому это отличное решение для запуска автономного веб-сайта без необходимости запуска сервера базы данных.

Ответ 11

RavenDB имеет лучший .NET/LINQ поддержка. Очень легко получить клиент .NET с помощью NuGet; онлайн-менеджер Visual Studio (аналогичный App Store из Apple).

Если инструменты разработки важнее для вас, чем экстремальная производительность, вы должны рассмотреть RavenDB.

Ответ 12

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

Ответ 13

Другим вариантом является MemcacheDB.

Он основан на Memcache, но добавляет постоянное хранилище. Здесь их реклама:

MemcacheDB - это распределенная система хранения ключевых значений, предназначенная для постоянной работы. Это НЕ-кэш-решение, но постоянный механизм хранения для быстрого и надежного хранения и поиска объектов на основе ключа. Он соответствует протоколу memcache (не завершен, см. Ниже), поэтому любой клиент memcached может иметь возможность подключения к нему. MemcacheDB использует Berkeley DB в качестве хранилища бэкэнда, поэтому поддерживается множество функций, включая транзакцию и репликацию.

Ответ 14

Amazon поставляет .NET SDK для взаимодействия с его SimpleDB (а также с остальной частью AWS).

http://aws.amazon.com/simpledb/

http://aws.amazon.com/sdkfornet/

Лучшая часть: Свободный уровень в облаке (на данный момент: "Новые и существующие клиенты получают 25 часов работы SimpleDB и 1 ГБ хранилища бесплатно каждый месяц".)