sql >> Databasteknik >  >> RDS >> Mysql

Hanterar mycket stora data med mysql

  • Kan MySQL rimligen utföra frågor på miljarder rader? -- MySQL kan "hantera" miljarder rader. "Rimligen" beror på frågorna; låt oss se dem.

  • Är InnoDB (MySQL 5.5.8) det rätta valet för flera miljarder rader? -- 5.7 har några förbättringar, men 5.5 är ganska bra, trots att det är nästan 6 8 år gammal, och på gränsen till stöds inte längre.

  • Bästa datalager för miljarder rader -- Om du menar "Engine", så InnoDB.

  • Hur stor kan en MySQL-databas bli innan prestandan börjar försämras -- Återigen, det beror på frågorna. Jag kan visa dig en 1K radtabell som kommer att smälta ner; Jag har arbetat med miljardradstabeller som nynnar med.

  • Varför kan MySQL vara långsam med stora tabeller? -- Avståndssökningar leder till I/O, vilket är den långsamma delen.

  • Kan Mysql hantera tabeller som kommer att innehålla cirka 300 miljoner poster? -- igen, ja. Gränsen går någonstans runt en biljon rader.

  • (för InnoDB-tabeller vilket är mitt fall) öka innodb_buffer_pool_size (t.ex. upp till 80% av RAM). Jag hittade också några andra MySQL prestandajusteringsinställningar här i Perconas blogg -- ja

  • ha korrekta index på bordet (med EXPLAIN på frågor) -- ja, låt oss se dem. Det finns många misstag som kan göras i denna kritiska område.

  • partitionering av bordet -- "Partitionering är inget universalmedel!" Jag pratar om det i min blogg

  • MySQL Sharding -- För närvarande är detta DIY

  • MySQL-klustring -- För närvarande är det bästa svaret något Galera-baserat alternativ (PXC, MariaDB 10, DIY w/Oracle). Oracles "Group Replication" är en livskraftig utmanare.

  • Partitionering stöder inte FOREIGN KEY eller "global" UNIQUE .

  • UUID, i den skala du talar om, kommer inte bara att sakta ner systemet, utan faktiskt döda det. UUID av typ 1 kan vara en lösning.

  • Infoga och indexbygga hastighet -- Det finns för många varianter för att ge ett enda svar. Låt oss se din preliminära CREATE TABLE och hur du tänker mata in data.

  • Många kopplingar -- "Normalisera, men övernormalisera inte." Normalisera i synnerhet inte datumtider eller flytningar eller andra "kontinuerliga" värden.

  • Bygg sammanfattningstabeller

  • 2,3 miljoner transaktioner per dag -- Om det är 2,3 miljoner inlägg (30/sek), då är det inte så mycket prestandaproblem. Om det är mer komplext kan RAID, SSD, batchning, etc, vara nödvändigt.

  • hantera sådana datavolymer -- Om den mesta aktiviteten är med de "senaste" raderna, kommer buffert_poolen att "cache" aktiviteten på ett bra sätt och därmed undvika I/O. Om aktiviteten är "slumpmässig", då MySQL (eller vem som helst else) kommer att ha I/O-problem.

  • Att krympa datatyperna hjälper i en tabell som din. Jag tvivlar på om du behöver 4 byte för att ange fuel_type . Det finns flera 1-byte metoder.



  1. Hur man använder PL/SQL Bulk Collect-klausul med FETCH INTO-utlåtande

  2. Hur trunkerar man en tabell med begränsad främmande nyckel?

  3. Doctrine 2 DQL CASE WHEN in Count

  4. Är dessa två funktioner överdrivna för sanering?