Petras Bieliauskas

1,083 views

Published on

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
1,083
On SlideShare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
6
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Petras Bieliauskas

  1. 1. MySQL panaudojimas didelės apimties sistemose Petras Bieliauskas (petras @ito.lt)
  2. 2. Eskimi mobilus socialinis tinklas <ul><li>1 mln. narių </li></ul><ul><li>10mln. “pageviews” per dieną. 30 0 mln. per mėnesį </li></ul><ul><li>18 000 narių online </li></ul>95 mln. pageview per mėnesį 12 000 60 000
  3. 3. Eskimi architektūra <ul><li>php </li></ul><ul><li>Memcached </li></ul><ul><li>2 www serveriai </li></ul><ul><li>Duomenų bazė : </li></ul><ul><ul><li>MySQL </li></ul></ul><ul><ul><li>~50GB; </li></ul></ul><ul><ul><li>~300 mln. į rašų; </li></ul></ul><ul><ul><li>M-S replikavimas </li></ul></ul><ul><ul><li>2000 užklausų per sekundę; </li></ul></ul>
  4. 4. Sistemos optimizavimo terminai <ul><li>Vykdymo charakteristika (angl. Performance) </li></ul><ul><ul><li>vykdymo trukmė (angl. response time) </li></ul></ul><ul><ul><li>pralaidumas (angl. throughput) </li></ul></ul><ul><li>Išpl e čiamumas (angl. Scalability) </li></ul><ul><ul><li>Į aukštį (angl. scaling up) </li></ul></ul><ul><ul><li>Į plotį (angl. scaling out) </li></ul></ul><ul><li>Efektyvumas (angl. Efficiency) </li></ul>
  5. 5. Architektūrinės klaidos <ul><li>“ hardcodinti” duom enų bazių pavadinimai; </li></ul><ul><li>Nėra galimybės(sudėtinga) nukreipti SELECT užklausas į kitą serverį; </li></ul><ul><li>Nėra galimybės perimti užklausas ir modifikuoti prieš vykdant; </li></ul><ul><li>mysql_connect skripto pradžioje; </li></ul><ul><li>Per anksti priimti techniniai sprendimai; </li></ul>
  6. 6. Mes sparčiai augame! <ul><li>Kešavimas; </li></ul><ul><li>Duomenų bazės optimizavimas; </li></ul><ul><li>Aplikacijos optimizavimas, kad efektyviau panaudotų duombazę; </li></ul><ul><li>Techninės įrangos atnaujinimas/didinimas; </li></ul><ul><li>Duomenų bazės replikavimas; </li></ul><ul><li>Funkcinis particionavimas; </li></ul><ul><li>Sharding </li></ul>
  7. 7. Lentelės schema <ul><li>Atominės reikšmės; </li></ul><ul><li>Jokių “stebuklingų” lauko reikšmių ; </li></ul><ul><li>Kartais naudinga turėti perteklinę informaciją; </li></ul><ul><li>Per daug i n deksų lėtina įrašymą; </li></ul><ul><li>Atlikti ALTER operaciją didelėje lent e l ė je yra sudėtinga </li></ul><ul><li>“ hot column” </li></ul>
  8. 8. Teisingas duomenų tipo pasirinkimas <ul><li>Mažesnis = geresnis ; </li></ul><ul><li>Paprastesnis = geresnis ; </li></ul><ul><li>Ar man tikrai reikia utf8-general-ci? </li></ul><ul><li>Vengti NULL; </li></ul><ul><li>varchar(100) vistiek geriau nei varchar(255); </li></ul>
  9. 9. Užklausų optimizavimas <ul><li>Rezultatų limitavimas </li></ul><ul><li>Ar man reikia visų laukų (SELECT * ); </li></ul><ul><ul><li>SELECT * FROM users WHERE nick='petras' </li></ul></ul><ul><li>EXPLAIN naudoti tik su realiais duomenimis; </li></ul><ul><li>Vengti “subselect”; </li></ul><ul><ul><li>SELECT * FROM users WHERE city_id IN (SELECT id FROM cities WHERE country=‘lt’) </li></ul></ul><ul><li>Naudoti jungtinius indeksus </li></ul>
  10. 10. Puslapiavimo problema <ul><li>Priklauso nuo paieškos gylio: </li></ul><ul><ul><li>Sugeneruoti pirmą puslapį nesunku; </li></ul></ul><ul><ul><li>100-asis puslapis – kita istorija </li></ul></ul><ul><li>Alternatyvos : </li></ul><ul><ul><li>WHERE id BETWEEN 100 AND 110; </li></ul></ul><ul><ul><li>WHERE id > 99 ORDER BY id ASC LIMIT 10; </li></ul></ul><ul><ul><li>Puslapiuoti skripte </li></ul></ul>SELECT * FROM users WHERE country='lt' LIMIT 0, 10 SELECT * FROM users WHERE country='lt' LIMIT 100, 10
  11. 11. Mitai apie MySQL <ul><li>Slave'ui nereikia gerų parametrų; </li></ul><ul><li>Man nereikia backup, nes turiu slave; </li></ul><ul><li>MyISAM vykdo skaitymą greičiau nei InnoDB; </li></ul><ul><li>Replikavimas yra stabilu; </li></ul><ul><li>Reikia sudėti indeksus ant visų stulpelių; </li></ul><ul><li>LIMIT yra labai greitas ant MySQL; </li></ul><ul><li>INT(1) užima mažiau vietos nei INT(11); </li></ul>
  12. 12. A čiū už dėmesį ! [email_address] www.iTo.lt

×