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
database
scalability
database-performance
sharding
Ram on Rails-n-React
quelle
quelle
Antworten:
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.
Einige zusätzliche Infos dazu wären nett. Warum ist es Schneeball? Können Sie es normalisieren, um den Speicherplatz zu reduzieren?
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.
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?
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?
Sie sprechen von einer Cluster-Server-Anordnung.
Es klingt für mich wie folgt:
Abgesehen davon gibt es hier nicht genügend Informationen, um herauszufinden, was eine gute Passform wäre.
quelle
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.
quelle
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
quelle
Was Sie tun können, um einige Ihrer Probleme zu lösen, ist:
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.
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.
quelle