c# mongodb - Welche NoSQL-Lösungen gibt es für .NET?




7 Answers

Sie sollten auch über Redis . Es ist eine erweiterte NoSQL-Datenbank mit Unterstützung für umfangreiche serverseitige Datenstrukturen wie Listen, Sets, sortierte Sets und Hashes. Es wird im Arbeitsspeicher ausgeführt, unterstützt jedoch sowohl einen Persistenzmodus "Snapshots" als auch ein Journal Journal nur zum Anhängen von Integrität zwischen Snapshots.

Redis ist sehr schnell

Es ist auch eine der schnellsten existierenden NoSQL-Datenbanken: 110000 SETs / Sekunde, 81000 GETs / Sekunde in einer Einstiegs-Linux-Box. Überprüfen Sie die Benchmarks .

Um Redis treu zu bleiben, habe ich einen sehr schnellen C # Redis Client mit einem starken Fokus auf Performance entwickelt. Die Raven-DB-eigenen Benchmarks laufen, die Standard- Rediserver -Konfiguration ist 16,9x schneller als Raven DB. Wenn die Option appendfsync always (obwohl nicht empfohlen) verwendet wird, ist sie immer noch 11,75x schneller .

@marcgravell hat einen sehr schnellen asynchronen C # -Redis-Client entwickelt, der für Stack-Overflows und andere verteilte Caching-Sites von Stack Exchange-Sites verwendet wird.

Einfach und elegant

Wie die meisten NoSQL-Datenspeicher ist Redis schemalos, sodass Sie es sofort verwenden können, ohne irgendwelche Schemata im Voraus definieren zu müssen - was zu einer erheblichen Produktivitätssteigerung führt. Das Schöne an Redis ist, dass Sie auf die generischen Auflistungsklassen von .NET zugreifen können, die Sie in C # gewohnt sind. Daher gibt es nur sehr wenig Projektion, da die API bereits sehr gut mit den Listen- und In-Memory-Datenstrukturen übereinstimmt Programm verwendet bereits.

Es ist diese Eleganz, grundlegende Datenstrukturen von Comp-Sci zu bieten, die Redis auszeichnen. Es erlaubt es, extrem vielseitig zu sein und nur ein begrenztes Operationssatz zu unterstützen. dh Redis wurde häufig als verteilter Cache, Nachrichtenwarteschlange, IPC-Broker zwischen Sprachen / Prozessen, Pub / Sub, Push / Event-basierte Kommunikation, Distributed-Locking, CQRS-Ereignisquelle, Unique-ID-Generator usw. angesehen. Wenn Sie es nicht als primären Datenspeicher verwenden, können Sie dank seiner Geschwindigkeit und Einfachheit auf eine vielseitige swiss-army-Toolbox zugreifen, die eine Fülle von Anwendungsfällen erfüllen kann.

Voll ausgestatteter Redis Client

Es gibt eine Reihe von C # /. NET Redis Clients und auf NuGet . Das folgende Beispiel verwendet den Open-Source-C # -Client von ServiceStack .

Die gesamte Dokumentation und Anleitungen für den C # Redis Client von ServiceStack finden Sie unter: http://www.servicestack.net/docs/redis-client/redis-client

Der Client stellt eine umfangreiche Schnittstelle bereit, die Wrapper für die generische IList-, IDictionary- und ICollection-Zuordnung von .NET zu Redis reichen Serverseiten-Datenstrukturen bereitstellt. Um einen schnellen Überblick über die Funktionen zu erhalten , sehen Sie sich die API-Imagemap an .

Ein gutes Tutorial, das zeigt, wie Sie eine reale Anwendung entwickeln können, finden Sie unter: http://www.servicestack.net/docs/redis-client/designing-nosql-database

Im Quellcode von Redis StackOverflow finden Sie ein weiteres Beispiel für eine Real-World-App, die vollständig mit Redis erstellt wurde.

Beispielcode mit einer vollständigen CRUD-App:

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));
});

Um mit diesem Beispiel live zu spielen, sehen Sie die TODO-Anwendung von ServiceStacks Backbone, die mit einem C # -Redis-Back-End ausgestattet ist .

Läuft auf allen Sprachen und Plattformen

Aufgrund seiner Einfachheit hat es Sprachbindungen für fast jede Sprache, die heute verwendet wird: http://redis.io/clients

In dynamischen Sprachen ist es noch knapper. So einfach ist es, einen nicht blockierenden Webserver zu erstellen, der benannte Zähler in node.js / CoffeeScript hostet:

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

