postgreSQL gegen Cassandra gegen MongoDB gegen Voldemort?

7

Für welche Datenbank soll man sich entscheiden? Irgendwelche Vergleiche?

  • Bestehend: postgresql
  • Probleme
    • Horizontal nicht leicht skalierbar. Benötigt Scherben usw.
    • Clustering löst das Datenwachstumsproblem nicht
  • Suchen nach: Jede Datenbank, die leicht horizontal skalierbar ist
    • Cassandra (Twitter nutzt das?)
    • MongoDB (gewinnt schnell an Popularität)
    • Voldemort
    • Andere?
  • Warum?
    • Daten wachsen mit Schneeballeffekt
    • vorhandene postgresql sperrt Tabelle usw. für Vakuumaufgaben regelmäßig
    • Die Archivierung von Daten ist derzeit sehr umfangreich
    • Menschliche Interaktion in bestehenden Archiv-, Vakuum-, ... Prozessen in regelmäßigen Abständen
    • Brauchen Sie ein Set. Vergiss es. Fügen Sie einfach einen weiteren Server hinzu, wenn die Datenmenge zunimmt. ' Art der Lösung
Ram on Rails-n-React
quelle
3
Voldemart? Ich habe es gegoogelt und wollte, dass ich Voldemort aufsuche. Böse magische Datenbank?
Bart Silverstrim
2
Warten Sie, anscheinend Tippfehler? Ich denke, einer der Links ist nicht für Harry Potter, sondern ein skurriles DB-Projekt mit demselben Namen.
Bart Silverstrim

Antworten:

9

Erste Frage: Warum befinden Sie sich zunächst in einer relationalen Datenbank, wenn Sie keine ACID-Eigenschaften benötigen? Es hört sich so an, als würden Sie nicht transaktionale Arbeiten ausführen. Daher ist es für Ihre Umgebung wahrscheinlich zu schwer, ein RDMBS mit Transaktionen zu erhalten.

Zweite Frage: Welche Art von Daten speichern Sie? Sie scheinen eine Column-Store-Datenbank zu benötigen, und das ist für eine Art Data-Warehouse-Projekt.

Dritte Frage: Wenn Sie mit PostgreSQL (einer guten Datenbank wie sie ist) nicht weiterkommen, ist es die aktuelle Version? Ältere Versionen vor 8.x sind notorisch langsam, aber seitdem wurde viel Arbeit in Verbesserungen gesteckt, und einige der von Ihnen erwähnten Probleme - wie das Autovakuum - können jetzt problemlos mit den Einstellungen zum Festlegen und Vergessen behoben werden.

*  Data growing with snowball effect

Einige zusätzliche Infos dazu wären nett. Warum ist es Schneeball? Können Sie es normalisieren, um den Speicherplatz zu reduzieren?

* existing postgresql locks table etc for vaccuum tasks periodically

Wenn dies ein Problem ist, kann ich bereits feststellen, dass Sie eine ältere Version verwenden. Neuere Versionen verfügen hierfür über Steuerelemente pro Tabelle, und Sie können sie sogar vollständig deaktivieren.

* Archiving data is tideous currently

Es ist schwierig, hier ein Urteil zu fällen, da es nicht viel gibt, mit dem man arbeiten kann. Auf welche Medien wird das Archiv verschoben? Wie viel nachhaltige E / A ist beteiligt? In welchem ​​Zeitrahmen arbeiten Sie? Wie viele Daten? Muss es ein "heißer" Dump sein oder kann es "kalt" sein?

* Human interaction involved in existing archive, vaccuum, ... process periodically

Ich versuche zu sehen, wie "normale" Verwendung manuelle Eingriffe erfordern würde, weil dies nicht der Fall sein sollte. Das Vakuum erfolgt jetzt automatisch und kann (wie bereits erwähnt) so eingestellt werden, dass es überhaupt nicht erfolgt. Die meisten Sicherungen werden per Skript erstellt (und wenn Sie Skripte erstellen können, können Sie einen Zeitplan erstellen). Wie kommt es also dazu?

