Frage

Ich versuche zur Zeit einen Datenbank-Anbieter zu wählen.

Ich suche nur ein paar persönliche Meinungen von Kollegen Datenbank-Entwickler gibt.

Meine Frage ist speziell auf Menschen ausgerichtet, die:

1) haben Hauptspeicher DB (MMDB) verwendet, die auf der Festplatte zu replizieren unterstützt (hybrid) vor (dh eXtremeDB )

oder

2) verwendet Versant Object Database und / oder Objectivity Datenbank und / oder Fortschritt Objects

und die Frage ist wirklich:., Wenn Sie einen Datenbank-Anbieter empfehlen könnten, basierend auf Ihrer Erfahrung, dass meine Anwendung passen würde

Meine Anwendung ist eine kommerzielle Echtzeit (sprich: High-Performance) objektorientierten C ++ GIS Art von App, wo wir eine Menge von lat / lon Suche tun müssen (dh gegeben ein Bereich, finden Sie alle passenden Ziele innerhalb der Bereich ... R-Baum-Index).

Die Arten von Daten, die ich in die Datenbank speichern möchten, werden alle als Objekte modelliert und sie nutzen std :: list und std :: vector, so natürlich scheint Object Database Sinn zu machen. Ich habe genug durch Artikel zu lesen, mich zu überzeugen, dass ein traditionelles RDBMS wahrscheinlich nicht ist, was ich wirklich bin auf der Suche nach in Bezug auf

  1. Performance (beitritt oder mehrere Tabellen für die dynamischen Längendaten wie Liste / Vektor)
  2. einfache Programmierung (Impedance Mismatch)

Doch in Bezug auf Leistung,

  1. Eingabedaten in das System wird bei etwa 40 MB / s zugeführt.

  2. Daher wird das System auch Einsatz in die Datenbank mit einer Geschwindigkeit von etwa 350 Einsätzen pro Sekunde tun (wobei jedes Objekt von 64KB auf 128KB variiert),

  3. Datenbank wird konsequent über mehrere Threads durchsucht und aktualisiert werden.

Von meinem Verständnis, alle Objekt DBs ich hier aufgeführte Cache verwenden für Datenbankobjekte zu speichern. EXtremeDB behauptet, dass es speziell ist, da für Speicher, es Overhead von Cachespeicherlogik vermeiden kann, etc. mehr Siehe durch googeln: Hauptspeicher vs. RAM-Disk-Datenbanken: Ein Linux-basierten Benchmark

So..I'm nur ein bisschen verwirrt. Kann Object DBs in Echtzeit-System eingesetzt werden? Ist es als "schnell" wie MMDB?

War es hilfreich?

Lösung

Im Grunde ich Unterschied zwischen einem MMDB und einem OODB ist, dass die MMDB die Erwartung hat, dass alle seine Daten im RAM basiert, aber blieb an einem bestimmten Punkt auf der Festplatte. Während ein OODB, dass mehr üblich gibt es keine Erwartung des gesamten DB-Fitting in dem RAM-Speicher.

Die MMDB kann dies nutzen, indem sie auf dem Konzept Aufgeben, dass die persistenten Daten unbedingt auf „Spiel“, um die Daten im RAM nicht haben.

Die Art und Weise etwas mit Ausdauer geht, zu arbeiten ist, dass sie in irgendeiner Weise die Daten auf der Festplatte auf Update zu schreiben.

Fast alle DBs eine Art Protokoll für diese. Diese Protokolle sind im Grunde „raw“ Seiten von Daten, oder vielleicht einzelne Transaktionen, in eine Datei angehängt. Wenn die Datei „zu groß“ wird, wird eine neue Datei gestartet wird.

Sobald die loggt sich in dem Hauptspeicher richtig konsolidiert werden, werden die Protokolle verworfen (oder wiederverwendet).

Nun wird ein roher, kann im RAM DB existiert einfach durch Transaktionen in eine Protokolldatei angehängt wird, und wenn es neu gestartet ist, lädt es nur das Protokoll in dem RAM-Speicher. Also, im Grunde, die Protokolldatei ist die Datenbank.

Der Nachteil dieser Technik ist, desto länger und Transaktionen, die Sie haben, desto größer ist Ihre Log / DB ist und damit je länger die DB Anlaufzeit. Aber, im Idealfall, können Sie auch „Momentaufnahme“ der aktuelle Zustand, der alle Protokolle auf dem neuesten Stand eliminiert, und sie effektiv komprimiert.

Auf diese Weise werden alle Routineoperationen des DB verwalten müssen, ist Seiten Protokolle anhängt, anstatt die Aktualisierung anderer Plattenseiten, Indexseiten usw. Da im Idealfall die meisten Systeme brauchen nicht zu „Start up“ vielleicht, dass oft, Startzeit ist weniger ein Problem.

Also, auf diese Weise kann ein MMDB schneller sein als ein OODB, die einen anderen Vertrag mit der Platte hat, die Aufrechterhaltung von Protokollen und Plattenseiten. Auf diese Weise kann ein OODB langsamer sein, auch wenn die gesamte DB in passt auf RAM und richtig zwischengespeichert, nur weil Sie Datenträger-Operationen außerhalb der Protokolloperationen während des normalen Betriebs entstehen, gegen einen MMDB wo diese Vorgänge als „Wartung“ geschehen Aufgabe, die während der Ausfallzeit und / oder Ruhezeit eingeplant werden können.

Zur Frage, ob eine dieser Systeme können Sie Bedürfnisse tatsächliche Leistung gerecht zu werden, kann ich nicht sagen.

Andere Tipps

Die hinteren Enden von Datenbanken (Lese- und Schreibprozesse, Caching einkreuzen Verwaltung, TXN Protokolldateien, ACID-Semantik) sind die gleichen, so RDB und OODB sind hier tatsächlich sehr ähnlich. Der Unterschied ist die Schnittstelle zum Anwendungsprogrammierer. Ist Ihr Datenmodell kompliziert, besteht aus vielen Klassen mit realen Vererbungsbeziehungen? Dann ist OO gut. Ist es relativ flach und einfach? Dann RDB gehen. Was ist die Natur der Beziehungen? Ist es Zeiger artig und setzen wie? Dann RDB gehen. I ist komplizierter, wie (geordnete) Liste, Array, Karte? Dann sollten Sie OO gehen. Außerdem haben Sie eine eigenständige Anwendung, ohne dass mit anderen Anwendungen zu integrieren? Dann ist OO ok. Müssen Sie Daten mit anderen Anwendungen teilen (das heißt mehrere Anwendungen Zugriff auf die gleiche Datenbank)? Dann ist das ein Deal-Breaker für OO, und Sie sollten mit RDB bleiben. Ist das Schema Ihrer Datenbank stabil oder erwarten Sie, es häufig zu entwickeln? OODBs sind schlecht ad Schemaevolution, also wenn Sie häufige Änderungen erwarten, bleiben RDB.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top