Stilken er ikke specifik nok til at give et konkret forslag, men den komplette liste over, hvad der kan gøres, er som følger:
- Databaseklynge :Velegnet til situationer, hvor du ikke ønsker at ændre dit applikationslag og database er alt, hvad du rører ved. Der er en grænse for, hvor meget du kan få ud af en databaseklynge. Hvis din anmodningsvolumen bliver ved med at vokse, vil denne løsning også mislykkes i sidste ende. Men den gode nyhed er, at du har al den funktionalitet, du allerede har haft i en almindelig MySQL med én instans.
- Sharding :Da dit spørgsmål er tagget med MySQL, og det ikke understøtter sharding alene, skal du implementere det i dit applikationslag, hvis du vil bruge denne løsning. I denne løsning spreder du dine data logisk over flere databaser (helst i flere MySQL-instanser på separat hardware). Det vil være dit ansvar at finde den relevante database med dine udpegede data. Det er en af de mest effektive løsninger nogensinde, men det er ikke altid muligt. Dens største fejl er, at data spredt mellem to eller flere databaser ikke kan inkluderes i en transaktion.
- Replikering :Afhængigt af dit scenarie kan du muligvis inkorporere databasereplikering og have kopier af dine data på dem. På denne måde kan du oprette forbindelse til dem i stedet for masterdatabasen og reducere belastningen på den. Standardreplikeringsdefinitionen er master/slave-scenarie, hvor datastrømmen er én vej, fra master til slave. Så ændringer, du måske foretager på slaven, mens vil blive anvendt på salven, de vil ikke påvirke masteren. Men der er også en master/master replikeringskonfiguration, hvor dataflow er på begge måder. Alligevel kan du ikke antage atomisk integritet for samtidige dataændringer blandt begge mestre. I sidste ende er denne løsning mest effektiv, hvis du planlægger at bruge den i master/slave-tilstand og bruge slaver til skrivebeskyttet adgang.
- Caching :Måske skal denne løsning ikke medtages her, men da din stilk ikke afviser den, kommer den her. En af måderne at reducere databasebelastning på er at cache dens data, når de er udtrukket. Denne løsning kan især være fordelagtig, hvis det er dyrt at udtrække data. Der er mange cache-servere derude, såsom memcached eller redis . På denne måde kan du udelade så mange af databaseforbindelserne, men kun for at udtrække data.
- Andre lagermotorer :Du kan altid skifte til mere effektive motorer, hvis din nuværende ikke giver dig det, du har brug for. Dette er selvfølgelig kun muligt, hvis dine behov giver dig mulighed for det. I dag er der NoSQL-motorer, meget mere effektive end RDBMS, som understøtter sharding indbygget, og du kan skalere dem lineært med minimal indsats. Der er også Lucene-baserede løsninger derude med kraftfulde fuldtekst-søgningsfunktioner, der giver dig den samme automatiske skæring. Faktisk er den eneste grund til, at du skal bruge et traditionelt RDBMS, transaktionernes atomare adfærd. Men hvis transaktioner ikke er et must, er der meget bedre løsninger end RDBMS.