25

Ich war denken nur, dass jetzt nicht genügend RAM auf dem Datenbank-Server hat zwischenzuspeichern Ihre vollständige Datenbank warum ist der Spezialist in memory database (zB TimesTen siehe auch Wikipedia page), das den letzten Schrei vor ein paar Jahren waren es üblich ist Wird mehr benutzt?Wann sollte ich die Verwendung einer In-Memory-Datenbank in Betracht ziehen und worauf sollte man achten?

Es scheint so zu sein, dass mit der Zeit keine plattenbasierten Datenbanken weniger verwendet werden, beispielsweise werden die meisten Anwendungen nun auf herkömmlichen rationalen Datenbanken aufgebaut. Ich hätte das Gegenteil erwartet, da RAM für viele Server bald frei wird.

ich dies zu fragen, wie ich gerade auf der Stack-Überlauf-Architektur lesen, und die Seite sagt

Dies ist bedeutsam, weil Stapel Überlaufes der Datenbank fast vollständig im RAM ist und das schließt sich noch genau zu hohe Kosten.

Aber ich denke nicht, dass dies ein Problem wäre, wenn "Zeiger" und "Sammlungen" anstelle des normalen btree verwendet würden. Btree sind sehr clever, um die Zugriffsgeschwindigkeit auf die Festplatte zu umgehen, z. B. tauschen sie CPU-Auslastung aus, um die Festplattennutzung zu reduzieren. Aber wir haben jetzt so Match Ram.

Aber wir brauchen noch Datenbank, wie Ihr eigenes tun

  • Sperren
  • Deadlock Erkennung
  • Transaktionsprotokollierung
  • Wiederherstellen
  • Etc

sehr hart ist.

@ S.Lott, vorausgesetzt, wir alle verbringen so lange die Auswahl von Indizes, Vermeidung von Joins und Untersuchung von Datenbank-Performance-Problemen. Es muss einen besseren Weg geben. Vor einigen Jahren wurde uns gesagt, die "In Memory-Datenbanken" seien der bessere Weg. Bevor ich also mit der Verwendung von einem usw. anfange, möchte ich wissen, warum andere Leute sie nicht mehr verwenden.

(ich bin unwahrscheinlich TimesTen mich zu verwenden, da es hoch ($41,500.00/Processor preist) und ich weiß nicht, wie zu Oracle Vertriebsmitarbeiter sprechen - ich verbringe lieber meine Zeit Code zu schreiben.)

Siehe auch:

Update:

fragte ich diese Frage eine LONG Zeit vor, in diesen Tagen Microsoft SQL Server haben "In-Memory OLTP", die eine speicheroptimierte Datenbank-Engine in die SQL Server-Modul integriert ist. Es ist nicht billig, aber scheint sehr schnell für einige Arbeitslasten zu sein.

+0

"wird nicht mehr verwendet?" Mehr als was? Haben Sie Metriken, Zahlen oder Umfragen? Ich verstehe die Frage nicht. Haben Sie ein konkretes Beispiel, in dem es verwendet werden sollte, aber nicht? Oder ist das nur ein Diskussionsthema? Was musst du wissen? Welches Programmierproblem hast du? –

+0

genug Speicher?Selbst kleine Anwendungen verwenden problemlos 100 GB Speicherplatz. Ich arbeite selten mit Servern, die über so viel Speicher für eine einzelne App verfügen. –

Antwort

5

Wahrscheinlich gibt es nur keine ausgereiften Produkte von Speicherdatenbanken, die als vollständiger Ersatz für eine klassische Datenbank verwendet werden könnten.

Relationale Datenbank sind ein sehr altes Konzept. Es gab zwar viele Ansätze, um voranzukommen und neue Technologien zu entwickeln, z. Objektorientierte Datenbanken, die relationalen Datenbanken änderten ihre Konzepte nicht wirklich. Erwarten Sie nicht, dass sich die Dinge zu schnell ändern, da sich die Datenbanken in den letzten zehn oder fünfzehn Jahren oder sogar noch länger nicht verändert haben.

