設計規范
更新(xin)時間(jian) 2024-09-11 22:04:20
最近更新時間: 2024-09-11 22:04:20
分享文章
本文主(zhu)要內(nei)容介紹設計(ji)規范(fan)
命名規范
- 數據庫對象(庫名、表名、字段名、索引名)命名建議全部使用小寫字母開頭,后面跟字母或者數字,數據庫對象(庫名、表名、字段名、索引名)名字長度建議都不要大于32字節。
- 數據庫名稱不能使用特殊字符("",.,$,,/,*,?,~,#,:,?,|")和空字符\0,數據庫名稱不能使用admin,local,config。
- 數據庫集合名稱建議使用字母和下劃線組合,不能以system為前綴,<數據庫名>.<集合名稱> 總長度不超過120字符。
索引設計規范
索引創建,可(ke)以避免(mian)全(quan)表(biao)掃(sao)描。有(you)效地提高查詢(xun)命(ming)令的執行效率。
- 索引字段的長度不能超過512字節,索引名稱長度不能超過64字符,單個復合索引所包含字段數最多不能超過16個。
- <數據庫名>.<集合名>.$<索引名>的總長度不能超過128字符。
- 在高選擇性字段上的創建索引。在低選擇性字段上查詢會返回較大的結果集。盡量避免返回較大的結果集。
- 對集合的寫操作同時會操作集合上的索引,從而觸發更多的IO操作,集合上的索引數量不要超過32。
- 不要創建不會被使用到的索引,因為DDS會加載索引到內存,無用索引加載到內存會浪費內存空間因業務邏輯變化而產生的無用索引也要及時清理。
- 索引創建必現使用后臺創建索引,禁止前臺創建索引。
- 業務中查詢,排序條件的key一定要創建索引,如果建立的是復合索引,索引的字段順序要和這些關鍵字后面的字段順序一致,否則索引不會被使用。
- 不要基于復合索引的靠前字段再創建索引。復合索引可以被用于一個索引中主要字段的查詢。例如,對于復合索引(firstname,lastname)可以用于在firstname上的查詢,這樣,再創建一個單獨firstname的索引是不必要的。
分片設計規范
對于使用(yong)DDS分(fen)片集(ji)群,建議(yi)盡(jin)可能的使用(yong)分(fen)片集(ji)合以(yi)充分(fen)利用(yong)性(xing)能。
分片(pian)集(ji)合使用上建(jian)議如下:
- 對于大數據量(數據量過百萬),并有較高讀寫請求的業務場景,數據量隨著業務量增大而增大的,建議采用分片。
- 對于采用hash分片的集合,需要根據業務后面實際數據量大小,采用預分片,提前預置chunk數量,減少自動均衡和分裂對業務運行造成影響。
- 對于非空集合開啟分片,應將均衡器的開啟時間窗放在業務空閑時,避免分片間均衡數據與業務沖突影響性能。
- 需要基于分片鍵排序查詢且增加數據時可以分布均勻建議使用范圍分片,其他使用哈希分片。
- 合理設計shard key,防止出現大量的數據使用相同shard key,導致出現jumbo chunk。
- 使用分片集群,執行dropDatabase后,一定要執行flushRouterConfig命令。
- 業務的update請求需要注意與片鍵相適配。在使用分片表時,如果出現如下場景則update請求會報錯,并返回“An upsert on a sharded collection must contain the shard key and have the simple collation”。
? update請求的filter中未攜帶片鍵字段且選項multi:false
? set中未攜帶片鍵字段且選項upsert:true