最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

提升MongoDB性能的方法

 更新時(shí)間:2018年09月29日 08:36:03   投稿:laozhang  
在本篇文章中我們給大家總結(jié)了提升MongoDB性能的方法以及相關(guān)知識(shí)點(diǎn)內(nèi)容,有需要的朋友們可以學(xué)習(xí)下。

MongoDB 是高性能數(shù)據(jù),但是在使用的過(guò)程中,大家偶爾還會(huì)碰到一些性能問(wèn)題。MongoDB和其它關(guān)系型數(shù)據(jù)庫(kù)相比,例如 SQL Server 、MySQL 、Oracle 相比來(lái)說(shuō),相對(duì)較新,很多人對(duì)其不是很熟悉,所以很多開(kāi)發(fā)、DBA往往是注重功能的實(shí)現(xiàn),而忽視了性能的要求。其實(shí),MongoDB和 SQL Server 、MySQL 、Oracle 一樣,一個(gè) 數(shù)據(jù)庫(kù)對(duì)象的設(shè)計(jì)調(diào)整、索引的創(chuàng)建、語(yǔ)句的優(yōu)化,都會(huì)對(duì)性能產(chǎn)生巨大的影響。

為了充分挖掘MongoDB性能,現(xiàn)簡(jiǎn)單總計(jì)了以下18條,歡迎大家一起來(lái)持續(xù)總結(jié)完善。

(1)文檔中的_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ì)減慢插入的速率。

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

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

(3)MongoDB索引可以提高文檔的查詢(xún)、更新、刪除、排序操作,所以結(jié)合業(yè)務(wù)需求,適當(dāng)創(chuàng)建索引。

(4)每個(gè)索引都會(huì)占用一些空間,并且導(dǎo)致插入操作的資源消耗,因此,建議每個(gè)集合的索引數(shù)盡量控制在5個(gè)以?xún)?nèi)。

(5)對(duì)于包含多個(gè)鍵的查詢(xún),創(chuàng)建包含這些鍵的復(fù)合索引是個(gè)不錯(cuò)的解決方案。復(fù)合索引的鍵值順序很重要,理解索引最左前綴原則。

解讀:例如在test集合上創(chuàng)建組合索引{a:1,b:1,c:1}。執(zhí)行以下7個(gè)查詢(xún)語(yǔ)句:

db.test.find({a:”hello”}) // 1
db.test.find({b:”sogo”, a:”hello”}) // 2
db.test.find({a:”hello”,b:”sogo”, c:”666”}) // 3
db.test.find({c:”666”, a:”hello”}) // 4
db.test.find({b:”sogo”, c:”666”}) // 5
db.test.find({b:”sogo” }) // 6
db.test.find({c:”666”}) // 7

以上查詢(xún)語(yǔ)句可能走索引的是1、2、3、4

查詢(xún)應(yīng)包含最左索引字段,以索引創(chuàng)建順序?yàn)闇?zhǔn),與查詢(xún)字段順序無(wú)關(guān)。

最少索引覆蓋最多查詢(xún)。

(6)TTL 索引(time-to-live index,具有生命周期的索引),使用TTL索引可以將超時(shí)時(shí)間的文檔老化,一個(gè)文檔到達(dá)老化的程度之后就會(huì)被刪除。

解讀:創(chuàng)建TTL的索引必須是日期類(lèi)型。TTL索引是一種單字段索引,不能是復(fù)合索引。TTL刪除文檔后臺(tái)線程每60s移除失效文檔。不支持定長(zhǎng)集合。

(7)需要在集合中某字段創(chuàng)建索引,但集合中大量的文檔不包含此鍵值時(shí),建議創(chuàng)建稀疏索引。

解讀:索引默認(rèn)是密集型的,這意味著,即使文檔的索引字段缺失,在索引中也存在著一個(gè)對(duì)應(yīng)關(guān)系。在稀疏索引中,只有包含了索引鍵值的文檔才會(huì)出現(xiàn)。

