麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 數(shù)據(jù)庫 > MongoDB > 正文

MongoDB 數(shù)據(jù)庫的命名、設(shè)計規(guī)范詳解

2020-10-29 18:40:47
字體:
供稿:網(wǎng)友

MongoDB 數(shù)據(jù)庫的命名和設(shè)計也有一套規(guī)范。只不過,由于用的人不多,目前在業(yè)界還沒有形成權(quán)威的共識,今天根據(jù)我個人平時的一些經(jīng)驗,總結(jié)了一些規(guī)范

第一部分,我們先說命名規(guī)范。

文檔

設(shè)計約束

UTF-8 字符

不能包含 /0 字符(空字符),這個字符標(biāo)識建的結(jié)尾

. 和 $ 有特殊含義,需要避免

區(qū)分大小寫

鍵不能重復(fù)

鍵/值對有序

實踐約束

【強(qiáng)制】文檔中的key禁止使用_以外的特殊字符

【強(qiáng)制】key全部小寫,多個單詞可以下劃線分割

【強(qiáng)制】禁止使用數(shù)字打頭的key

【強(qiáng)制】禁止自定義_id(_id一般自增,使用無序id極有可能降低寫入性能)

【建議】相似類型文檔放在一個集合中,能大幅提高索引利用率

【建議】若業(yè)務(wù)上對于存放數(shù)據(jù)大小寫不敏感,則使用全部大寫/小寫存放(或者增加一個統(tǒng)一了大小寫寫的輔助字段)。 使用忽略大小寫的查詢極其耗費性能

【建議】不要存放太長的字符串

注意:MongoDB 索引僅支持 1KB 以內(nèi)的字段

【強(qiáng)制】禁止使用數(shù)字打頭的key

【強(qiáng)制】禁止自定義_id(_id一般自增,使用無序id極有可能降低寫入性能)

【建議】相似類型文檔放在一個集合中,能大幅提高索引利用率

【建議】若業(yè)務(wù)上對于存放數(shù)據(jù)大小寫不敏感,則使用全部大寫/小寫存放(或者增加一個統(tǒng)一了大小寫寫的輔助字段)。 使用忽略大小寫的查詢極其耗費性能

【建議】不要存放太長的字符串

注意:MongoDB 索引僅支持 1KB 以內(nèi)的字段

集合

設(shè)計約束

UTF-8 字符

不能是空字符串(“”)

不能包含 /0 字符(空字符),這個字符標(biāo)識集合名的結(jié)束

不能以 “system.” 開頭,這是為系統(tǒng)保留的前綴

不在集合中包含字符 “$”

使用 “.” 來分隔不同命名空間的子集合,如一個博客可能包含兩個子集合,blog.posts和blog.authors,而blog本身可以不存在

實踐約束

【強(qiáng)制】禁止使用_以外的特殊字符

【強(qiáng)制】集合名稱不超過64字符

【強(qiáng)制】集合名稱全部小寫

【強(qiáng)制】禁止使用數(shù)字打頭的集合名,禁止使用system打頭的集合名(system為系統(tǒng)集合前綴)

【建議】為了避免庫級鎖帶來的問題,應(yīng)盡量對寫入較大的集合使用“單庫單集合”的結(jié)構(gòu),所以對于新增業(yè)務(wù)應(yīng)盡量創(chuàng)建新庫,而不是在現(xiàn)有庫中創(chuàng)建新集合

數(shù)據(jù)庫

設(shè)計約束

UTF-8 字符

不能是空字符串(“”)

基本上只能使用 ASCII 中的字母和數(shù)字。

不能含有 /、/、.、”、*、<、>、:、|、?、$、(空格)、/0(空字符)

全部使用小寫。(支持大寫,不建議使用)

不超過64字節(jié)

存在保留數(shù)據(jù)庫如:admin、local、config

注意:數(shù)據(jù)庫名稱限制主要是由于數(shù)據(jù)庫最終會變成文件系統(tǒng)里的文件,而數(shù)據(jù)庫名就是相應(yīng)的文件名,因此才有很多約束

實踐約束

【強(qiáng)制】數(shù)據(jù)庫名稱全部小寫

【強(qiáng)制】數(shù)據(jù)庫名稱不超過64字符

【強(qiáng)制】禁止使用_以外的特殊字符

【強(qiáng)制】禁止使用數(shù)字打頭的數(shù)據(jù)庫名

【強(qiáng)制】禁止與保留的數(shù)據(jù)庫重名,如: admin,local,config等

索引

【強(qiáng)制】索引名稱長度不超過128字節(jié)

【強(qiáng)制】禁止在數(shù)組字段上創(chuàng)建索引

【強(qiáng)制】創(chuàng)建組合索引時,盡量將數(shù)據(jù)基數(shù)大(唯一值多的數(shù)據(jù))的字段放在組合索引前面

查詢

【建議】先做等值查詢,再做排序,再做范圍查詢

