婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > 將MongoDB作為Redis式的內存數據庫的使用方法

將MongoDB作為Redis式的內存數據庫的使用方法

熱門標簽:江西南昌百應電話機器人 hbuilder地圖標注 杭州400電話如何申請的 機器人電話機創意繪畫 400電話申請怎么看 天音通信電話機器人 高德地圖標注商家在哪 400電話從哪里申請濱州 隨州營銷電話機器人怎么樣

 基本思想

將MongoDB用作內存數據庫(in-memory database),也即,根本就不讓MongoDB把數據保存到磁盤中的這種用法,引起了越來越多的人的興趣。這種用法對于以下應用場合來講,超實用:

  •     置于慢速RDBMS系統之前的寫操作密集型高速緩存
  •     嵌入式系統
  •     無需持久化數據的PCI兼容系統
  •     需要輕量級數據庫而且庫中數據可以很容易清除掉的單元測試(unit testing)

如果這一切可以實現就真是太優雅了:我們就能夠巧妙地在不涉及磁盤操作的情況下利用MongoDB的查詢/檢索功能。可能你也知道,在99%的情況下,磁盤IO(特別是隨機IO)是系統的瓶頸,而且,如果你要寫入數據的話,磁盤操作是無法避免的。

MongoDB有一個非常酷的設計決策,就是她可以使用內存影射文件(memory-mapped file)來處理對磁盤文件中數據的讀寫請求。這也就是說,MongoDB并不對RAM和磁盤這兩者進行區別對待,只是將文件看作一個巨大的數組,然后按照字節為單位訪問其中的數據,剩下的都交由操作系統(OS)去處理!就是這個設計決策,才使得MongoDB可以無需任何修改就能夠運行于RAM之中。

實現方法

這一切都是通過使用一種叫做tmpfs的特殊類型文件系統實現的。在Linux中它看上去同常規的文件系統(FS)一樣,只是它完全位于RAM中(除非其大小超過了RAM的大小,此時它還可以進行swap,這個非常有用!)。我的服務器中有32GB的RAM,下面讓我們創建一個16GB的 tmpfs:

復制代碼 代碼如下:
# mkdir /ramdata
# mount -t tmpfs -o size=16000M tmpfs /ramdata/
# df
Filesystem           1K-blocks      Used Available Use% Mounted on
/dev/xvde1             5905712   4973924    871792  86% /
none                  15344936         0  15344936   0% /dev/shm
tmpfs                 16384000         0  16384000   0% /ramdata

接下來要用適當的設置啟動MongoDB。為了減小浪費的RAM數量,應該把smallfiles和noprealloc設置為true。既然現在是基于RAM的,這么做完全不會降低性能。此時再使用journal就毫無意義了,所以應該把nojournal設置為true。

復制代碼 代碼如下:
dbpath=/ramdata
nojournal = true
smallFiles = true
noprealloc = true

MongoDB啟動之后,你會發現她運行得非常好,文件系統中的文件也正如期待的那樣出現了:

復制代碼 代碼如下:
# mongo
MongoDB shell version: 2.3.2
connecting to: test
> db.test.insert({a:1})
> db.test.find()
{ "_id" : ObjectId("51802115eafa5d80b5d2c145"), "a" : 1 }

# ls -l /ramdata/
total 65684
-rw-------. 1 root root 16777216 Apr 30 15:52 local.0
-rw-------. 1 root root 16777216 Apr 30 15:52 local.ns
-rwxr-xr-x. 1 root root        5 Apr 30 15:52 mongod.lock
-rw-------. 1 root root 16777216 Apr 30 15:52 test.0
-rw-------. 1 root root 16777216 Apr 30 15:52 test.ns
drwxr-xr-x. 2 root root       40 Apr 30 15:52 _tmp

現在讓我們添加一些數據,證實一下其運行完全正常。我們先創建一個1KB的document,然后將它添加到MongoDB中4百萬次:

復制代碼 代碼如下:
> str = ""

> aaa = "aaaaaaaaaa"
aaaaaaaaaa
> for (var i = 0; i 100; ++i) { str += aaa; }

> for (var i = 0; i 4000000; ++i) { db.foo.insert({a: Math.random(), s: str});}
> db.foo.stats()
{
        "ns" : "test.foo",
        "count" : 4000000,
        "size" : 4544000160,
        "avgObjSize" : 1136.00004,
        "storageSize" : 5030768544,
        "numExtents" : 26,
        "nindexes" : 1,
        "lastExtentSize" : 536600560,
        "paddingFactor" : 1,
        "systemFlags" : 1,
        "userFlags" : 0,
        "totalIndexSize" : 129794000,
        "indexSizes" : {
                "_id_" : 129794000
        },
        "ok" : 1
}