Ich denke, die Entwicklung von Technologien ist nicht so schnell, wie man glauben könnte. Es dauert Jahrzehnte, bis neue Konzepte ausgereift und etabliert sind. Vor allem in der Datenbanktechnologie, wo Reife wichtiger ist als alles andere.

In zehn oder zwanzig Jahren sind Datenbanken wahrscheinlich nicht mehr so ​​wie heute. Wenn In-Memory-Datenbanken die Zukunft sind - niemand kann das heute sagen -, brauchen sie nur etwas mehr Zeit, um sich zu entwickeln.

5

Der Trend scheint, aggressiv zwischenzuspeichern und die Datenbank zum Füllen des Caches zu verwenden. Unabhängig davon, wo die Datenbank lebt, Joins sind immer noch teuer, so scheint die Vorliebe zu sein, den Join einmal durchzuführen und das Ergebnis in etwas wie Memcached oder Velocity zu cachen.

Es gibt immer noch In-Memory-Datenbanken und sie werden verwendet, aber es hängt vom Kontext ab, den Sie verwenden möchten. SQLite zum Beispiel wird oft als In-Memory-Datenbank beim Testen von Datenebenen verwendet.

2

Nun, In-Memory-Datenbanken fehlen im Allgemeinen die D (Haltbarkeit) in ACID (Unteilbarkeit, Konsistenz, Isolation, Dauerhaftigkeit) von ihrer Natur. Dies kann zu einem gewissen Grad mit "hybriden" Ansätzen überwunden werden, jedoch muss irgendwann etwas (entweder die Daten selbst oder ein Transaktionsprotokoll) irgendwo beibehalten werden, um den Haltbarkeitsaspekt bereitzustellen. Dies kann im Allgemeinen die Leistung verlangsamen oder andere nicht wünschenswerte Eigenschaften in eine In-Memory-Datenbanklösung einführen. Im Gegensatz dazu haben die meisten der heutigen RDBMS die vollständige Ergänzung von ACID, und haben viele Jahrzehnte an Entwicklung hinter sich. Dies hat zu Festplatten-basierten Datenbanksystemen geführt, die sehr leistungsfähig sind, insbesondere mit den vielen Jahren der Verbesserungen und Optimierungen, die das moderne RDBMS-System gesehen hat (Ihr BTree Beispiel ist nur eines von vielen).

Ein weiterer Faktor ist unsere Fähigkeit, als Anwendungsentwickler, die Last auf der Datenbank durch Mechanismen wie caching zu reduzieren, wodurch viel mehr wahrgenommen Leistung aus der Datenschicht einer Anwendung zusammenzudrücken. In der Tat hat das Caching selbst in den letzten Jahren weitreichende Entwicklungen erfahren, wobei das verteilte Caching heutzutage üblich ist (siehe beispielsweise die Nummer users of memcached).

Ironischerweise verwandeln sich die heutigen Caching-Systeme in vielerlei Hinsicht langsam in etwas, das einem echten In-Memory-Datenbanksystem ähnlich ist. In-Memory-Datenbanken, wie zum Beispiel objektorientierte Datenbanken, sind die "neuen Kids auf dem Block", also wird es interessant sein, zu sehen, wo all das in die Zeit kommt. Oracle hat jetzt TimesTen erworben, und Microsoft zufolge suchen Microsoft nach Angaben von this wikipedia article bald in den Markt für In-Memory-Datenbanken. Das sind zwei moderne "Big Player" im traditionellen RDBMS-Bereich, die In-Memory-Datenbanksysteme ernst nehmen.

+0

Time10 verwendet ein Transaktionsprotokoll Haltbarkeit zur Verfügung zu stellen, ich denke, es ist auch Checkpoints spart Reloads zu beschleunigen. Daher ist es schwierig, selbst zu schreiben. –