【建議】查詢中的某些 $ 操作符可能會導(dǎo)致性能低下,盡量避免

注意:

ne,ne, ne,ne,not,exists,exists, exists,exists,nin,$or,盡量在業(yè)務(wù)中不要使用

$exist:因為松散的文檔結(jié)構(gòu)導(dǎo)致查詢必須遍歷每一個文檔

$ne:如果當(dāng)取反的值為大多數(shù),則會掃描整個索引

$not:可能會導(dǎo)致查詢優(yōu)化器不知道應(yīng)當(dāng)使用哪個索引,所以會經(jīng)常退化為全表掃描

$nin:全表掃描

$or:有多少個條件就會查詢多少次,最后合并結(jié)果集,所以盡可能的使用 $in

命名空間

將數(shù)據(jù)庫名添加到集合前,得到集合的完全限定名,稱為命名空間(namespace),如cms數(shù)據(jù)庫的blog.posts集合,命名空間即為:

cms.blog.posts。實際使用中命名空間長度不得超過100字節(jié)。

第二部分,設(shè)計規(guī)范。

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

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

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

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

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

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

集合名稱約定為小寫。

集合名稱不能包含除‘'以外的特殊字符字符;集合名稱禁止以system.開頭。

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

集合名稱的命名規(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)識>

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

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

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

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

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

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

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

如若將日期類型選擇為string,不同的日期格式的文檔,不支持等值查詢,不支持范圍查詢。創(chuàng)建一個測試集合product,分別向集合插入Date:”20180425″和Date:”2018-04-25″兩筆數(shù)據(jù)。等值查詢、范圍查詢($gte, $lte)只能查到日期格式相同的數(shù)據(jù),都為一筆數(shù)據(jù)。

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

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

通過$size查詢數(shù)組大小,但是$size運算符不使用索引和限制準(zhǔn)確匹配(不能指定$Sized 范圍)。因此,如果需要基于數(shù)組的大小執(zhí)行查詢,可以在文檔設(shè)計中增加size屬性。例如在商品評價中,其他人可以對評價進(jìn)行投票。為了阻止用戶多次投票和對有幫助的評論進(jìn)行排序,所以,評價文檔設(shè)計是:在一個數(shù)組字段(voter_ids)保存了所有評論用戶的ID,而數(shù)組大小緩存在helpful_votes字段里。

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

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

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

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

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

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

連接規(guī)范

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

合理控制連接池的大小,限制連接數(shù)資源,可通過Connection String URL中的maxPoolSize 參數(shù)來配置連接池大小。Mongod 的服務(wù)模型是每個網(wǎng)絡(luò)連接由一個單獨的線程來處理,每個線程配置了1MB 的棧空間,當(dāng)網(wǎng)絡(luò)連接數(shù)太多時,過多的線程會導(dǎo)致上下文切換開銷變大,同時內(nèi)存開銷也會上漲。

復(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é)點)。

操作規(guī)范

MongoDB數(shù)據(jù)庫更新文檔有兩種實現(xiàn)方式―文檔替換和目標(biāo)字段更新。既可以完整替換現(xiàn)有的文檔,也可以使用更新操作符來修改某個字段。使用操作符,例如$set操作符和$push操作符,無論原始的大小,可以更新文檔里的指定字段。頻繁文檔更新的場景下,使用目標(biāo)更新可以在序列化和傳輸數(shù)據(jù)上花費更少的時間,獲得更好的性能。

多文檔更新,在默認(rèn)情況下,只會更新匹配查詢器的第一個文檔。要更新所有的匹配文檔,需要顯式指定多文檔更新模式

主站蜘蛛池模板: 国产亚洲精品久久久久久网站 | 亚洲精品久久久久www | 久久色网站 | 国产精品久久久久网站 | 欧美成人一区免费视频 | 一本一道久久久a久久久精品91 | 久久中文免费 | 99ri在线 | av在线一区二区三区四区 | 国产papa| 欧美黄 片免费观看 | 色柚视频网站ww色 | 久久中文免费 | 成人一级免费 | 欧美性受ⅹ╳╳╳黑人a性爽 | 国产流白浆高潮在线观看 | 国产精品一区视频 | 国产三级精品最新在线 | 久久久久久久爱 | 精品一区二区三区免费看 | 亚洲视频在线观看免费视频 | 黄色片免费看网站 | 久久精品亚洲一区二区三区观看模式 | 国产精品99久久久久久久女警 | 羞羞视频在线免费 | 手机av免费电影 | 亚洲成人免费网站 | 黄网站色成年大片免费高 | 久草在线视频新 | 日本在线观看高清完整版 | 成人毛片100免费观看 | 毛片在线免费视频 | 韩国一级免费视频 | 毛片大全| 久草视频福利在线观看 | 在线成人一区二区 | 成人一级视频在线观看 | www.17c亚洲蜜桃 | 视频一区 日韩 | a黄网站 | 久久久精品精品 |