MongoDB數(shù)據(jù)庫(kù)的命名和設(shè)計(jì)規(guī)范有哪些-創(chuàng)新互聯(lián)

今天就跟大家聊聊有關(guān)MongoDB 數(shù)據(jù)庫(kù)的命名和設(shè)計(jì)規(guī)范有哪些,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結(jié)了以下內(nèi)容,希望大家根據(jù)這篇文章可以有所收獲。

成都創(chuàng)新互聯(lián)主要從事網(wǎng)頁(yè)設(shè)計(jì)、PC網(wǎng)站建設(shè)(電腦版網(wǎng)站建設(shè))、wap網(wǎng)站建設(shè)(手機(jī)版網(wǎng)站建設(shè))、成都響應(yīng)式網(wǎng)站建設(shè)公司、程序開(kāi)發(fā)、網(wǎng)站優(yōu)化、微網(wǎng)站、小程序開(kāi)發(fā)等,憑借多年來(lái)在互聯(lián)網(wǎng)的打拼,我們?cè)诨ヂ?lián)網(wǎng)網(wǎng)站建設(shè)行業(yè)積累了豐富的網(wǎng)站建設(shè)、成都做網(wǎng)站、網(wǎng)站設(shè)計(jì)、網(wǎng)絡(luò)營(yíng)銷(xiāo)經(jīng)驗(yàn),集策劃、開(kāi)發(fā)、設(shè)計(jì)、營(yíng)銷(xiāo)、管理等多方位專(zhuān)業(yè)化運(yùn)作于一體。

文檔

設(shè)計(jì)約束

UTF-8 字符

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

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

區(qū)分大小寫(xiě)

鍵不能重復(fù)

鍵/值對(duì)有序

實(shí)踐約束

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

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

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

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

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

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

【建議】不要存放太長(zhǎng)的字符串

注意:MongoDB 索引僅支持 1KB 以?xún)?nèi)的字段

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

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

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

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

【建議】不要存放太長(zhǎng)的字符串

注意:MongoDB 索引僅支持 1KB 以?xún)?nèi)的字段

集合設(shè)計(jì)約束

UTF-8 字符

不能是空字符串(“”)

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

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

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

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

實(shí)踐約束

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

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

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

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

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

數(shù)據(jù)庫(kù)設(shè)計(jì)約束

UTF-8 字符

不能是空字符串(“”)

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

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

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

不超過(guò)64字節(jié)

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

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

實(shí)踐約束

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

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

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

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

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

索引

【強(qiáng)制】索引名稱(chēng)長(zhǎng)度不超過(guò)128字節(jié)

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

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

查詢(xún)

【建議】先做等值查詢(xún),再做排序,再做范圍查詢(xún)

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

注意:

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

$exist:因?yàn)樗缮⒌奈臋n結(jié)構(gòu)導(dǎo)致查詢(xún)必須遍歷每一個(gè)文檔

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

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

$nin:全表掃描

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

命名空間

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

cms.blog.posts。實(shí)際使用中命名空間長(zhǎng)度不得超過(guò)100字節(jié)。

第二部分,設(shè)計(jì)規(guī)范。數(shù)據(jù)庫(kù)設(shè)計(jì)規(guī)范

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

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

數(shù)據(jù)庫(kù)名稱(chēng)最多為64個(gè)字符。

數(shù)據(jù)庫(kù)上線需經(jīng)過(guò)DBA評(píng)審。

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

集合名稱(chēng)約定為小寫(xiě)。

集合名稱(chēng)不能包含除‘'以外的特殊字符字符;集合名稱(chēng)禁止以system.開(kāi)頭。

集合名稱(chēng)的大長(zhǎng)度為64個(gè)字符,包括前綴的【database.】?jī)?nèi)容。

集合名稱(chēng)的命名規(guī)則和MySQL數(shù)據(jù)庫(kù)表的命名規(guī)則相同。 a) 同一模塊的集合盡可能使用相同的前綴名,集合名稱(chēng)盡可能表達(dá)用途。 b) 數(shù)據(jù)表 <模塊標(biāo)識(shí)><表標(biāo)識(shí)> 例如:order_header , order_detail

c) 編碼表 base_<模塊標(biāo)識(shí)><表標(biāo)識(shí)> d) 日志表 log<模塊標(biāo)識(shí)><表標(biāo)識(shí)>

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

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

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

Key的命名規(guī)范:不能以$開(kāi)頭;不能包含.(點(diǎn)號(hào))。

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

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

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

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

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

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

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

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

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

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

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

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

d) 一個(gè)查詢(xún)將不會(huì)被發(fā)送到?jīng)]有存儲(chǔ)被查詢(xún)數(shù)據(jù)的分片上。

連接規(guī)范

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

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

復(fù)制集讀選項(xiàng)。默認(rèn)情況下,復(fù)制集的所有讀請(qǐng)求都發(fā)到Primary,Driver可通過(guò)設(shè)置的Read Preference 來(lái)將讀請(qǐng)求路由到其他的節(jié)點(diǎn)。

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

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

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

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

e) Nearest:讀請(qǐng)求發(fā)送到最近的可達(dá)節(jié)點(diǎn)上(通過(guò)ping探測(cè)得出最近的節(jié)點(diǎn))。

操作規(guī)范

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

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

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

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

復(fù)制集的數(shù)據(jù)安全及寫(xiě)策略,Write Concern 用于控制寫(xiě)入安全的級(jí)別。Write Concern 是一個(gè)性能和數(shù)據(jù)一致性的權(quán)衡,應(yīng)根據(jù)業(yè)務(wù)場(chǎng)景進(jìn)行設(shè)定。對(duì)于強(qiáng)一致性場(chǎng)景,建議w>1或者等于majority。

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

看完上述內(nèi)容,你們對(duì)MongoDB 數(shù)據(jù)庫(kù)的命名和設(shè)計(jì)規(guī)范有哪些有進(jìn)一步的了解嗎?如果還想了解更多知識(shí)或者相關(guān)內(nèi)容,請(qǐng)關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝大家的支持。

網(wǎng)頁(yè)名稱(chēng):MongoDB數(shù)據(jù)庫(kù)的命名和設(shè)計(jì)規(guī)范有哪些-創(chuàng)新互聯(lián)
網(wǎng)頁(yè)地址:http://www.muchs.cn/article26/ipijg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供品牌網(wǎng)站建設(shè)虛擬主機(jī)、關(guān)鍵詞優(yōu)化、軟件開(kāi)發(fā)、企業(yè)網(wǎng)站制作外貿(mào)網(wǎng)站建設(shè)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

外貿(mào)網(wǎng)站制作