+0

"Microsoft möchte bald in den In-Memory-Datenbankmarkt einsteigen" - haben Sie einen Link dafür? –

+0

Erlang hat den Mnesia integrierte Datenbank fähig Speicher-only (und auch nur scheiben oder gemischt) Betrieb mit Haltbarkeit durch Replikation über viele Knoten bereitgestellt. Einen Scheck wert, vielleicht können Sie es später benutzen. – ron

4

Der wichtigste Grund ist die Cargokultur und das sehr niedrige Wissen in der IT.Die meisten Anwendungen arbeiten ausreichend gut, unabhängig davon, welche Persistenzlösung verwendet wird. Da die Computer jedes Jahr noch schneller werden, sind nicht genug Menschen in der Lage, das Problem zu lokalisieren.

Microsoft und Oracle machen mit ihren Datenbankprodukten zu viel Geld, um es ihnen (politisch) möglich zu machen, bessere Ansätze zu entwickeln.

Die Entwicklungskosten für die Verwendung einer relationalen Datenbank werden nicht transparent gemacht, so dass das Management keine Ahnung hat, dass es ein Problem gibt, geschweige denn eine Lösung.

10

Niemand beantwortete wirklich die Frage "Wann sollte ich eine In-Memory-Datenbank verwenden und worauf muss ich achten?" also werde ich es versuchen.

Sie sollen eine In-Memory-Datenbank betrachten, wenn 1. Das Zielsystem hat Daten zu verwalten, aber keine persistenten Medien 2. Die Leistungsanforderung kann einfach nicht mit einer persistenten Datenbank

Für # 1 erfüllt werden Denken Sie an den TV-Guide in Ihrer Set-Top-Box (STB). Low-End-STB (d. H. Solche ohne DVR-Fähigkeit) haben keinen dauerhaften Speicher und benötigen keinen dauerhaften Speicher. Aber die Datenbank für einen 400-Kanal-14-Tage-TV-Guide ist nicht trivial. Auch hier besteht eine Leistungsanforderung, da die Daten mit hoher Geschwindigkeit vom Transponderkarussell kommen und es "abfangen oder warten muss, bis das Karussell wieder kommt". Aber Ausdauer ist nicht nötig. Wir haben das alles gesehen; Wenn Sie zu Hause die Stromzufuhr verlieren, wird im TV Guide "In Kürze verfügbar" angezeigt, da sich das Gerät vom Transponder oder Kabelkopf aus versorgt. Netzwerk-Router haben die gleichen Eigenschaften: kein persistenter Speicher, muss schnell sein, und die Datenbank kann von einer externen Quelle (Peer-Router im Netzwerk, in diesem Fall um die Routing-Tabelle neu zu füllen) bereitgestellt werden.

Es gibt endlose Beispiele von # 2: Echtzeit-Targeting in militärischen Systemen, Hochfrequenzhandelssystemen und mehr.

In Bezug auf den zweiten Teil der Frage, "Ausgabe zu beachten": Es gibt viele.

Stellen Sie sicher, dass Sie eine echte In-Memory-Datenbank auswerten, wenn Sie die Leistung benötigen, die nur eine In-Memory-Datenbank liefern kann. Caching einer persistenten Datenbank ist nicht das Gleiche. Das Werfen einer persistenten Datenbank in ein RAM-Laufwerk ist nicht dasselbe. Die Verwendung einer In-Memory-Datenbank, die die Transaktionsprotokollierung (wie TimesTen) inhärent durchführt, ist nicht dieselbe (selbst wenn Sie sich bei/dev/null anmelden).

Stellen Sie sicher, dass Sie ein Datenbanksystem auswerten und nicht nur einen Cache (z. B. Memcache). Ein Datenbanksystem unterstützt Transaktionen mit den ACID-Eigenschaften, mehrere Indizierungsoptionen, gleichzeitige Zugriffe und mehr.

