2 Stimmen

In-Memory-Datenbank

Ich bin mit SqlServer eine WPF-Anwendung zu fahren, ich bin derzeit mit NHibernate und vorgelesen alle Daten, so dass es aus Leistungsgründen zwischengespeichert wird. Das funktioniert für eine einzelne Client-app, aber ich fragte mich, wenn es eine In-Memory-Datenbank, die ich verwenden könnte, so dass ich die Informationen über mehrere Anwendungen auf dem gleichen Rechner teilen kann. Idealerweise würde dies unter meinem NHibernate Stack sitzen, so dass mein Code nicht ändern müsste. Effektiv bin ich auf der Suche, um meine DB von es ist traditionelles Format auf dem Server eine In-Memory-DB auf dem Client zu verschieben.

Beachten Sie, dass ich nur bestimmte Funktionen benötige.

3voto

cletus Punkte 596503

Es würde mich sehr wundern, wenn Sie überhaupt alle Informationen in den Speicher laden müssten. Ich sage das, weil ich, nur als ein Beispiel, gerade an einer Webanwendung arbeite, die (aus verschiedenen Gründen) Tausende von Datensätzen auf vielen Seiten lädt. Das ist PHP + MySQL. Und selbst das schafft es und rendert eine Seite in weit unter 100ms.

Bevor Sie diesen Weg einschlagen, vergewissern Sie sich, dass Sie es müssen. Machen Sie zunächst Ihre Datenbank so leistungsfähig wie möglich. Dazu gehören natürlich auch Dinge wie geeignete Indizes und das Tuning Ihrer Datenbank, aber auch hier wird das Pferd vom Schwanz her aufgezäumt.

Zuallererst müssen Sie sicherstellen, dass Sie ein gutes relationales Datenmodell haben: eines, das sich für leistungsfähige Abfragen eignet. Dies ist sowohl eine Kunst als auch eine Wissenschaft.

Auch wenn Sie NHibernate mögen, aber ORMs sind nicht immer die beste Wahl . Es gibt zum Beispiel einige Eckfälle, in denen handkodiertes SQL weitaus besser ist.

Wenn Sie ein gutes Datenmodell haben, Ihre Indizes und Datenbankparameter optimiert und NHibernate richtig konfiguriert haben, sollten Sie die Speicherung von Daten im Speicher in Betracht ziehen. wenn und nur wenn die Leistung noch ein Thema ist .

Die einzigen Fälle, in denen ich dies tun musste, waren Systeme, die Millionen von Transaktionen pro Tag durchführen müssen.

Ein Grund, das In-Memory-Caching zu vermeiden, ist, dass es die Komplexität erhöht. Sie müssen sich mit Fragen wie dem Ablauf des Cache, unabhängigen Aktualisierungen des zugrunde liegenden Datenspeichers, der Frage, ob Sie synchrone oder asynchrone Aktualisierungen verwenden, der Frage, wie Sie dem Client eine konsistente (wenn auch nicht aktuelle) Sicht auf Ihre Daten geben, der Frage, wie Sie mit Failover und Replikation umgehen, usw. befassen. Die Kosten für die Komplexität sind enorm.

Angenommen, Sie haben alle oben genannten Schritte unternommen und brauchen es immer noch, dann klingt es für mich, als bräuchten Sie eine Cache- oder Grid-Lösung. Hier ist eine Überblick über Java Grid/Cluster-Lösungen aber viele von ihnen (z.B. Coherence, memcached) gelten auch für .Net. Eine weitere Wahl für .Net ist Geschwindigkeit .

Es muss darauf hingewiesen und betont werden, dass etwas wie NHibernate nur dann konsistent ist, wenn die Datenbank nicht von außen aktualisiert wird und es genau einen NHibernate-fähigen Prozess gibt (außer bei Clusterlösungen). Wenn zwei Desktop-Anwendungen auf zwei verschiedenen PCs dieselbe Datenbank mit NHibernate aktualisieren, funktioniert das Caching einfach nicht, weil die Persistenzeinheiten die Änderungen des anderen nicht kennen.

1voto

Fox Punkte 452

http://www.db4o.com/ kann Ihr Freund sein!

1voto

Matthew Steeples Punkte 7560

Geschwindigkeit ist ein von Microsoft entwickelter Caching-Server für prozessfremde Objekte, der so ziemlich alles kann, was Sie wollen, auch wenn er im Moment nur in CTP-Form vorliegt.

Ich glaube, es gibt auch Wrapper für memcached, die ebenfalls zum Cachen von Objekten verwendet werden können.

1voto

Lucia S Punkte 438

Sie können HANA, Express Edition verwenden. Sie können kostenloser Download Sie ist speicherintern, spaltenförmig und ermöglicht weitere Analysefunktionen wie Textanalyse, Geodatenanalyse oder Vorhersage. Sie können auch mit ODBC, JDBC, node.js hdb library, REST APIs und anderen zugreifen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X