Med MySQL udfører folk generelt det, der kaldes applikationsbaseret sharding .
I en nøddeskal vil du have den samme database-struktur på flere databaseservere. Men det vil ikke indeholde de samme data.
Så for eksempel:
Users 1 - 10000: server A
Users 10001 - 20000: server B
Sharding (selvfølgelig) er ikke en sikkerhedskopieringsteknik, det er beregnet til at distribuere læsninger og skrivninger på tværs af en klynge.
Teknikker, der bruges til at skære, er MySQL-proxy, for eksempel. Dette er ikke noget, som HScale har opfundet, det er mere eller mindre et simpelt LUA-script, som distribuerer læsninger og skrivninger til forskellige backend-servere. Der burde være masser af eksempler på MySQL-smedjen.
Et andet værktøj (baseret på MySQL Proxy) er SpockProxy . Fuldstændig skræddersyet til skæring. De slap også af med Lua, og de arbejdede på forskellige ting for at gøre det hurtigere end proxyen. Indtil videre har jeg kun testet SpockProxy, men aldrig kørt det i produktion.
Nu bortset fra disse fuldmagter, kan du også sønderdele dig selv. Påkrævet ville være en mastertabel, f.eks.:
-------------------
| userA | server1 |
| userB | server2 |
| userC | server1 |
-------------------
Konstruer derefter dine læsninger og skrivninger mod serveren. Ikke særlig smuk, men det virker. Den næste hindring ville være at gøre det mere falt tolarant. Så for eksempel server1
, server2
og server3
hver skal være en lille klynge.
Og sidst men ikke mindst, en anden interessant tilgang til partitionering af data og indekser på tværs af servere er Diggs IDDB . Jeg er ikke sikker på, om de nogensinde har udgivet dens kode, men deres blogindlæg giver gode detaljer om, hvad den gør.
Lad mig vide, hvis dette hjælper!