Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Wie partitioniert man MySQL über MEHRERE SERVER?

Mit MySQL machen die Leute im Allgemeinen das, was als anwendungsbasiertes Sharding bezeichnet wird .

Kurz gesagt, Sie haben dieselbe Datenbankstruktur auf mehreren Datenbankservern. Aber es enthält nicht dieselben Daten.

Also zum Beispiel:

Users 1 - 10000: server A
Users 10001 - 20000: server B

Sharding ist (natürlich) keine Sicherungstechnik, sondern dient dazu, Lese- und Schreibvorgänge über einen Cluster zu verteilen.

Zum Shard eingesetzte Techniken sind zum Beispiel der MySQL-Proxy. Das ist nichts, was HScale erfunden hat, es ist mehr oder weniger ein einfaches LUA-Skript, das Lese- und Schreibzugriffe auf verschiedene Backend-Server verteilt. Es sollte viele Beispiele auf der MySQL-Schmiede geben.

Ein weiteres Tool (basierend auf MySQL Proxy) ist SpockProxy . Komplett auf Sharding zugeschnitten. Sie haben Lua auch losgeworden und an verschiedenen Dingen gearbeitet, um es schneller als den Proxy zu machen. Bisher habe ich SpockProxy nur getestet, aber nie in der Produktion ausgeführt.

Abgesehen von diesen Proxys können Sie sich jetzt auch selbst teilen. Benötigt wird eine Stammtabelle, z. B.:

-------------------
| userA | server1 |
| userB | server2 |
| userC | server1 |
-------------------

Erstellen Sie dann Ihre Lese- und Schreibvorgänge für den Server. Nicht sehr schön aber das geht. Das nächste Hindernis wäre, es falttoleranter zu machen. Also zum Beispiel server1 , server2 und server3 jeder sollte ein kleiner Cluster sein.

Und zu guter Letzt ist Diggs IDDB . Ich bin mir nicht sicher, ob sie ihren Code jemals veröffentlicht haben, aber ihre Blog-Posts geben großartige Details darüber, was sie tun.

Lassen Sie mich wissen, ob das hilft!