MongoDB Sharding及數(shù)據(jù)庫(kù)設(shè)計(jì)
2024-07-21 02:53:12
供稿:網(wǎng)友
1、MongoDB Sharding基本共識(shí)隨機(jī)I/O轉(zhuǎn)為順序I/O;步驟越少,查詢?cè)胶?jiǎn)單,性能越高。多做不如少做,少做不如不做;大數(shù)據(jù)查詢,分布式并行查詢能力高;三個(gè)注意事項(xiàng)插入文檔必須帶上sharding key不接受修改片鍵值(讀取、刪除、插入新文檔)如果文檔中包含不同類型的值,排序規(guī)則,按照類型排序,同類型與大家期望相同;ChunkSize選擇默認(rèn)64M;與線上實(shí)際引用有關(guān);Chunk的分裂與遷移非常消耗IO資源;分裂時(shí)機(jī)(插入更新、更新文檔時(shí),讀數(shù)據(jù)不會(huì)產(chǎn)生分裂)ChunkSize(數(shù)據(jù)預(yù)填充、浪費(fèi)空間但是只在最初進(jìn)行分裂,獲取平滑的查改性能);小的遷移速度塊、分布均勻,但是數(shù)據(jù)均衡比較頻繁、塊分裂更頻繁、路由節(jié)點(diǎn)消耗更多資源定位;優(yōu)點(diǎn):塊分裂小、路由定位塊、避免虛假遷移;缺點(diǎn):遷移時(shí)資源消耗比較大,抖動(dòng),數(shù)據(jù)分布不均勻;通常100-200M,不同系統(tǒng)磁盤介質(zhì)不同(前十幾塊為64M,數(shù)據(jù)量大時(shí)將會(huì)變成設(shè)置);Read10;centos,xfsMonogoDB支持修改ChunkSize;請(qǐng)測(cè)試確認(rèn)后再進(jìn)行調(diào)整;線上調(diào)整ChunkSize可能會(huì)導(dǎo)致災(zāi)難性I/O;調(diào)小可能會(huì)引起過(guò)多分裂;調(diào)大時(shí)可能在達(dá)到閾值才進(jìn)行調(diào)整;2、MongoDB Sharding存在問(wèn)題及建議;重要兩點(diǎn)優(yōu)化均衡器時(shí)間mongodb很lazy,但是腦殘;(均衡器執(zhí)行器的執(zhí)行過(guò)程可能很長(zhǎng),導(dǎo)致影響應(yīng)用)Balacer設(shè)置(問(wèn)題)count值布準(zhǔn)確;唯一值不唯一update更新的記錄數(shù)出現(xiàn)問(wèn)題;0~7點(diǎn)進(jìn)行均衡,mongos進(jìn)行設(shè)置,使用config表進(jìn)行設(shè)置,$set,$unset;Sharding key選擇指定sharding key;chunk分布不均衡時(shí)導(dǎo)致chunk遷移;集群角色Mongos數(shù)據(jù)讀寫;config保存映射:key-》chunk,chunk-》node;路由節(jié)點(diǎn)通過(guò)config server獲取數(shù)據(jù);路由節(jié)點(diǎn)判定是否超過(guò)具體大小;分片key路由到update進(jìn)行操作;按分片查詢進(jìn)行具體操作;不同分片會(huì)分別進(jìn)行操作,然后進(jìn)行結(jié)果聚合;Sharding key選擇遞增sharding key;數(shù)據(jù)文件挪動(dòng)少(優(yōu)勢(shì));數(shù)據(jù)文件遞增所以insert都會(huì)會(huì)放在最后一個(gè)分片,成為熱點(diǎn);隨著最后的擴(kuò)大導(dǎo)致分裂;隨機(jī)sharding key;數(shù)據(jù)分布均勻(優(yōu)勢(shì));大量的隨機(jī)IO,磁盤壓力比較大;混合型sharing key,大范圍遞增key+隨機(jī)分布的key;大方向但調(diào)增不斷寫入新的文件,盡量不要讓寫放在多個(gè)節(jié)點(diǎn)上;小方向隨機(jī)分布保證數(shù)據(jù)均勻分布在分片上分?jǐn)倢憠毫Γ籗harding key總結(jié)單一Sharding key導(dǎo)致分布不均勻,無(wú)法充分利用分片性能;使用復(fù)合Sharding key,符合Sharding key不可更改,并且在MaPReduce性能消耗;count在chunk移動(dòng)時(shí)計(jì)數(shù)偏大,務(wù)必減少chunk移動(dòng);Balance穩(wěn)定性不夠智能、穩(wěn)定;Auto-Sharding key并不是很靠譜;3、MongoDB庫(kù)設(shè)計(jì)原則及實(shí)踐線上環(huán)境禁用Auto-Sharding;開(kāi)啟庫(kù)級(jí)分片;特定庫(kù)制定到固定分片上;Collection級(jí)別手動(dòng)Sharding;MongoDB數(shù)據(jù)模型選擇CAP原則CP,w=Replica Set,開(kāi)啟SlaveOKw=1,slaveOk開(kāi)啟;w=1,不開(kāi)啟slaveOK;庫(kù)設(shè)計(jì)判斷業(yè)務(wù)增長(zhǎng)速度,什么量級(jí),之后是什么增長(zhǎng)速度;sharding分片數(shù);memory>index+hot data;索引和熱門數(shù)據(jù)要大于內(nèi)存;local庫(kù)存放oplog,oplog需要消耗內(nèi)存;高插入高更新,并帶有延時(shí)庫(kù)需要設(shè)置較大oplog如果沒(méi)有延時(shí)可選用小一些oplog