(8)創(chuàng)建文本索引時(shí)字段指定text,而不是1或者-1。每個(gè)集合只有一個(gè)文本索引,但是它可以為任意多個(gè)字段建立索引。

解讀:文本搜索速度快很多,推薦使用文本索引替代對(duì)集合文檔的多字段的低效查詢(xún)。

(9)使用findOne在數(shù)據(jù)庫(kù)中查詢(xún)匹配多個(gè)項(xiàng)目,它就會(huì)在自然排序文件集合中返回第一個(gè)項(xiàng)目。如果需要返回多個(gè)文檔,則使用find方法。

(10)如果查詢(xún)無(wú)需返回整個(gè)文檔或只是用來(lái)判斷鍵值是否存在,可以通過(guò)投影(映射)來(lái)限制返回字段,減少網(wǎng)絡(luò)流量和客戶(hù)端的內(nèi)存使用。

解讀:既可以通過(guò)設(shè)置{key:1}來(lái)顯式指定返回的字段,也可以設(shè)置{key:0}指定需要排除的字段。

(11)除了前綴樣式查詢(xún),正則表達(dá)式查詢(xún)不能使用索引,執(zhí)行的時(shí)間比大多數(shù)選擇器更長(zhǎng),應(yīng)節(jié)制性地使用它們。

(12)在聚合運(yùn)算中,$要在match要在$group前面,通過(guò)$前置,可以減少match前置,可以減少$ group 操作符要處理的文檔數(shù)量。

(13)通過(guò)操作符對(duì)文檔進(jìn)行修改,通常可以獲得更好的性能,因?yàn)椋恍枰捣?wù)器來(lái)獲取并修改文檔數(shù)據(jù),可以在序列化和傳輸數(shù)據(jù)上花費(fèi)更少的時(shí)間。

(14)批量插入(batchInsert)可以減少數(shù)據(jù)向服務(wù)器的提交次數(shù),提高性能。但是批量提交的BSON Size不超過(guò)48MB。

(15)禁止一次取出太多的數(shù)據(jù)進(jìn)行排序,MongoDB目前支持對(duì)32M以?xún)?nèi)的結(jié)果集進(jìn)行排序。如果需要排序,請(qǐng)盡量限制結(jié)果集中的數(shù)據(jù)量。

(16)查詢(xún)中的某些$操作符可能會(huì)導(dǎo)致性能低下,如操作符可能會(huì)導(dǎo)致性能低下,如$ne,$,not,$exists,$nin,$or盡量在業(yè)務(wù)中不要使用。

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

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

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

d) $nin:全表掃描;

e) \$有多個(gè)條件就會(huì)查詢(xún)多少次,最后合并結(jié)果集,應(yīng)該考慮裝換為or:有多個(gè)條件就會(huì)查詢(xún)多少次,最后合并結(jié)果集,應(yīng)該考慮裝換為$in。

(17)固定集合可以用于記錄日志,其插入數(shù)據(jù)更快,可以實(shí)現(xiàn)在插入數(shù)據(jù)時(shí),淘汰最早的數(shù)據(jù)。需求分析和設(shè)計(jì)時(shí),可考慮此特性,即提高了性能,有省去了刪除動(dòng)作。

解讀:固定集合需要顯式創(chuàng)建,指定Size的大小,還能夠指定文檔的數(shù)量。集合不管先達(dá)到哪一個(gè)限制,之后插入的新文檔都會(huì)把最老的文檔移出。

(18)集合中文檔的數(shù)據(jù)量會(huì)影響查詢(xún)性能,為保持適量,需要定期歸檔。

Mongodb性能優(yōu)化

數(shù)據(jù)庫(kù)性能對(duì)軟件整體性能有著至關(guān)重要的影響,對(duì)于Mongodb數(shù)據(jù)庫(kù)常用的性能優(yōu)化方法主要有:

1、范式化與反范式化;

2、填充因子的使用;

3、索引的使用;

以上就是本次給大家整理的關(guān)于提升MongoDB性能的方法的全部?jī)?nèi)容,感謝大家對(duì)腳本之家的支持。