Über ACID: In-Memory-Datenbanksysteme fehlt nicht das "D" (Haltbarkeit). Es muss einfach im Zusammenhang gesehen werden. Transaktionen in einer persistenten Datenbank sind nur dann haltbar, wenn das Medium, auf dem sie gespeichert ist, dauerhaft ist. Das Gleiche gilt für In-Memory-Datenbanken. In jedem Fall sollten Sie, wenn Sie Wert auf Haltbarkeit legen, ein Backup erstellen. Diese

1

ist auch eine Option: http://www.memsql.com/

Ich habe es nicht persönlich in Anspruch genommen, aber es sollte nach dem Vorbild eines Drop-in-Ersatz für MySQL im Speicher sein.

0

Verschiedene tragbare Versionen von SQL, die mit der gleichen Effizienz arbeiten, hauptsächlich für mobile Geräte entwickelt.

SQLite

SQL Server Compact Edition

Dies sind nur große Spieler andere Optionen vorhanden sein können, aber große Spieler behandeln Mindestanforderungen mit dem Release von it .. :)

und In-Memory-Datenbank, Sie haben Sichern Sie die Daten kontinuierlich, wenn Fluktuationen oder Stromausfälle auftreten. Sie können den gesamten Datenbestand verlieren. wie in anderen, die wie im sekundären Speicher (HDD) behandelt werden und die Verlustchancen werden 10% im Vergleich zu Speicher DB sein.

Ich hoffe, dass dies helfen kann :)

0

Der typischste Anwendungsfall für eine Datenbank Persistenz ist, die die meisten In-Memory-Datenbanken ungeeignet macht. Ein beliebter Grund für die Verwendung einer In-Memory-Datenbank ist zu Testzwecken. Dazu müssen Sie jedoch entweder eine Datenbank verwenden, die sowohl als speicherinterne als auch eine andere Datenbank eingerichtet werden kann.

Beliebte Optionen in diesem Bereich scheint RavenDB für .NET-Entwickler und OrientDB für Java-Entwickler zu sein. Da beide als In-Memory-Datenbanken funktionieren können und je nach Konfiguration "etwas anderes", können Sie je nach Konfiguration das eine oder andere verwenden (app.config in .Net, Maven oder Ant-Einstellungen in Java).

-1

Die Anforderungen an die Datenverarbeitung werden immer komplexer und das Produkt-Ökosystem wird weiterentwickelt, um diese neuen Anforderungen zu erfüllen. Disk-basierte RDBMS, In-Memory-Cache und In-Memory-Datenbanken werden verwendet, um unterschiedliche Anforderungen zu erfüllen. Sie sollten mit dem gehen, was Ihrem Bedarf entspricht -

Traditionelles RDBMS: Ihr MySQL-Cluster ist schnell genug, einfach zu warten und Sie haben die Zuverlässigkeit der ACID-Konformität.

In-Memory-verteilt cahce: Ihre Anwendung muss schnell lesen und schreiben, ohne zu viel über Konsistenz oder komplexe Transaktionen kümmern.

In-Memory-RDBMS:

  1. (Geschwindigkeit): Ihre Anwendung muss Daten/Anfragen schneller als die Disk-basierte Datenbank verarbeiten.
  2. (Komplexität): Sie müssen komplexe transaktionale Lese-und Schreibvorgänge mit Joins und Aggregationen und gerne die Kraft von SQL verwenden.
  3. (Skalierbarkeit): Sie müssen Ihre Datenbank horizontal ohne Ausfallzeiten skalieren.
  4. (Wartbarkeit): Sie benötigen die Datenbank für hohe Verfügbarkeit, Replikation, Lastausgleich und Disaster Recovery, ohne Ihre Wartungsaufgaben zu erweitern.
  5. (Vorbehalt): Ihre Daten sollten in Arbeitsspeicher (in der Regel in Terabyte) passen.