sql >> Database teknologi >  >> RDS >> Mysql

Håndtering af meget store data med mysql

  • Kan MySQL med rimelighed udføre forespørgsler på milliarder af rækker? -- MySQL kan 'håndtere' milliarder af rækker. "Med rimelighed" afhænger af forespørgslerne; lad os se dem.

  • Er InnoDB (MySQL 5.5.8) det rigtige valg til multi-milliard rækker? -- 5.7 har nogle forbedringer, men 5.5 er ret godt, på trods af at det er næsten 6 8 år gammel, og på grænsen til ikke længere understøttes.

  • Bedste datalager for milliarder af rækker -- Hvis du mener 'Engine', så InnoDB.

  • Hvor stor kan en MySQL-database blive, før ydeevnen begynder at forringes -- Igen, det afhænger af forespørgslerne. Jeg kan vise dig en 1K række tabel, der vil smelte sammen; Jeg har arbejdet med milliardrækketabeller, der nynner med.

  • Hvorfor MySQL kunne være langsom med store borde? -- rækkeviddescanninger fører til I/O, som er den langsomme del.

  • Kan Mysql håndtere tabeller, som vil indeholde omkring 300 millioner poster? -- igen, ja. Grænsen er et sted omkring en billion rækker.

  • (for InnoDB-tabeller, hvilket er mit tilfælde) at øge innodb_buffer_pool_size (f.eks. op til 80% af RAM). Jeg fandt også nogle andre MySQL-ydeevnejusteringsindstillinger her i Percona-bloggen -- ja

  • at have ordentlige indekser på bordet (ved at bruge EXPLAIN på forespørgsler) -- godt, lad os se dem. Der er mange fejl, der kan begås i denne kritiske område.

  • opdeling af bordet -- "Opdeling er ikke et vidundermiddel!" Jeg taler om det i min blog

  • MySQL Sharding -- I øjeblikket er dette DIY

  • MySQL klynge -- I øjeblikket er det bedste svar en Galera-baseret mulighed (PXC, MariaDB 10, DIY m/Oracle). Oracles "Group Replication" er en levedygtig konkurrent.

  • Partitionering understøtter ikke FOREIGN KEY eller "global" UNIQUE .

  • UUID'er, i den skala du taler om, vil ikke bare bremse systemet, men faktisk dræbe det. Type 1 UUID'er kan være en løsning.

  • Indsæt- og indeksopbygningshastighed -- Der er for mange variationer til at give et enkelt svar. Lad os se din foreløbige CREATE TABLE og hvordan du har tænkt dig at indlæse dataene.

  • Masser af joins -- "Normaliser, men overnormaliser ikke." Normaliser især ikke dato- og klokkeslæt eller flydere eller andre "kontinuerlige" værdier.

  • Byg oversigtstabeller

  • 2,3 millioner transaktioner om dagen -- hvis det er 2,3 millioner indsættelser (30/sek), så er der ikke det store ydelsesproblem. Hvis det er mere komplekst, kan RAID, SSD, batching osv. være nødvendigt.

  • beskæftige sig med en sådan mængde data -- Hvis det meste af aktiviteten er med de "seneste" rækker, vil buffer_puljen pænt 'cache' aktiviteten og derved undgå I/O. Hvis aktiviteten er "tilfældig", så MySQL (eller hvem som helst else) vil have I/O-problemer.

  • Formindskelse af datatyperne hjælper i en tabel som din. Jeg tvivler på, om du har brug for 4 bytes for at angive fuel_type . Der er flere 1-byte tilgange.



  1. Sådan bruger du MySQL-dump fra en ekstern maskine

  2. SQL OR Operator for begyndere

  3. PHP PDO-relateret:Opdater SQL-sætning, der ikke opdaterer indholdet af databasen

  4. Opdel flere SQL-sætninger i individuelle SQL-sætninger