阿里内部mysql规范40条
支付業(yè)務(wù)很大程度上依賴于數(shù)據(jù)庫做支持,正確的設(shè)置數(shù)據(jù)庫參數(shù)以及正確的使用數(shù)據(jù)庫對非常重要,我這把自己之前的一些心得貼出來,拋磚引玉,大家可以把自己的一些心得分享出來供大家參考學(xué)習(xí)。
一.數(shù)據(jù)庫配置
1. innodb_flush_log_at_trx_commit,這個對支付業(yè)務(wù)來說是關(guān)鍵性的設(shè)置之一,可選的參數(shù)值有0,1,2, 支付需要設(shè)置成1.
2. 對交易以及記賬部分來說,必須是innode引擎,以支持事務(wù)
3. 事務(wù)隔離級別,權(quán)衡安全性和效率,使用可重復(fù)讀
4. innodb_lock_wait_timeout,這個是鎖超時時間,不建議太大,怕引起雪崩
二.業(yè)務(wù)設(shè)計
1. 不用物理刪除,即盡量避免用delete語句,drop命令等;通過軟刪除處理,即通過額外的字段標
2. 明記錄的刪除狀態(tài);雖然對寫代碼來講有些麻煩,但實踐證明是非常值得的
3. 在系統(tǒng)設(shè)計之初就要定好編碼規(guī)范,對存入的數(shù)據(jù)做相應(yīng)轉(zhuǎn)換并做好escape處理
4. 除列表查詢外,盡量用主鍵操作;核心交易系統(tǒng)中盡量避免非主鍵操作
5. 避免schema中1對多設(shè)計,概念簡單,編碼很難
6. 就mysql來說,盡量使用其最簡單的功能,不用其高級功能如觸發(fā)器,連表等
7. 就mysql來說,盡量不讓其做計算功能,而是讓業(yè)務(wù)層來實現(xiàn)計算邏輯
8. 當要鎖多條記錄時, 要考慮死鎖的可能以及預(yù)防的措施
9. 按業(yè)務(wù)垂直劃分原則,盡量把不同的業(yè)務(wù)方不同的庫中
10. 堅持小事務(wù),一個大事務(wù)與將其拆分成的十個小事務(wù)相比,小事務(wù)對數(shù)據(jù)庫壓力更小;另外,事務(wù)
中做盡可能少的事情,神馬參數(shù)校驗之類的事情能拉出去就拉出去
11. 數(shù)據(jù)庫連接長時間不用超時斷開是常見的,應(yīng)用中需要考慮
12. 對超大型系統(tǒng)來說,分布式事務(wù)是有價值的;但在大多下情況下,單機事務(wù)能很好的滿足需要
13. 主從延遲總是會有的,有時候會很大,設(shè)計中要考慮
14. 讀寫賬號分開,讀賬號select權(quán)限即可,寫賬號update,insert即可
15. where條件key='value'的模式中,加上單引號總是對的,不加在某些情況下有很多令人意外的副
作用
16. 盡量使用簡單的數(shù)據(jù)類型,char系列,int系列以及date系列即可
17. 事務(wù)的使用上,在線交易使用悲觀鎖
18. 事務(wù)框架的選擇上,使用控制力度比較大的,直接TransactionManager,不推薦使用聲明式事務(wù)
19. 采用InnoDB引擎,UTF8編碼
20. 有狀態(tài)字段的記錄,狀態(tài)的取值不宜太多, 6 ~ 7個應(yīng)該是上限了, 最好不要超過 4個
21. 每個表都應(yīng)該有自己的主鍵,且盡量讓表內(nèi)主鍵保持遞增
22. 不使用自增主鍵
23. 在線查詢的字段一定要建立覆蓋索引
24. 分頁查找一定不能直接limit m,n,一定要做優(yōu)化
三. 應(yīng)用規(guī)范
1. 當進行賬戶余額變化操作時,總是校驗賬戶是否被凍
2. 對單據(jù)如Trade,Charge進行處理,并發(fā)總是要考慮的,需要鎖記錄后進行校驗;從數(shù)據(jù)庫查詢的
時候,請先起動事務(wù),并用select...for update;防止并發(fā)帶來的問題;從性能上將,鎖交易單本身不
會成為性能瓶頸
3. 更新賬戶余額之前必須加鎖,即起事務(wù)+select...for update; 更新余額的語句建議是update table
set 余額=余額+/-發(fā)生額, 自然在代碼邏輯中做各種邊界值校驗,包括不溢出,不小于0等
4.金額都統(tǒng)一單位,以分為單位合適;數(shù)據(jù)類型為有符號64位整形數(shù)合適
5. 對金額計算時,對溢出的預(yù)防總是需要的
6.使用select時,慎用*,盡量明確的枚舉出字段名
7.與外部交互的地方,記錄下外部發(fā)生時間
8. db命名采用"cashpay"前綴
9. 表命名采用"t_"前綴
10. 字段命名采用"F_"前綴
11. 每個表都會有一個字段記錄上次更新時間
12. 在一個session中的所有數(shù)據(jù)庫更新記錄,上次更新時間都是一致的
總結(jié)
以上是生活随笔為你收集整理的阿里内部mysql规范40条的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mysql标准规范
- 下一篇: 从应用到底层 36张图带你进入Redis