摘要:中集合概念就是關(guān)系型數(shù)據(jù)庫中的表,本文討論的內(nèi)容主要集中在數(shù)據(jù)庫庫設(shè)計(jì)集合時(shí)關(guān)鍵原則和常見的設(shè)計(jì)誤區(qū)。第一條準(zhǔn)則拋棄關(guān)系型數(shù)據(jù)庫設(shè)計(jì)的范式約束,摒棄關(guān)聯(lián)查詢。的設(shè)計(jì)原則建議多種對象以關(guān)聯(lián)嵌套的方式組織在一個(gè)文檔中,方便應(yīng)用程序一次讀取。
MongoDb中集合概念就是關(guān)系型數(shù)據(jù)庫中的表,本文討論的內(nèi)容主要集中在MongoDb數(shù)據(jù)庫庫設(shè)計(jì)集合時(shí)關(guān)鍵原則和常見的設(shè)計(jì)誤區(qū)。本文約定讀者對MongoDb的基本概念有一定的了解。
第一條準(zhǔn)則
拋棄關(guān)系型數(shù)據(jù)庫設(shè)計(jì)的范式約束,摒棄關(guān)聯(lián)查詢。先考慮內(nèi)嵌形式,再考慮引用,視使用場景而定。內(nèi)嵌就是充分利用MongoDb的文檔特定,通過嵌套文檔的形式,將一組數(shù)據(jù)統(tǒng)一保存在一個(gè)文檔下。即一條記錄中,這樣在列表類的需求中,就不需要多表查詢,以及外鍵關(guān)聯(lián)。
MongoDb的設(shè)計(jì)原則建議多種對象以關(guān)聯(lián)嵌套的方式組織在一個(gè)文檔中,方便應(yīng)用程序一次讀取。
注意這里說的是建議,不是【必須】,因?yàn)橛刑囟▓鼍跋?,完全嵌套是不能滿足存儲(chǔ)需求的。
第二條準(zhǔn)則
文檔中不是每個(gè)字段都必須有值,也就是每行的字段可以不一致??刂谱侄伪M量不插入null值和空值,這樣可以節(jié)約內(nèi)存存儲(chǔ),MongoDb中的稀疏索引類型專門為【不是每個(gè)文檔都有的字段】而設(shè)計(jì)。
這種特性適合Iot數(shù)據(jù)采集類似的使用場景,每個(gè)文檔的字段數(shù)目不等,按需插入。
注意這種情況下,切忌文檔過寬。那如何避免這種情況,我的方法是預(yù)估最大字段數(shù),以20個(gè)字段為節(jié)點(diǎn),多于20則采用嵌套document的設(shè)計(jì)方式組織document。
第三條準(zhǔn)則
時(shí)間可以直接定義為格式化的時(shí)間,便于識(shí)別和查詢。不必特意存儲(chǔ)時(shí)間戳,這樣方便可視化的工具查詢核對。
"create_time" : ISODate("2017-05-10T15:39:58.000+08:00"),
當(dāng)然如果系統(tǒng)涉及到不同時(shí)區(qū)的國際化,最好把原始時(shí)間戳記錄下來,視情況是否記錄源時(shí)區(qū)。
第四條準(zhǔn)則
字段長度盡可能的短,不宜過長。也是考慮到內(nèi)存優(yōu)化。MongoDb存儲(chǔ)原則中會(huì)把key也存儲(chǔ)到內(nèi)存中,所以字段因盡可能的短,這樣勢必會(huì)減低字段的可讀性,是的,這里需要犧牲字段的可讀性。
新概念
分桶設(shè)計(jì)原則
我們知道許多傳感器數(shù)據(jù)都是時(shí)間序列數(shù)據(jù)。例如:風(fēng)傳感器,潮汐監(jiān)測以及位置追蹤等采集數(shù)據(jù)的無非這種類型: Timestamp,采集器名稱/ID,采集值。對于時(shí)序類型的數(shù)據(jù),我們可以采用一種叫做時(shí)間分桶的優(yōu)化策略。 所謂分桶優(yōu)化,就是與其對每一條數(shù)據(jù)創(chuàng)建一個(gè)文檔,我們可以把某一個(gè)時(shí)間段內(nèi)的測量數(shù)據(jù)聚合到一起放到一個(gè)文檔內(nèi),利用MongoDB提供的內(nèi)嵌式數(shù)組或子文檔特性
參考資料
http://www.mongoing.com/mongo...
http://www.tuicool.com/articl...
https://segmentfault.com/q/10...
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/19038.html
摘要:然后又介紹了基于的公號(hào)賬本應(yīng)用的數(shù)據(jù)庫設(shè)計(jì)。歡迎關(guān)注公號(hào)四月試用。 前兩篇 微信公號(hào)DIY 系列: 微信公號(hào)DIY:一小時(shí)搭建微信聊天機(jī)器人 微信公號(hào)DIY:訓(xùn)練聊天機(jī)器人&公號(hào)變身圖片上傳工具 介紹了如何使用搭建&訓(xùn)練聊天機(jī)器人以及讓公號(hào)支持圖片上傳到七牛,把公號(hào)變成一個(gè)七牛圖片上傳客戶端。這一篇將繼續(xù)開發(fā)公號(hào),讓公號(hào)變成一個(gè)更加實(shí)用的工具賬本(理財(cái)從記賬開始)。 代碼: 項(xiàng)目代...
摘要:然后又介紹了基于的公號(hào)賬本應(yīng)用的數(shù)據(jù)庫設(shè)計(jì)。歡迎關(guān)注公號(hào)四月試用。 前兩篇 微信公號(hào)DIY 系列: 微信公號(hào)DIY:一小時(shí)搭建微信聊天機(jī)器人 微信公號(hào)DIY:訓(xùn)練聊天機(jī)器人&公號(hào)變身圖片上傳工具 介紹了如何使用搭建&訓(xùn)練聊天機(jī)器人以及讓公號(hào)支持圖片上傳到七牛,把公號(hào)變成一個(gè)七牛圖片上傳客戶端。這一篇將繼續(xù)開發(fā)公號(hào),讓公號(hào)變成一個(gè)更加實(shí)用的工具賬本(理財(cái)從記賬開始)。 代碼: 項(xiàng)目代...
摘要:因?yàn)樗麄兛赡軙?huì)有許多顧客對相同的商品目錄進(jìn)行多次請求。然而,對于我們的參考架構(gòu),我們想完全在中實(shí)現(xiàn)一個(gè)多方面搜索。 本文源地址:http://www.mongoing.com/blog/retail-reference-architecture-part-1 如今,產(chǎn)品目錄數(shù)據(jù)管理對零售商而言是一個(gè)非常復(fù)雜的問題。經(jīng)過多年對多個(gè)龐大、由供應(yīng)商提供的系統(tǒng)的依賴之后,零售商目前正在重新考...
閱讀 3116·2021-10-12 10:20
閱讀 2835·2021-09-27 13:56
閱讀 806·2021-09-27 13:36
閱讀 1444·2021-09-26 09:46
閱讀 2433·2019-08-30 14:02
閱讀 2700·2019-08-28 18:14
閱讀 1280·2019-08-26 10:32
閱讀 1717·2019-08-23 18:25