2008-09-03 11 views
11

Im Allgemeinen ist der Datenbankserver die größte und teuerste Box, die wir kaufen müssen, da die vertikale Skalierung die einzige Option ist. Gibt es Datenbanken, die horizontal gut skalierbar sind (d. H. Über mehrere Commodity-Maschinen hinweg) und welche Beschränkungen gibt es bei diesem Ansatz?Können Sie eine horizontal skalierbare Datenbank empfehlen?

+0

Haben Sie eine der NewSQL-Optionen ausgecheckt? NuoDB, Clustrix und Xeround sind jeweils verteilte OLTP-Datenbanken. Ich arbeite bei Clustrix und halte es für ein tolles Produkt. – clieu

Antwort

4

Keine Sorge, gute Lösungen kommen!

Couchdb und Hypertable sind Open Source und immer noch in Alpha, aber sie sind klar entworfen, um die Skalierung von Standardsoftware zu vereinfachen. Sie funktionieren ziemlich gut und ändern möglicherweise, wie Sie über Datenbanken denken.

Auch wenn es in Ordnung ist, jemand anderen die Verteilung für Sie zu tun, sind Google AppEngine und Amazon SimpleDB extrem billig verteilte Datenbankdienste, obwohl sie beide in der Beta sind, so strenge Beschränkungen auferlegt werden.

2

Es gibt Speichertechniken wie JavaSpaces (oder eine kommerzielle Implementierung wie Gigaspaces), die hochgradig skalierbaren, schnellen & sicheren Zugriff auf Objekte bieten.

Es gibt auch verteilte Cache-Systeme wie Memcached, die einen ähnlichen Ansatz bieten.

Natürlich sind keine dieser Datenbanken echte Datenbanken, aber sie können zusammen mit Datenbanken arbeiten, um bei geeigneter Architektur eine große horizontale Skalierbarkeit zu bieten. Das eigentliche Problem ist, dass wenn Sie alle ACID-Güte, die mit einer Datenbank kommt, wollen, gibt es bestimmte unvermeidbare Leistungseinbußen. Der einzige Ausweg besteht darin, die Bits herauszufinden, an denen Sie keine ACID benötigen, und andere Technologien zu verwenden, um diese Bits zu warten.

1

Netezza und andere Datawarehouse-Appliances skalieren auf diese Weise, aber sie sind nicht gut für OLTP und Web-App-Workloads.

1

Die Oracle-Route für die Skalierung über mehrere Rechner heißt Real Application Clusters (Oracle RAC). Es gibt kein Ende der Dokumentation an anderer Stelle; Sie könnten versuchen, bei http://www.oracle.com/database/rac_home.html starten.

5

Oracle RAC - Real Application Cluster

Dies funktioniert gut, Sie fügen Sie einfach Boxen Cluster. Sie können von einer Box zur anderen failover. Es ist keine Replikation, alle Boxen sind Teil derselben logischen Einheit.

Es ist natürlich ziemlich teuer.

2

Oracle RAC ist der Rolls Royce von Datenbanken, der das Hinzufügen zusätzlicher Hardware-Knoten relativ einfach und Hardware-Failover ermöglicht.

Allerdings werden Ihre Hardwarekosten durch die Lizenzkosten in den Schatten gestellt.

Warum dod Sie glauben, Sie brauchen horizontale Skalierung. Ein Multi-CPU-Core-Server mit 40 GB RAM und SAN-Speicher kann eine sehr umfangreiche DB-Installation unterstützen.

Können Sie Informationen zur Größe und zur erwarteten Aktivität bereitstellen, um ein besseres Verständnis für Ihr Problem zu erhalten?

0

Oracle Real Anwendungscluster. Wenn du das Beste willst, dann sieh es dir an.

0

Wenn Sie ernsthaft glauben, dass Sie eine anständige Multicore-Box "Big Iron" skalieren, dann denken Sie darüber nach, Ihre Daten zu partitionieren. Dies ist ein guter, datenbankunabhängiger Weg zum Skalieren.

Alle Datenbanken, die horizontal zu einem ernsthaften Kosten kommen.

Es sei denn, Sie haben mega $ 's, um auf das Problem zu werfen, vergessen Sie RAC. Während es sehr gut ist, ist es sehr teuer, sobald Sie über 2 Knoten skalieren.

2

Wenn Sie die RAC-Route hinunter gehen, ist es wert, daran zu denken, dass es horizontal für immer nicht skaliert. Selbst die Verkäufer geben zu, dass 90% der rac-Kunden 4 Knoten oder weniger haben. Sobald Sie mehr als das gehen, erhalten Sie abnehmende Erträge. So rac kann für Sie arbeiten, aber es ist nicht garantiert, die Antwort zu sein.

2

MySQL: http://www.mysql.com/why-mysql/scaleout.html

Einschränkungen sind, dass es am besten mit Lese meist Workloads funktioniert. Sie haben normalerweise einen "Master", der alle Schreibvorgänge empfängt, und viele "Slaves", die die Schreibvorgänge replizieren. Dann verteilen Sie die Lesevorgänge über alle Datenbanken.

Die MySQL-Replikation ist asynchron, daher müssen Sie wahrscheinlich mit Zeitverzögerungsproblemen umgehen (Sie schreiben in den Master und lesen dann von einem Slave, bevor der Schreibvorgang repliziert wurde).

6

Oracle RAC ist überhaupt nicht horizontal skalierbar, da alle Oracle-Instanzen den gleichen Datenspeicher teilen. Ja, mit SAN können Sie eine große DB bekommen, aber sie ist überhaupt nicht skalierbar. Mit anderen Worten, Oracle RAC ist immer noch ein Scale-Up-Ansatz. Zum Skalieren oder horizontalen Skalieren müssen Sie also Ihre Daten nach Funktionen partitionieren, dh verschiedene Gruppen von Tabellen in verschiedenen Datenbanken ablegen; oder partitionieren Sie Ihre Daten pro Tabelle, das heißt, partitionieren Sie eine Tabelle in mehrere Untertabellen mit demselben Schema, speichern Sie sie jedoch in verschiedenen Datenbanken. Auf diese Weise erhalten Sie eine Skalierungslösung. Dafür gibt es viele Ressourcen. Sharding ist seit einiger Zeit ein Schlagwort in Web 2.0 Website Architektur Blog Sphäre. Da das Sharding nicht direkt von der Datenbank selbst unterstützt wird, müssen Sie Ihre eigene Lösung erstellen. Aber wie gesagt, es gibt schon viele Lektionen. Für Orakel ist Partitionstabelle möglich. Für mysql, überprüfen this question

0

ist eine der besten Datenbank, die horizontal skaliert.