Wie Mysql über mehrere Server partitionieren?
-
05-07-2019 - |
Frage
Ich weiß, dass horizontale Partitionierung ... Sie viele Tabellen erstellen können.
Wie können Sie tun dies mit mehreren Servern? Dies ermöglicht Mysql zu skalieren.
Erstellen X Tabellen auf X-Servern?
Hat zu erklären jemand dafür interessieren, oder hat ein Tutorial guten Anfänger (Schritt-für-Schritt), die lehrt, wie man über mehrere Server partitionieren?
Lösung
Mit MySQL, die Menschen im Allgemeinen tun, was genannt wird Anwendung basiert sharding .
Auf den Punkt gebracht, haben Sie die gleiche Datenbank Struktur auf mehreren Datenbankservern. Aber es wird nicht die gleichen Daten enthalten.
So zum Beispiel:
Users 1 - 10000: server A
Users 10001 - 20000: server B
Sharding (natürlich) ist kein Backup-Technik, es liest verteilen soll und schreibt über einen Cluster.
Techniques Scherbe beschäftigt ist das MySQL-Proxy, zum Beispiel. Das ist nichts, was HScale erfunden, es ist mehr oder weniger ein einfaches Skript, das LUA verteilt liest und schreibt an verschiedene Backend-Server. Es sollte auf der MySQL-Schmiede viele Beispiele sein.
Ein weiteres Tool (basierend auf MySQL Proxy) ist SpockProxy . Komplett in Richtung sharding zugeschnitten. Sie wurden auch Lua gereinigt weg, und sie arbeiteten an verschiedenen Dingen machen sie schneller als der Proxy. Bisher habe ich nur SpockProxy getestet, aber nie lief es in der Produktion.
Nun, abgesehen von diesen Proxies, können Sie sich auch Scherbe. Erforderlich wäre eine Master-Tabelle sein, z.
-------------------
| userA | server1 |
| userB | server2 |
| userC | server1 |
-------------------
Dann erstellen Sie Ihre liest und schreibt auf dem Server. Nicht sehr schön, aber das funktioniert. Die nächste obstactle wäre es mehr falt tolarant zu machen. So zum Beispiel, server1
, server2
und server3
jeder sollte eine kleine Gruppe sein.
Und last but not least, ein weiterer interessanter Ansatz Daten und Indizes über mehrere Server zu partitionieren ist Digg IDDB . Ich bin nicht sicher, ob sie jemals seinen Code veröffentlicht, aber ihre Blog-Posts gibt große Details auf, was es tut.
Lassen Sie mich wissen, ob das hilft!
Andere Tipps
Aber Sie müssen bedenken, dass, wenn Sie aus irgendwelchen Gründen diese Lösung nehmen wollen Cloud und es Multi Tenant machen dann die obige Konfiguration schwieriger werden könnte. Denken Sie darüber nach -
- angemeldet Sie in das System und die DB ausgewählt wird (DB-Swap) auf der Grundlage der vom Benutzer Organisation Tabelle
- Dies würde die neue Master-Tabelle, die Sie mit einem eigenen Sklaven jetzt sprechen
- Aber der Punkt 2 oben muss auch sharding jetzt, da Sie sicherstellen möchten, dass Ihre Waage aus nicht zu einem Engpass.
So, jetzt die Frage ist, dass Sie wahrscheinlich zu denken brauchen, um, wie können Sie dieses sharding in einer Mster-Slave Art von env tun, wo Sklaven typischerweise zum Lesen und zum Schreiben Meister sind.
Prost! Gary
Hier ist, was auf Ihre Anzeige geschrieben von HScale 0,1:
Im Moment müssen wir einfach aufgespalten riesige Tabellen aber später wollen wir verteilen Partitionen über mehrere MySQL-Server-Instanzen real haben horizontale Skala aus. Der schwierigste Teil wird mit Transaktionen zu tun haben wo wir verwenden verteilt Transaktionen (XA) oder verbieten Transaktionen mit Partitionen auf verschiedene Hosts ...
Haben Sie einen Blick auf dieses Projekt: http://sourceforge.net/projects/hscale/ vielleicht wird es für Sie geeignet sein.