sql >> Databasteknik >  >> RDS >> Mysql

Hur hanterar man för många samtidiga anslutningar även efter att ha använt en anslutningspool?

Stammen är inte tillräckligt specifik för att ge ett konkret förslag, men den fullständiga listan över vad som kan göras är som följer:

  • Databaskluster :Lämplig för situationer där du inte vill ändra ditt applikationslager och databas är allt du rör. Det finns en gräns för hur mycket du kan få ut av ett databaskluster. Om din förfrågningsvolym fortsätter att växa kommer denna lösning också att misslyckas så småningom. Men den goda nyheten är att du har all funktionalitet du redan har haft i en vanlig MySQL med en instans.
  • Skärning :Eftersom din fråga är taggad med MySQL och den inte stöder sharding på egen hand, om du vill använda den här lösningen måste du implementera den i ditt applikationslager. I den här lösningen kommer du att sprida dina data över flera databaser (helst i flera MySQL-instanser på separat hårdvara) logiskt. Det kommer att vara ditt ansvar att hitta lämplig databas som innehåller dina angivna uppgifter. Det är en av de mest effektiva lösningarna någonsin men det är inte alltid genomförbart. Dess största brist är att data spridda mellan två eller flera databaser inte kan inkluderas i en transaktion.
  • Replikering :Beroende på ditt scenario kanske du kan införliva databasreplikering och ha kopior av dina data på dem. På så sätt kan du ansluta till dem istället för huvuddatabasen och minska belastningen på den. Standardreplikeringsdefinitionen är master/slav-scenario där dataflödet är ett sätt, från master till slav. Så ändringar du kan göra på slaven medan kommer att tillämpas på salvan, de kommer inte att påverka mastern. Men det finns också en master/master replikeringskonfiguration där dataflödet är på båda sätten. Ändå kan du inte anta atomär integritet för samtidiga dataändringar bland båda mästarna. I slutändan är den här lösningen mest effektiv om du planerar att använda den i master-/slavläge och använder slavar för skrivskyddad åtkomst.
  • Cachning :Den här lösningen borde kanske inte inkluderas här men eftersom din stam inte avvisar den, här kommer den. Ett av sätten att minska databasbelastningen är att cachelagra dess data när de har extraherats. Denna lösning kan vara fördelaktig speciellt om det är dyrt att extrahera data. Det finns många cacheservrar där ute, som memcached eller redis . På så sätt kan du utelämna så många av databasanslutningarna men bara för att extrahera data.
  • Andra lagringsmotorer :Du kan alltid byta till mer presterande motorer om din nuvarande inte ger dig det du behöver. Naturligtvis är detta bara möjligt om dina behov tillåter dig. Nuförtiden finns det NoSQL-motorer, mycket mer prestanda än RDBMS, som stöder sharding inbyggt och du kan skala dem linjärt med minimal ansträngning. Det finns också Lucene-baserade lösningar där ute med kraftfulla fulltextsökningsfunktioner som ger dig samma automatiska skärning. Faktum är att den enda anledningen till att du bör använda ett traditionellt RDBMS är transaktionernas atomära beteende. Men om transaktioner inte är ett måste, finns det mycket bättre lösningar än RDBMS.


  1. MySQL2 Ruby gem kommer inte att installera 10.6

  2. Behöver ett tips om enkel MySQL db-design

  3. Använda rekursion för att bygga navigering

  4. Så här fixar du "Server är inte konfigurerad för DATAÅTKOMST" i SQL Server