sql >> Database >  >> RDS >> Mysql

Praktisch van meerdere databases per klant versus één database

Ja, het is mogelijk en mijn bedrijf doet het. Ik ga zeker niet zeggen dat het slim is. We hebben een SAAS-marketingautomatiseringssysteem. De databases van sommige klanten hebben meer dan 1 miljoen records. We hebben te maken met een tweede "gewone" database met een "fulfillment"-tabel die e-mails, brieven, telefoontjes enz. met meer dan 4 miljoen records volgt, plus tal van andere zeer grote gedeelde tabellen. Met de juiste indexering, optimalisatie, het onderhouden van een aparte DB-only server, en eventueel clustering (wat we nog niet hoeven te doen) kun je VEEL gegevens aan... in veel gevallen degenen die denken dat het kan slechts een paar honderdduizend platen afhandelen, werken aan een concurrerend product voor de kost. Als je nog steeds twijfelt of het geldig is, bedenk dan dat volgens de clusteringstatistieken van MySQL een cluster met 8 servers PER SECONDE 2,5 miljoen updates kan verwerken. Helemaal niet te armoedig.....

Het probleem met het gebruik van twee databases is het jongleren met meerdere verbindingen. Is het moeilijk? Nee niet echt. U maakt verschillende objecten aan en verwijst naar uw verbindingsklassen op basis van de gewenste database. In ons geval raken we de bedrijfsklasse van de hoofddatabase om de naam van de client-db af te leiden en op basis daarvan de tweede verbinding te bouwen. Maar als je met die verbindingen heen en weer jongleert, kun je fouten tegenkomen die extra debuggen vereisen. Het is niet alleen "Is mijn zoekopdracht geldig?" maar "Krijg ik echt de juiste databaseverbinding?" In ons geval kan een verbroken sessie ertoe leiden dat allerlei PDO-fouten worden geactiveerd, omdat het systeem niet langer kan bijhouden tot welke clientdatabase toegang moet worden verkregen. Bovendien is het vanuit het oogpunt van onderhoudbaarheid een eng proces om tabelstructuurupdates naar 100 verschillende live databases te pushen. Ja, het kan geautomatiseerd worden. Maar één slip en je hebt VEEL mensen neergeslagen en een hoop extra werk voor jezelf gemaakt. Bereken nu de extra ontwikkeling en testen die nodig zijn om verbindingen te combineren en updates te pushen... dat zal uw maatstaf zijn om te bepalen of het de moeite waard is.

Mijn aanbeveling? Zoek een host waarmee u twee machines op hetzelfde lokale netwerk kunt plaatsen. We hebben voor Linode gekozen, maar wie je gebruikt maakt niet uit. Begin met uw speciale databaseserver, plan vooruit om clustering uit te voeren wanneer dat nodig is. Bewaar al uw inhoud in één DB, indexeer en optimaliseer religieus. Zoek ten slotte een ECHT goede DB-man en behandel hem goed. Met zoveel data zou een goede DBA een must zijn.




  1. Mysql Waar ... In ... EN waar ... in ... mag alleen overeenkomen met dezelfde index

  2. Volledige deelname aan SQL

  3. De LD_DEBUG-omgevingsvariabele

  4. JDBC verwijderen en invoegen met batch