Gegeben:
Das Datenvolumen wird voraussichtlich in einigen Jahren in den Petabyte-Bereich gehen.
Der vollständige Satz von Datensatztypen, Anwendungen und Abfragen ist nicht im Voraus bekannt. Es wird erwartet, dass die Interessengruppen immer wieder neue Verwendungen für die Daten finden werden, wie dies normalerweise bei einer großen Datenbank der Fall ist.
Das System wird auf handelsüblicher Hardware laufen, die über mehrere Rechenzentren verteilt ist.
Aus pragmatischen Gründen, den Code bei Bedarf ändern zu können und nicht in eine schwache Verhandlungsposition gegenüber einem Anbieter zu geraten, werden nach Möglichkeit Open-Source-Lösungen stark bevorzugt.
Was ist die beste Datenbank-Engine?
Wenn wir nur über Terabyte reden würden, würde ich einfach Postgres angeben und fertig, aber ich verstehe, dass von einer Standard-SQL-Datenbank nicht erwartet werden kann, dass sie auf Petabyte skaliert.
Mir wurde zu verstehen gegeben, dass Yahoo Postgres in diesem Umfang modifiziert hat. Mir scheint, dass dies im Grunde bedeuten würde, dass die Programmierer, die Anwendungscode schreiben, Last übertragen müssen (die jetzt die üblichen Vorteile haben, dass sie sich nicht so sehr darum kümmern müssen, niemals Fehler durchzulassen, da eine relationale Datenbank viel zur Durchsetzung beiträgt Konsistenz) für diejenigen, die die Datenbank-Engine warten (das transparente Bereitstellen dieser Garantien zusammen mit schnellen SQL-Abfragen in einem solchen Umfang ist ein schwieriges Problem).
Eine Alternative wäre, eine gute NoSQL-Datenbank-Engine zu nehmen und nach Bedarf zu optimieren. Dies erlegt den Anwendungsprogrammierern eine größere Pflicht auf, niemals einen Fehler zu machen, macht es jedoch einfacher, sich darauf zu verlassen, dass jede gegebene Anwendung mit genügend Aufwand schnell genug erstellt werden kann.
Gilt die erste Option heute als verlässlich praktikabel?
Ist die zweite Option eine typische Praxis? Wenn ja, welche NoSQL-Engine ist die beste für dieses Szenario?
Gibt es eine dritte Option, die ich vermisse?
Ich halte es für unverantwortlich, etwas auf der Grundlage der bereitgestellten kleinen Details zu empfehlen, aber da meine Gedanken nicht in einen Kommentar passten, werde ich es hier posten.
Für den OLTP-Anwendungsfall: Wenn Sie der Meinung sind, dass Postgres in Bezug auf die Funktionen und für Ihr Entwicklungsteam gut geeignet ist und Sie sich nur um die Skalierung kümmern, sollten Sie die Betriebsdatengröße (die Menge der abgefragten Daten) berücksichtigen die OLTP-Anforderungen) und die Anzahl der TPS (Transaktionen pro Sekunde) und deren Lese-/Schreibrate) und nicht die Gesamtdatenmenge, die das System ansammelt.
Ich habe keine Erfahrung aus erster Hand mit der Skalierung von Postgres, aber 1.000.000 Leseabfragen / s sollen erreichbar sein, wenn die Daten in den Speicher passen, ebenso wie 10.000 Schreibvorgänge / s . Sie können Caches vor der DB platzieren, um die Leseleistung zu verbessern, und Sharding (über Erweiterungen) implementieren, um Schreibvorgänge zu skalieren.
Ich versuche, die Debatten zwischen NoSQL und RDBMS zu vermeiden, aber für diejenigen, deren Hauptanliegen die Skalierbarkeit ist, könnte Ersteres als typische Praxis angesehen werden ...
Für Data-Warehouse-/Reporting-Anwendungsfälle (führen Sie dieses SQL in einer Minute auf Terabytes an Daten aus) gibt es eine Klasse von Lösungen namens „MPP-Datenbanken“ (wenn Sie sich für Postgres interessieren, haben Sie vielleicht schon von Greenplum gehört). Sie fragmentieren die Daten und führen die Abfrage parallel auf mehreren (relativ leistungsstarken) Knoten aus, sind jedoch nicht für die Verarbeitung einer großen Anzahl einfacher Abfragen optimiert.
Wenn Sie eine kostengünstige Möglichkeit zum Speichern der Daten für Analysen benötigen und/oder nicht bereit sind, an ein einziges Tool gebunden zu sein, könnte das Hadoop-Ökosystem interessant sein. Sie verlieren etwas an Effizienz (und investieren Ressourcen in den Aufbau des Fachwissens), erhalten jedoch die Möglichkeit, beliebige „Big Data“-Lösungen (ML, Streaming, eine Vielzahl von DB-Engines) oder benutzerdefinierten Code auf Ihrem Cluster auszuführen.
Schauen Sie sich KakerlakenDB an. Sie sprechen von Big Data und die Plattform muss eine ernsthafte Skalierung unterstützen.
https://www.cockroachlabs.com/
Es ist wahrscheinlich sofort einsatzbereit und hat eine gute Open-Source-Community.
Mawg sagt, Monica wieder einzusetzen
Nickolay
rwallace