Einer der Vorteile von NoSQL besteht darin, dass Sie sich mit Entwicklern aus verschiedenen Sprachen zusammen tun, um herauszufinden, wie wir Redis bestmöglich nutzen können, um unsere anspruchsvollen Anforderungen zu erfüllen.

Weit verbreitet von den größten Unternehmen

Aufgrund seiner Einfachheit, Stabilität und Geschwindigkeit wird es von vielen großen Unternehmen verwendet, darunter:

  • Paketüberfluss
  • GitHub
  • Twitter
  • Schneesturm
  • Flickr
  • Digg
  • Instagram

Redis für Windows herunterladen

Ich habe Installationsanweisungen und Downloads für die 2 gebräuchlichsten Möglichkeiten zur Ausführung von Redis unter Windows bereitgestellt: https://github.com/mythz/redis-windows , die zeigen, wie:

  1. Verwenden Sie Vagrant , um die neueste stabile Version von Redis in einer VirtualBox-VM auszuführen.
  2. Laden Sie den nativen Microsoft-Port von Redis herunter und führen Sie ihn aus
core schema

Welche NoSQL Lösungen gibt es für .NET?







Ich verwende BrightstarDB für das neueste Projekt, an dem ich gearbeitet habe. Es ist natives .NET NoSQL mit einem vollständigen Entity Framework (das es nur wenige Minuten dauerte, eine Anwendung vom ersten Download an zu starten).

Ich http://ravendb.net/ zuerst http://ravendb.net/ ausprobiert, aber obwohl es ziemlich einfach war, alle MapReduce und Indizierungs-Setup-Sachen zu installieren, dauerte es zu lange, bis ich den Kopf drehte und langsam und klobig war, wenn ich zwischen den Dingen in beiden Richtungen navigieren wollte.

BrightstarDB war großartig zu entwickeln, und es ist wirklich ähnlich wie das erste Entity Framework , aber ohne den Aufwand einer Datenbank-Einrichtung, und ich kann viele Änderungen an meinem Datamodel vornehmen, ohne den Schmerz, den ich mit SQL überwinden musste.

Es lohnt sich auf jeden Fall einen Blick darauf zu werfen!




Wenn Sie Light-Datenbank-Engines möchten, die gut mit .NET und mit LINQ-Unterstützung funktionieren, können Sie Eloquera, STSdb ​​und Siaqodb ausprobieren.
Sehen Sie diesen Beitrag in meinem Blog, um ein Gefühl für das zu bekommen, was sie anbieten.




Sie können die berühmte Cassandra Datenbank verwenden. Es verwendet auch die Sparsamkeitsschnittstelle.




Das Lucene.net Projekt würde zu Ihrer allgemeinen Anforderung passen. Es bietet eine API zum Speichern und Indexieren von Dokumenten und zum Speichern der Datenbank in einem Dateisystem.

Das Projekt ist in erster Linie eine Volltextsuchbibliothek, die ursprünglich in Java geschrieben und später auf .NET portiert wurde. Daher hat es keinen Linq-Support, ist aber sehr gut etabliert und ein ziemlich ausgereiftes Projekt.

Ein Nachteil könnte die Komplexität des Projekts sein, es klingt nach einer Plug-and-Play-Lösung, aber das Lucene-Projekt erfordert, dass Sie ein wenig Zeit damit verbringen, die Besonderheiten der Volltextindizierung und -suche zu verstehen.

Ein großer Pluspunkt ist jedoch, dass die Lucene-Bibliothek blitzschnell läuft, insbesondere bei der gleichzeitigen Suche über große Datenmengen, also eine großartige Lösung für den Betrieb einer eigenständigen Website ist, ohne dass auch ein Datenbankserver ausgeführt werden muss.




Eine andere Option ist MemcacheDB .

Es basiert auf Memcache, fügt jedoch persistenten Speicher hinzu. Hier ist ihr Klappentext:

MemcacheDB ist ein verteiltes Schlüsselwertspeichersystem, das für persistente Systeme entwickelt wurde. Es ist KEINE Cache-Lösung, sondern eine permanente Speicher-Engine für schnelles und zuverlässiges, auf Schlüsselwerten basierendes Objekt-Storage und Retrieval. Es entspricht dem Memcache-Protokoll (nicht abgeschlossen, siehe unten), sodass jeder Memcached-Client eine Verbindung mit ihm haben kann. MemcacheDB verwendet Berkeley DB als Speicher-Backend, daher werden viele Funktionen einschließlich Transaktion und Replikation unterstützt.




Related

c# .net nosql

Tags

c#   .net   nosql