可以看出,其中的document平均大小為1136字節,數據總共占用了5GB的空間。_id之上的索引大小為130MB。現在我們需要驗證一件 非常重要的事情:RAM中的數據有沒有重復,是不是在MongoDB和文件系統中各保存了一份?還記得MongoDB并不會在她自己的進程內緩存任何數據,她的數據只會緩存到文件系統的緩存之中。那我們來清除一下文件系統的緩存,然后看看RAM中還有有什么數據:

復制代碼 代碼如下:
# echo 3 > /proc/sys/vm/drop_caches
# free
             total       used       free     shared    buffers     cached
Mem:      30689876    6292780   24397096          0       1044    5817368
-/+ buffers/cache:     474368   30215508
Swap:            0          0          0

可以看到,在已使用的6.3GB的RAM中,有5.8GB用于了文件系統的緩存(緩沖區,buffer)。為什么即使在清除所有緩存之后,系統中仍然還有5.8GB的文件系統緩存??其原因是,Linux非常聰明,她不會在tmpfs和緩存中保存重復的數據。太棒了!這就意味著,你在RAM只有一份數據。下面我們訪問一下所有的document,并驗證一下,RAM的使用情況不會發生變化:

復制代碼 代碼如下:
> db.foo.find().itcount()
4000000

# free
             total       used       free     shared    buffers     cached
Mem:      30689876    6327988   24361888          0       1324    5818012
-/+ buffers/cache:     508652   30181224
Swap:            0          0          0
# ls -l /ramdata/
total 5808780
-rw-------. 1 root root  16777216 Apr 30 15:52 local.0
-rw-------. 1 root root  16777216 Apr 30 15:52 local.ns
-rwxr-xr-x. 1 root root         5 Apr 30 15:52 mongod.lock
-rw-------. 1 root root  16777216 Apr 30 16:00 test.0
-rw-------. 1 root root  33554432 Apr 30 16:00 test.1
-rw-------. 1 root root 536608768 Apr 30 16:02 test.10
-rw-------. 1 root root 536608768 Apr 30 16:03 test.11
-rw-------. 1 root root 536608768 Apr 30 16:03 test.12
-rw-------. 1 root root 536608768 Apr 30 16:04 test.13
-rw-------. 1 root root 536608768 Apr 30 16:04 test.14
-rw-------. 1 root root  67108864 Apr 30 16:00 test.2
-rw-------. 1 root root 134217728 Apr 30 16:00 test.3
-rw-------. 1 root root 268435456 Apr 30 16:00 test.4
-rw-------. 1 root root 536608768 Apr 30 16:01 test.5
-rw-------. 1 root root 536608768 Apr 30 16:01 test.6
-rw-------. 1 root root 536608768 Apr 30 16:04 test.7
-rw-------. 1 root root 536608768 Apr 30 16:03 test.8
-rw-------. 1 root root 536608768 Apr 30 16:02 test.9
-rw-------. 1 root root  16777216 Apr 30 15:52 test.ns
drwxr-xr-x. 2 root root        40 Apr 30 16:04 _tmp
# df
Filesystem           1K-blocks      Used Available Use% Mounted on
/dev/xvde1             5905712   4973960    871756  86% /
none                  15344936         0  15344936   0% /dev/shm
tmpfs                 16384000   5808780  10575220  36% /ramdata

果不其然! :)

復制(replication)呢?

既然服務器在重啟時RAM中的數據都會丟失,所以你可能會想使用復制。采用標準的副本集(replica set)就能夠獲得自動故障轉移(failover),還能夠提高數據讀取能力(read capacity)。如果有服務器重啟了,它就可以從同一個副本集中另外一個服務器中讀取數據從而重建自己的數據(重新同步,resync)。即使在大量數據和索引的情況下,這個過程也會足夠快,因為索引操作都是在RAM中進行的 :)

有一點很重要,就是寫操作會寫入一個特殊的叫做oplog的collection,它位于local數據庫之中。缺省情況下,它的大小是總數據量的5%。在我這種情況下,oplog會占有16GB的5%,也就是800MB的空間。在拿不準的情況下,比較安全的做法是,可以使用oplogSize這個選項為oplog選擇一個固定的大小。如果備選服務器宕機時間超過了oplog的容量,它就必須要進行重新同步了。要把它的大小設置為1GB,可以這樣:

復制代碼 代碼如下:
oplogSize = 1000

分片(sharding)呢?

既然擁有了MongoDB所有的查詢功能,那么用它來實現一個大型的服務要怎么弄?你可以隨心所欲地使用分片來實現一個大型可擴展的內存數據庫。配置服務器(保存著數據塊分配情況)還還是用過采用基于磁盤的方案,因為這些服務器的活動數量不大,老從頭重建集群可不好玩。
注意事項

RAM屬稀缺資源,而且在這種情況下你一定想讓整個數據集都能放到RAM中。盡管tmpfs具有借助于磁盤交換(swapping)的能力,但其性能下降將非常顯著。為了充分利用RAM,你應該考慮:

  •     使用usePowerOf2Sizes選項對存儲bucket進行規范化
  •     定期運行compact命令或者對節點進行重新同步(resync)
  •     schema的設計要相當規范化(以避免出現大量比較大的document)

結論

寶貝,你現在就能夠將MongoDB用作內存數據庫了,而且還能使用她的所有功能!性能嘛,應該會相當驚人:我在單線程/核的情況下進行測試,可以達到每秒20K個寫入的速度,而且增加多少個核就會再增加多少倍的寫入速度。

您可能感興趣的文章:
  • 解決MongoDB占用內存過大頻繁死機的方法詳解
  • python監控linux內存并寫入mongodb(推薦)
  • 解決MongoDB 排序超過內存限制的問題
  • cgroup限制mongodb進程內存大小
  • MongoDB 內存使用情況分析
  • MongoDB 內存管理相關總結

標簽:常德 招商 葫蘆島 沈陽 保定 昆明 鶴崗 石嘴山