相關(guān)文章

  • 實(shí)戰(zhàn)MySQL升級(jí)的最佳方法

    實(shí)戰(zhàn)MySQL升級(jí)的最佳方法

    這篇文章給大家從理論到實(shí)戰(zhàn)詳細(xì)分享了MySQL升級(jí)的最佳方法,有需要的朋友跟著學(xué)習(xí)操作下吧。
    2017-12-12
  • MySQL監(jiān)控Innodb信息工作流程

    MySQL監(jiān)控Innodb信息工作流程

    這篇文章主要為大家介紹了MySQL監(jiān)控Innodb信息工作流程,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2024-02-02
  • MySQL中使用binlog時(shí)格式該如何選擇

    MySQL中使用binlog時(shí)格式該如何選擇

    這篇文章主要給大家介紹了關(guān)于MySQL中使用binlog時(shí)格式該如何選擇的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-11-11
  • Mysql中的自連接問(wèn)題

    Mysql中的自連接問(wèn)題

    這篇文章主要介紹了Mysql中的自連接問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-05-05
  • lnmp重置mysql數(shù)據(jù)庫(kù)root密碼的兩種方法

    lnmp重置mysql數(shù)據(jù)庫(kù)root密碼的兩種方法

    這篇文章給大家介紹了lnmp重置mysql數(shù)據(jù)庫(kù)root密碼的兩種方法,第一種方法通過(guò)腳本重置密碼,第二種方法通過(guò)命令修改,具體操作方法大家參考下本文
    2017-07-07
  • MySQL性能優(yōu)化 出題業(yè)務(wù)SQL優(yōu)化

    MySQL性能優(yōu)化 出題業(yè)務(wù)SQL優(yōu)化

    根據(jù)用戶(hù)的作答結(jié)果出練習(xí)卷,題目的優(yōu)先級(jí)為:未做過(guò)的題目>只做錯(cuò)的題目>做錯(cuò)又做對(duì)的題目>只做對(duì)的題目。
    2010-08-08
  • MySQL count(*/column)查詢(xún)優(yōu)化的實(shí)現(xiàn)

    MySQL count(*/column)查詢(xún)優(yōu)化的實(shí)現(xiàn)

    count()是SQL中一個(gè)常用的聚合函數(shù),其被用來(lái)統(tǒng)計(jì)記錄的總數(shù),本文主要介紹了MySQL count(*/column)查詢(xún)優(yōu)化的實(shí)現(xiàn),具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-09-09
  • 關(guān)于@NotNull注解失效的原因之一

    關(guān)于@NotNull注解失效的原因之一

    這篇文章主要介紹了關(guān)于@NotNull注解失效的原因之一,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-01-01
  • innodb系統(tǒng)表空間維護(hù)方法

    innodb系統(tǒng)表空間維護(hù)方法

    下面小編就為大家?guī)?lái)一篇innodb系統(tǒng)表空間維護(hù)方法。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-03-03
  • mysql排序ORDER BY不生效的問(wèn)題解決

    mysql排序ORDER BY不生效的問(wèn)題解決

    order by作為一個(gè)常用的功能,在項(xiàng)目中應(yīng)該經(jīng)常用到,本文主要介紹了mysql排序ORDER BY不生效的問(wèn)題解決,具有一定的參考價(jià)值,感興趣的可以了解一下
    2023-10-10

最新評(píng)論

百色市| 定结县| 十堰市| 伊金霍洛旗| 井冈山市| 海兴县| 丰顺县| 大姚县| 德阳市| 广饶县| 耿马| 台南县| 嵊州市| 安远县| 邛崃市| 钟祥市| 东乡县| 象山县| 张家港市| 梁河县| 穆棱市| 鸡西市| 惠水县| 襄汾县| 尼木县| 从化市| 安阳县| 盐源县| 牙克石市| 兴义市| 准格尔旗| 湖南省| 金溪县| 和顺县| 桐柏县| 铜梁县| 桂平市| 高安市| 乡宁县| 绥阳县| 清水河县|