* Need a 'set it. forget it. just add another server when data grows more.' type of solution

Sie sprechen von einer Cluster-Server-Anordnung.

Es klingt für mich wie folgt:

  1. Sie befinden sich in einem RDBMS und die Transaktionsnatur ist nicht für Ihre Anwendung geeignet.
  2. Ihre Anwendung scheint einen meist gelesenen Datenbankstil zu wollen. Es hört sich auch nicht so an, als ob Sie es brauchen, um Transaktionsintegrität zu haben.
  3. Das Datenvolumen, das Sie verarbeiten, ist höchstwahrscheinlich weder normalisiert, noch wurde versucht, es zu normalisieren.
  4. Sie machen waaaaaay zu viel von Hand und benötigen mehr Automatisierung.
  5. Sie mögen die Idee einer Clusterlösung, möglicherweise "Cloud Style" Computing.

Abgesehen davon gibt es hier nicht genügend Informationen, um herauszufinden, was eine gute Passform wäre.

Avery Payne
quelle
3

Sie könnten auch in Betracht ziehen, sich mit HBase und HyperTable zu befassen. Wie Avery Payne bereits erwähnte, geben Sie uns keine Informationen zu Ihrer aktuellen Anwendung, sondern nur zu Ihrer Datenbankplattform.

Einige Dinge zu beachten:

Verknüpfungen werden manuell auf Nicht-SQL-Plattformen durchgeführt. Sie werden keine Dinge wie Fremdschlüssel, Aggregate usw. tun. All das ist manuell.

Bestehende Anwendungen sind nicht unbedingt einfach zu portieren. Je nachdem, was das Portieren kostet, kann es für Sie kostengünstiger sein, Ihren PostgreSQL-Server vertikal (anstatt horizontal) zu skalieren.

Sie erhalten keine ACID und müssen die Parallelität manuell verwalten. Abhängig von Ihrer Anwendung kann dies ein Problem sein. Sie können globale Erhaltungsregeln auch nicht auf herkömmliche Weise durchsetzen, da dies wiederum nicht atomar ist.

Blueadept
quelle
0

Cassandra ist die beste Option, wenn Sie wissen, dass Sie skalieren müssen.

Ich würde einige der Fallstudienartikel von http://wiki.apache.org/cassandra/ArticlesAndPresentations empfehlen

jbellis
quelle
6
lol, "XXX ist die beste Option!" warum um petes willen?
Özgür
OP: "Auf der Suche nach: jeder Datenbank, die leicht horizontal skalierbar ist", unter allen von ihm aufgelisteten Datenbanken erfüllt nur Cassandra diese Anforderung
Piotr Kolaczkowski
0

Was Sie tun können, um einige Ihrer Probleme zu lösen, ist:

  • Bestehende Postgresql-Sperren Tabelle usw. für Vakuumaufgaben regelmäßig

Die Tabelle ist nicht gesperrt, sondern arbeitet nur langsam. Dies wird von postgresql durchgeführt, um eine Umgehung der Transaktions-ID zu verhindern. Sie können die Häufigkeit verringern, indem Sie mehrere Zeilen in Stapeln schreiben und dann festschreiben. Sie können eine Warteschlange (wie rabbitmq) für Zwischenschreibvorgänge verwenden: application-> queue-> db. Dies erhöht auch Ihre Schreibleistung erheblich.

  • Die Archivierung von Daten ist derzeit sehr umfangreich

Wenn Ihre Daten in der Größenordnung von mehreren TB zu groß sind, würde ich Ihnen empfehlen, in die Cloud zu wechseln, da Dumping keine Option ist. Verwenden Sie AWS oder Google Cloud und verwenden Sie Snapshots. Beispielsweise werden EBS-Snapshots, die sehr schnell sind, über Kontinente hinweg repliziert und lösen die Notwendigkeit einer Sicherung.

Wenn Sie unter Archivieren das Löschen von Daten und das Verschieben in ein "Archiv" verstehen, verwenden Sie Tablespaces, die nach Datum gedreht werden. Hierfür sind einige Implementierungen online.

Sivann
quelle