<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      MongoDB數(shù)據(jù)庫的設(shè)計規(guī)范

      MongoDB是非關(guān)系型數(shù)據(jù)庫的典型代表,DB-Engines Ranking 數(shù)據(jù)顯示,近年來,MongoDB在NoSQL領(lǐng)域一直獨占鰲頭。MongoDB是為快速開發(fā)互聯(lián)網(wǎng)應(yīng)用 而設(shè)計的數(shù)據(jù)庫系統(tǒng),其數(shù)據(jù)模型和持久化策略就是為了構(gòu)建高讀/寫的性能,并且可以方面的彈性拓展。目前公司使用到的MongoDB的主要場景有 庫存中心(原料出入庫、商品出入庫、商品上下架變動、與其它系統(tǒng)平臺的交互報文等)、物流配送(訂單的物流信息、配送信息、地理位置信息等)、日志中心(系統(tǒng)應(yīng)用和APP的log信息、調(diào)用依賴信息等)、商品中心(商品數(shù)據(jù)、推送信息等)、運維管理平臺(收集記錄的變更信息等)等。隨著MongoDB的普及和使用量的快速增長,為了規(guī)范使用,便于管理和獲取更高的性能,整理此文檔。我們從 數(shù)據(jù)庫設(shè)計規(guī)范、集合設(shè)計規(guī)范、文檔設(shè)計規(guī)范、連接規(guī)范、操作規(guī)范等5個方面進(jìn)行闡述和要求。

      1. 數(shù)據(jù)庫設(shè)計規(guī)范

      (1)數(shù)據(jù)庫名約定為小寫。

      (2)數(shù)據(jù)庫名稱不能包含除’_’以外的特殊字符,例如:/ \ . “ $。

      (3)數(shù)據(jù)庫名稱最多為64個字符。

      (4)數(shù)據(jù)庫上線需經(jīng)過DBA評審。

      2. 集合設(shè)計規(guī)范

      (1)集合名稱約定為小寫。

      (2)集合名稱不能包含除’_’以外的特殊字符字符;集合名稱禁止以system.開頭。

      (3)集合名稱的最大長度為64個字符,包括前綴的【database.】內(nèi)容。

      (4)集合名稱的命名規(guī)則和MySQL數(shù)據(jù)庫表的命名規(guī)則相同。

      a)   同一模塊的集合盡可能使用相同的前綴名,集合名稱盡可能表達(dá)用途。

      b)   數(shù)據(jù)表 <模塊標(biāo)識>_<表標(biāo)識> 例如: order_header , order_detail

      c)   編碼表 base_<模塊標(biāo)識>_<表標(biāo)識>

      d)   日志表 log_<模塊標(biāo)識>_<表標(biāo)識>

      (5)固定集合可以用于記錄日志,其插入數(shù)據(jù)更快,可以實現(xiàn)在插入數(shù)據(jù)時,淘汰最早的數(shù)據(jù)。固定集合需要顯式創(chuàng)建,指定Size的大小,還能夠指定文檔的數(shù)量。集合不管先達(dá)到哪一個限制,之后插入的新文檔都會把最老的文檔移出。

      (6)索引命名:idx_<構(gòu)成索引的字段名>。如果字段名字過長,可采用字段縮寫。

      3. 文檔設(shè)計規(guī)范

      (1)Key的命名規(guī)范:不能以$開頭;不能包含.(點號)。

      (2)文檔中的_id鍵推薦使用默認(rèn)值,禁止向_id中保存自定義的值。

              解讀:MongoDB文檔中都會有一個“_id”鍵,默認(rèn)是個ObjectID對象(標(biāo)識符中包含時間戳、機器ID、進(jìn)程ID和計數(shù)器)。MongoDB在指定_id與不指定_id插入時速度相差很大,指定_id會減慢插入的速率。

      (3)推薦使用短字段名。

              解讀:與關(guān)系型數(shù)據(jù)庫不同,MongoDB集合中的每一個文檔都需要存儲字段名,長字段名會需要更多的存儲空間。

      (4)禁止在同一個集合字段中存儲多個數(shù)據(jù)類型的數(shù)據(jù)。

      (5)如若將日期類型選擇為string,不同的日期格式的文檔,不支持等值查詢,不支持范圍查詢。

              解讀:創(chuàng)建一個測試集合product,分別向集合插入Date:"20180425"和Date:"2018-04-25"兩筆數(shù)據(jù)。等值查詢、范圍查詢($gte, $lte)只能查到日期格式相同的數(shù)據(jù),都為一筆數(shù)據(jù)。

      (6)MongoDB大小寫敏感,如果字段無需大小寫敏感,為了提高查詢效率,應(yīng)盡量在統(tǒng)一了大小寫之后再插入到數(shù)據(jù)庫中。

      (7)MongoDB是文檔型數(shù)據(jù)庫,數(shù)據(jù)以BSON形式存儲在文檔中。MongoDB能夠支持最大16 MB的文檔大小。建議盡量不要存儲大型對象,將文檔控制在16 MB以內(nèi)。

      (8)通過$size查詢數(shù)組大小,但是$size運算符不使用索引和限制準(zhǔn)確匹配(不能指定$Sized 范圍)。因此,如果需要基于數(shù)組的大小執(zhí)行查詢,可以在文檔設(shè)計中增加size屬性。

              解讀:例如在商品評價中,其他人可以對評價進(jìn)行投票。為了阻止用戶多次投票和對有幫助的評論進(jìn)行排序,所以,評價文檔設(shè)計是:在一個數(shù)組字段(voter_ids)保存了所有評論用戶的ID,而數(shù)組大小緩存在helpful_votes字段里。

      (9)分片鍵必須有索引,分片鍵大小限制為512byte,一旦集合已經(jīng)分片,不可以直接修改分片鍵。不接受向已進(jìn)行分片的collection上插入無分片鍵的文檔,也不支持空值插入。

      (10)片鍵的設(shè)計原則:

                 a)   所有的插入、更新、刪除將會均勻發(fā)送到集群的所有分片中。

                 b)   所有的查詢將會在集群中的所有分片中均勻地分發(fā)。

                 c)   所有的更新或者刪除操作將會只面向相關(guān)的分片,不會發(fā)送到一個沒有存儲被修改數(shù)據(jù)的分片上。

                 d)   一個查詢將不會被發(fā)送到?jīng)]有存儲被查詢數(shù)據(jù)的分片上。

      4. 連接規(guī)范

      (1)正確連接副本集,副本集提供了數(shù)據(jù)的保護、高可用和災(zāi)難恢復(fù)的機制。如果主節(jié)點宕機,其中一個從節(jié)點會自動提升為從節(jié)點。

      (2)合理控制連接池的大小,限制連接數(shù)資源,可通過Connection String URL中的maxPoolSize 參數(shù)來配置連接池大小。

               解讀:Mongod 的服務(wù)模型是每個網(wǎng)絡(luò)連接由一個單獨的線程來處理,每個線程配置了1MB 的棧空間,當(dāng)網(wǎng)絡(luò)連接數(shù)太多時,過多的線程會導(dǎo)致上下文切換開銷變大,同時內(nèi)存開銷也會上漲。

      (3)復(fù)制集讀選項

               默認(rèn)情況下,復(fù)制集的所有讀請求都發(fā)到Primary,Driver可通過設(shè)置的Read Preference 來將讀請求路由到其他的節(jié)點。

      a)   Primary:默認(rèn)規(guī)則,所有讀請求發(fā)到Primary。

      b)   PrimaryPreferred: Primary優(yōu)先,如果Primary不可達(dá),請求Secondary。

      c)   Secondary:所有的讀請求都發(fā)到Secondary。

      d)   SecondaryPreferred:Secondary優(yōu)先,當(dāng)所有的Secondary不可達(dá)時,請求Primary。

      e)   Nearest:讀請求發(fā)送到最近的可達(dá)節(jié)點上(通過ping探測得出最近的節(jié)點)。 

      5. 操作規(guī)范

      (1)MongoDB數(shù)據(jù)庫更新文檔有兩種實現(xiàn)方式—文檔替換和目標(biāo)字段更新。既可以完整替換現(xiàn)有的文檔,也可以使用更新操作符來修改某個字段。

              解讀:使用操作符,例如$set操作符和$push操作符,無論原始的大小,可以更新文檔里的指定字段。頻繁文檔更新的場景下,使用目標(biāo)更新可以在序列化和傳輸數(shù)據(jù)上花費更少的時間,獲得更好的性能。

      (2)多文檔更新,在默認(rèn)情況下,只會更新匹配查詢器的第一個文檔。要更新所有的匹配文檔,需要顯式指定多文檔更新模式--添加參數(shù)multi:true。

      (3)在文檔級別更新是原子性的,這意味著一條更新10個文檔的語句可能在更新3個文檔后由于某些原因失敗。應(yīng)用程序必須根據(jù)自己的策略來處理這些失敗。

      (4)update結(jié)合upsert可以用來處理,當(dāng)文檔存在時更新,文檔不存在時插入。如果查詢選擇器匹配,更新就正常執(zhí)行;如果沒有匹配的文檔,就會插入新的文檔。新文檔的字段是查詢選擇器和目標(biāo)更新文檔的邏輯合并。

      (5)復(fù)制集的數(shù)據(jù)安全及寫策略,Write Concern 用于控制寫入安全的級別。

              解答:Write Concern 是一個性能和數(shù)據(jù)一致性的權(quán)衡,應(yīng)根據(jù)業(yè)務(wù)場景進(jìn)行設(shè)定。對于強一致性場景,建議w>1或者等于majority。

      (6)聚合框架是MongoDB的高級查詢語言,它允許通過轉(zhuǎn)換和合并由多個文檔中的數(shù)據(jù)來生成新的單個文檔里不存在的文檔信息??梢园袽ongoDB的聚合框架等價于SQL的Group By 語句。

      (7)在聚合框架中,$project操作符允許過濾傳遞給管道下一個階段的字段。限制每個文檔傳遞的大小,可以改善性能,尤其是在處理大文檔且只需要每個文檔一部分?jǐn)?shù)據(jù)的場景下。

       

      本文版權(quán)歸作者所有,未經(jīng)作者同意不得轉(zhuǎn)載,謝謝配合!!!

       本文版權(quán)歸作者所有,未經(jīng)作者同意不得轉(zhuǎn)載,謝謝配合?。?!

      posted @ 2018-10-31 17:11  東山絮柳仔  閱讀(9147)  評論(1)    收藏  舉報
      主站蜘蛛池模板: 深夜释放自己在线观看| 国产一区二区丰满熟女人妻| 久久精品免视看成人国产| 欧美成人aaa片一区国产精品| 祥云县| 青草热在线观看精品视频| 国产极品视频一区二区三区 | 无码精品一区二区免费AV| 少妇被无套内谢免费看| 国产v亚洲v天堂无码久久久| 最新的国产成人精品2022| av天堂午夜精品一区| 亚洲免费成人av一区| 国产99视频精品免费专区| 亚洲av激情五月性综合| 亚洲中文字幕精品无人区| 国产成人午夜福利在线观看| 久久香蕉欧美精品| jizz视频在线观看| 国产日韩av一区二区在线| 日本精品不卡一二三区| 国产成人无码精品亚洲| 偷窥少妇久久久久久久久| 开心五月深深爱天天天操| 亚洲中文字幕人妻系列| 亚洲国产精品日韩av专区| 久青草视频在线免费观看| 精品国产欧美一区二区三区在线| 熟女一区二区中文在线| 色悠悠国产精品免费在线| 国产亚洲制服免视频| 中文字幕国产精品综合| 天天躁夜夜躁天干天干2020| 伦伦影院精品一区| 日韩有码国产精品一区| 成人福利一区二区视频在线| 奇米777四色成人影视| 志丹县| 精品视频一区二区福利午夜| 2021国产成人精品久久| 精品无码久久久久久久动漫|