Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

2016 ModernWeb 分享 - 恰如其分 MySQL 程式設計 (修)

1,608 views

Published on

2016 ModernWeb 與會心得分享

原作:http://s.itho.me/modernweb/2016/tracka/Ant_ModernWeb-恰如其分的MySQL設計技巧_修.pdf

Published in: Technology
  • Be the first to comment

2016 ModernWeb 分享 - 恰如其分 MySQL 程式設計 (修)

  1. 1. ⼼心得分享 Modern Web 2016 技術在我們⼿手上,票就在我們⾝身上 2016年年 10 ⽉月 8 ⽇日 JAAD - Win
  2. 2. 恰如其分的 MySQL 設計技巧 Modern Web 2016 Ant_ModernWeb-恰如其分的MySQL設計技巧_修.pdf
  3. 3. –Donald Knuth- 過早最佳化是萬惡惡的根源 Modern Web 2016 3
  4. 4. 架構是演進的,預想有益⾝身⼼心健康 Modern Web 2016 4
  5. 5. 新平台上線 Modern Web 2016 5
  6. 6. 上線⼀一週後 Modern Web 2016 6
  7. 7. Minimum Viable Product MVP 若若沒有控制好,技術債迅速成長.... 先前程式常不能⽤用 遺舊程式不忍棄之 結構變動反覆無常 Modern Web 2016 7
  8. 8. 只做 MVP ,最終只會得到⼀一個 壞產品 Modern Web 2016 8
  9. 9. 預想 開發 Modern Web 2016 Research Development 9
  10. 10. 無視⼈人員、流程只講技術,是耍⽩白痴 架構會影響公司⽂文化、商業擴展;思維更更要超越程式碼層次 ➊ 架構先決 Modern Web 2016 10
  11. 11. 無視場景只講架構,是耍流氓 若若無法舉出架構的缺陷,代表你還無法掌握 盲⽬目套⽤用別⼈人的架構,並不會讓你變得跟他⼀一樣好 ➋ 沒有完美的架構,只有最適的架構 Modern Web 2016 11
  12. 12. 無視未來來只求現有,是耍⾃自閉 兵⾺馬未動,糧草先⾏行行,預想下⼀一步,下下⼀一步,甚⾄至下下下⼀一步 ... ➌ 架構是演進的,預想但不過早調優 Modern Web 2016 12
  13. 13. Modern Web 2016 13
  14. 14. Modern Web 2016 Monolithic Microservices 14
  15. 15. Elastic Business Modern Web 2016
  16. 16. 當業務需求變更更程式設計時 預想但不過早調優 Modern Web 2016 ⼯工程師不該把每次新需求都認為獨立需求 (多想兩兩分鐘,團隊可以不必⾃自虐) 16
  17. 17. 以狀狀態為例例 Modern Web 2016 17
  18. 18. Modern Web 2016 18
  19. 19. Modern Web 2016 新的業務需求需要儲存『鎖定』狀狀態 你覺得該怎麼做? 19
  20. 20. Modern Web 2016 20
  21. 21. Modern Web 2016 其實若若狀狀態是互斥,則可以合併 {0: deleted, 1: enabled, 2: locaked} 21
  22. 22. 以標籤雲為例例 Modern Web 2016 22
  23. 23. Modern Web 2016 SELECT * FROM {Table} WHERE tag1 = `admin` 23
  24. 24. Modern Web 2016 SELECT * FROM {Table} WHERE tag1 = `admin` 新的業務需求需要新增 『不⼀一樣的標籤』 24
  25. 25. Modern Web 2016 SELECT * FROM {Table} WHERE (tag1 = `admin` OR tag2 = `admin` OR tag3 = `admin`) AND (tag1 = `reporter` OR tag2 = `reporter` OR tag3 = `reporter`) SELECT * FROM {Table} WHERE `admin` IN (tag1, tag2, tag3) AND `reporter` IN (tag1, tag2, tag3) 新增標籤 alter table !! 25
  26. 26. Modern Web 2016 SELECT * FROM {Table} INNER JOIN `Tag` AS t1 USING (id) INNER JOIN `Tag` AS t2 USING (id) WHERE t1.tag = `admin AND t2.tag = `reporter` 新⽅方法1 tag 26
  27. 27. Modern Web 2016 新⽅方法2 或是 M : N 27
  28. 28. 哪些需求會變成變數才是⼯工程師在意的 當需求出現的時候要預想變數有可能是什什麼 Modern Web 2016 28
  29. 29. Scale Up - Application Modern Web 2016
  30. 30. ➊ N+1 queries / ORM ➋ Bad SQL ➌ Bad Schema Design ➍ Big SQL ➎ Big Transaction ➏ Big Batch 效能通常有 99% 的問題在於 Application Modern Web 2016 30
  31. 31. ➊ N+1 queries / ORM ➋ Bad SQL ➌ Bad Schema Design ➍ Big SQL ➎ Big Transaction ➏ Big Batch 效能通常有 99% 的問題在於 Application Modern Web 2016 31
  32. 32. ➀ 如果更更新頻繁且長度不⼀一, CHAR 通常比較快。 ➁ 在 MySQL 5.7.7 之後, CHAR 通常比 VARCHAR 快。 Modern Web 2016 (MySQL) CHAR vs. VARCHAR 32
  33. 33. ➀ Primary Index 對 MySQL 很重要,循序式比亂序式快。 ➁ Index 愈多不⼀一定愈好。 ➂ Composite Index 需善⽤用。 Modern Web 2016 Index 33
  34. 34. Modern Web 2016 Scale Out - Replication - Cluster
  35. 35. Modern Web 2016 Replication 35
  36. 36. Modern Web 2016 Replication Read Write 36
  37. 37. Modern Web 2016 Clustering 每台都可以 Read/Write 37
  38. 38. Modern Web 2016 Clustering 缺點:會發⽣生 Deadlock 38
  39. 39. Modern Web 2016 Clustering 解法:加入 Load Balancer 當作中介層 39
  40. 40. Percona XtraDB Cluster: Multi-node writing and Unexpected deadlocks 2012-08-17 https://www.percona.com/blog/2012/08/17/percona-xtradb-cluster-multi-node-writing-and-unexpected- deadlocks/ Avoiding Deadlocks in Galera - Set up HAProxy for single-node writes and multi-node reads 2013-09-17 http://www.severalnines.com/blog/avoiding-deadlocks-galera-set-haproxy-single-node-writes-and-multi- node-reads Optimizing Percona XtraDB Cluster for write hotspots 2015-06-03 https://www.percona.com/blog/2015/06/03/optimizing-percona-xtradb-cluster-write-hotspots/ Modern Web 2016 40
  41. 41. Clustering Database Federation Table Partitioning Table Sharding Modern Web 2016 41
  42. 42. Modern Web 2016 How to do in PIXNET
  43. 43. Modern Web 2016 ➊ 架構先決 ➋ 沒有完美的架構,只有最適的架構 ➌ 架構是演進的,預想但不過早調優 43
  44. 44. Modern Web 2016 Thank you.

×