sql >> Databasteknik >  >> RDS >> Mysql

Räknare för uppdatering av hög volym Mysql

Har du delat upp klienten till en separat maskin från servern? Det är ett första, mindre, steg i skalningen.

Har du replikerings- och skrivskyddade frågor skickade till Slaves? Det kan tillåta obegränsad läsning skalning. (Men detta tar inte upp UPDATE-frågan, annat än för att lätta belastningen på Mastern.)

115 IOP:er på en enda, snurrande, disk kommer i stort sett att mätta den. innodb_flush_log_at_trx_commit har som standard 1, vilket leder till minst 1 IOP per transaktion. Vissa tillfälliga lösningar (tills din trafik växer med ytterligare 10x)...

SSD:er – kanske 1000 IOP.

Batch uppdateringarna (som nämns av @N.B.) Detta minskar antalet "spolningar" med 100 gånger.

innodb_flush_log_at_trx_commit =2 -- för att praktiskt taget eliminera tömningarna (vid viss förlust av säkerhet).

Men -- Även om du kan göra UPPDATERINGAR snabbt nog, behöver du inte också läsa värdena? Det vill säga att det blir tvist. Hur många SELECTs på samma bord gör du? 100/sek kan vara ok; 1000/sek kan orsaka så mycket störningar att det inte fungerar.

Hur stort är bordet? För att något av detta ska fungera måste det vara tillräckligt litet för att cachelagras hela tiden.

Reddit är ett annat tillvägagångssätt - fånga uppdateringarna där. Dra sedan kontinuerligt ut ackumulerade räkningar och gör nödvändiga UPPDATERINGAR.

Sharding -- Det är här du delar upp data mellan flera maskiner. Att dela upp på en hash eller uppslagning (eller en kombination av de två) av användar-id är vanligt. Då måste UPPDATERING ta reda på vilken maskin som ska uppdateras och sedan utföra åtgärden där. Om du har 10 skärvor (maskiner) kan du upprätthålla nästan 10 gånger uppdateringshastigheten. I slutändan är detta det enda sättet som alla tunga användare kan hantera över 100 miljoner användare och miljarder frågor/dag.

PARTITIONERING kommer sannolikt inte att hjälpa. Partitionsbeskärningskoden är ännu inte tillräckligt effektiv för att undvika för mycket overhead för en så liten fråga.




  1. Flera fall när är med utgång på samma rad

  2. MySQL-beteende för PÅ DUBLIKATNYCKELUPPDATERING för flera UNIKA fält

  3. Vad är triggers i SQL och hur implementerar man dem?

  4. Hur tar man bort stora data i tabeller i SQL utan logg?