巨人網絡通訊聲明:本文標題《將MongoDB作為Redis式的內存數據庫的使用方法》,本文關鍵詞  將,MongoDB,作為,Redis,式,的,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《將MongoDB作為Redis式的內存數據庫的使用方法》相關的同類信息!
  • 本頁收集關于將MongoDB作為Redis式的內存數據庫的使用方法的相關信息資訊供網民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    美女脱光内衣内裤视频久久网站 | 亚洲精品成人悠悠色影视| 成人国产亚洲欧美成人综合网| 一区二区三区在线观看动漫| 精品日韩av一区二区| 在线免费观看日本一区| 国产精品亚洲午夜一区二区三区| 午夜精品视频一区| 亚洲最大成人综合| 最新热久久免费视频| 久久精品男人的天堂| 欧美videos大乳护士334| 欧美日本免费一区二区三区| 欧美性受xxxx黑人xyx| 在线一区二区视频| 色乱码一区二区三区88| 色综合天天天天做夜夜夜夜做| 高清久久久久久| 国模冰冰炮一区二区| 精品亚洲成a人| 激情成人综合网| 精品一区二区三区免费毛片爱| 日产欧产美韩系列久久99| 一区二区三区免费网站| 国产精品成人午夜| ...xxx性欧美| 亚洲人吸女人奶水| 亚洲乱码一区二区三区在线观看| 亚洲男人的天堂在线观看| 亚洲欧美另类在线| 亚洲第一在线综合网站| 午夜免费久久看| 青草av.久久免费一区| 久久99精品国产麻豆不卡| 久久成人免费日本黄色| 奇米影视7777精品一区二区| 毛片基地黄久久久久久天堂| 久久99国产精品尤物| 国产在线观看一区二区| www.亚洲免费av| 欧美性videosxxxxx| 欧美人动与zoxxxx乱| 精品国产百合女同互慰| 国产日韩欧美综合在线| 亚洲免费观看高清| 日韩二区三区四区| 国产精品资源在线观看| 99久久99久久精品免费看蜜桃| 91福利视频在线| 麻豆91免费看| av亚洲精华国产精华精华| 欧美这里有精品| 精品日韩一区二区三区| 一区视频在线播放| 天堂久久一区二区三区| 国产一区二区三区日韩| 97超碰欧美中文字幕| 91麻豆精品国产自产在线观看一区 | thepron国产精品| 色88888久久久久久影院野外| 欧美日韩国产一级| 亚洲国产精品99久久久久久久久 | 久久婷婷国产综合国色天香| 日韩一区在线看| 日本sm残虐另类| 91网站在线观看视频| 精品国产91久久久久久久妲己| 欧美激情一区二区| 日韩国产精品久久久久久亚洲| 高清国产一区二区三区| 欧美日韩小视频| 综合网在线视频| 久久国产视频网| 欧美日韩精品是欧美日韩精品| 久久久久久久久97黄色工厂| 一区二区视频在线| 国产麻豆精品theporn| 欧美色成人综合| 国产精品久久久久久户外露出 | 不卡的av电影在线观看| 欧美成人艳星乳罩| 亚洲福利国产精品| 91小视频在线| 日韩免费电影网站| 亚洲超碰97人人做人人爱| 99久久精品国产麻豆演员表| 久久久亚洲精品石原莉奈 | 中文字幕一区二| 裸体一区二区三区| 欧美日韩亚洲国产综合| 亚洲欧美偷拍三级| 99久久99久久精品国产片果冻| 久久久久久久久久久久久女国产乱| 婷婷开心激情综合| 欧美高清视频一二三区| 亚洲最色的网站| 91老师国产黑色丝袜在线| 中文字幕亚洲综合久久菠萝蜜| 国产成人av自拍| 亚洲精品一区二区三区福利| 免费欧美高清视频| 欧美一区二区三区在线电影 | 在线观看国产一区二区| 国产精品狼人久久影院观看方式| 久久精品国内一区二区三区 | 久久久久国产精品麻豆| 乱一区二区av| 久久久国产午夜精品| 国产69精品一区二区亚洲孕妇| 国产女同互慰高潮91漫画| 国产精品一卡二卡| 中文字幕一区二区三区在线播放| 91在线视频免费91| 亚洲精品国产一区二区精华液| 日本伦理一区二区| 亚洲免费在线播放| 欧美精品自拍偷拍| 国产一区视频在线看| 国产清纯美女被跳蛋高潮一区二区久久w| 久久成人免费日本黄色| 国产婷婷色一区二区三区在线| 国产乱淫av一区二区三区| 国产精品午夜免费| 色婷婷激情综合| 日本va欧美va瓶| 国产精品欧美极品| 欧美色倩网站大全免费| 久久成人免费日本黄色| 国产精品视频yy9299一区| 91蜜桃免费观看视频| 日欧美一区二区| 国产精品伦理一区二区| 欧美精品 日韩| 国产91对白在线观看九色| 一级女性全黄久久生活片免费| 欧美高清激情brazzers| 韩国精品主播一区二区在线观看| 国产精品无人区| 欧美视频中文一区二区三区在线观看 | 91精品国产综合久久久久久久| 狠狠久久亚洲欧美| 国产精品狼人久久影院观看方式| 欧美在线观看视频一区二区| 麻豆精品久久精品色综合| 国产精品久久久久久久久久免费看 | 日韩专区一卡二卡| 欧美激情一区二区三区全黄| 欧洲精品中文字幕| 国产另类ts人妖一区二区| 亚洲精品v日韩精品| 久久网站热最新地址| 欧美无人高清视频在线观看| 国产精品一线二线三线精华| 三级精品在线观看| 亚洲乱码国产乱码精品精的特点 | 日韩国产欧美在线观看| 国产精品麻豆欧美日韩ww| 日韩一级免费观看| 欧美三级日本三级少妇99| 国产成人8x视频一区二区| 日精品一区二区| 亚洲va欧美va天堂v国产综合| 免费成人美女在线观看| 中文字幕中文乱码欧美一区二区| 日韩一级片网址| 91精品国产麻豆国产自产在线 | 国产欧美一区视频| 91精品国产一区二区三区香蕉| 一本色道a无线码一区v| 国产91丝袜在线18| 国产一区三区三区| 激情欧美一区二区| 久久精品国产一区二区三区免费看 | 视频一区视频二区中文字幕| 亚洲免费观看高清| 一区二区三区四区在线播放| 国产婷婷一区二区| 欧美国产综合一区二区| 国产喂奶挤奶一区二区三区| 日韩精品一区在线| 精品久久久久99| 精品国产伦理网| 精品国产免费视频| 久久蜜桃av一区二区天堂| 精品福利一区二区三区免费视频| 欧美一级精品大片| 日韩免费在线观看| 欧美videos大乳护士334| 久久综合色一综合色88| 久久免费的精品国产v∧| 国产欧美一区视频| 亚洲乱码中文字幕| 香蕉影视欧美成人| 奇米在线7777在线精品| 麻豆成人免费电影| 成人午夜视频网站| 91在线视频播放地址| 欧美视频日韩视频在线观看| 欧美久久婷婷综合色| 日韩欧美精品三级|