亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

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

將MongoDB作為Redis式的內(nèi)存數(shù)據(jù)庫的使用方法

2020-10-28 21:40:29
字體:
來源:轉載
供稿:網(wǎng)友

 基本思想

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

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

如果這一切可以實現(xiàn)就真是太優(yōu)雅了:我們就能夠巧妙地在不涉及磁盤操作的情況下利用MongoDB的查詢/檢索功能??赡苣阋仓?,在99%的情況下,磁盤IO(特別是隨機IO)是系統(tǒng)的瓶頸,而且,如果你要寫入數(shù)據(jù)的話,磁盤操作是無法避免的。

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

實現(xiàn)方法

這一切都是通過使用一種叫做tmpfs的特殊類型文件系統(tǒng)實現(xiàn)的。在Linux中它看上去同常規(guī)的文件系統(tǒng)(FS)一樣,只是它完全位于RAM中(除非其大小超過了RAM的大小,此時它還可以進行swap,這個非常有用?。?。我的服務器中有32GB的RAM,下面讓我們創(chuàng)建一個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

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

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

MongoDB啟動之后,你會發(fā)現(xiàn)她運行得非常好,文件系統(tǒng)中的文件也正如期待的那樣出現(xiàn)了:

復制代碼 代碼如下:
# 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

現(xiàn)在讓我們添加一些數(shù)據(jù),證實一下其運行完全正常。我們先創(chuàng)建一個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字節(jié),數(shù)據(jù)總共占用了5GB的空間。_id之上的索引大小為130MB?,F(xiàn)在我們需要驗證一件 非常重要的事情:RAM中的數(shù)據(jù)有沒有重復,是不是在MongoDB和文件系統(tǒng)中各保存了一份?還記得MongoDB并不會在她自己的進程內(nèi)緩存任何數(shù)據(jù),她的數(shù)據(jù)只會緩存到文件系統(tǒng)的緩存之中。那我們來清除一下文件系統(tǒng)的緩存,然后看看RAM中還有有什么數(shù)據(jù):

復制代碼 代碼如下:
# 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用于了文件系統(tǒng)的緩存(緩沖區(qū),buffer)。為什么即使在清除所有緩存之后,系統(tǒng)中仍然還有5.8GB的文件系統(tǒng)緩存??其原因是,Linux非常聰明,她不會在tmpfs和緩存中保存重復的數(shù)據(jù)。太棒了!這就意味著,你在RAM只有一份數(shù)據(jù)。下面我們訪問一下所有的document,并驗證一下,RAM的使用情況不會發(fā)生變化:

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

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

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

分片(sharding)呢?

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

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

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

結論

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

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
一级二级三级在线观看| www视频在线观看| 一区二区三区自拍| 美女做暖暖视频免费在线观看全部网址91| 男人操女人视频网站| 国产精品乱子久久久久| www.超碰在线观看| 人妻精油按摩bd高清中文字幕| 欧美高清日韩| 精品少妇一区二区三区免费观| 国产精品视频一区二区三| 久草视频手机在线| 国产美女在线观看一区| 99久久婷婷国产精品综合| 日韩av免费看| 欧洲成人在线视频| 国产jk精品白丝av在线观看| 色婷婷激情综合| 黑人巨大精品欧美一区二区三区| 欧性猛交ⅹxxx乱大交| 国产在视频线精品视频| 国产在成人精品线拍偷自揄拍| 精品无人区太爽高潮在线播放| 亚洲成a人片77777在线播放| 99精品国产高清一区二区麻豆| 亚洲一区二区三区日本久久九| 免费污污视频在线观看| 欧美一三区三区四区免费在线看| 波霸ol色综合网| 日韩精品亚洲元码| 免费高清视频在线一区| 91精品国产综合久久婷婷香蕉| 天天综合日日夜夜精品| 欧美性猛交xxxx免费看久久久| 国产88在线观看入口| 色婷婷久久久亚洲一区二区三区| 久久久999视频| 欧美人成在线观看网站高清| 欧美精品久久一区二区| 成年人视频在线看| 日本成人在线视频网址| 久久91视频| 男人添女人荫蒂免费视频| 亚洲国产成人综合| 欧美成人明星100排名| 91精品国产色综合久久不卡98| 欧美精品一区三区| 成人高潮免费视频| 国产欧美一区二区精品性色| 国产人妻777人伦精品hd| 亚洲视频一起| 中国女人特级毛片| 在线免费三级电影网站| 鲁丝一区鲁丝二区鲁丝三区| 黄页视频在线观看| 超碰在线97av| 中文字幕一区二区不卡| 高清国产一区二区三区四区五区| 奇米影视狠狠狠| 特级西西人体4444xxxx| 国产精品一区二区av白丝下载| 国产精品不卡| 久久精品久久精品亚洲人| 精品福利视频导航| 亚洲国产精品视频一区| 青青操视频在线观看| 国产亚洲精品女人久久久久久| 亚洲精品无码久久久久| 天堂91在线| a√在线中文网新版址在线| 久久久久毛片免费观看| 成人在线观看视频app| 国产成人久久久| 色综合久久中文字幕综合网| 久久久久高潮毛片免费全部播放| 亚洲精品按摩视频| 亚洲精选一区二区| 久久精品人人做人人综合| 欧美男男青年gay1069videost| 人妻丰满熟妇av无码区app| 黑巨人与欧美精品一区| 欧美三日本三级三级在线播放| 美女毛片在线观看| 亚洲精品伦理在线| 成人欧美视频在线观看播放| 91久久精品国产91久久性色tv| 蜜臀久久久久久久| 亚洲一二三区视频在线观看| 亚洲综合不卡| 亚洲小说春色综合另类网蜜桃| 国产欧美精品va在线观看| wwwjizzjizzcom| 日本欧美一区二区在线观看| 九一国产精品视频| 激情综合色综合久久综合| 欧美free嫩15| 久草在线中文888| 色综合久久中文综合久久牛| 亚洲精品第一国产综合野草社区| 狠狠躁少妇一区二区三区| 岳毛多又紧做起爽| 国产97免费视| 黄色免费高清视频| 日韩久久久久久| 国产福利第一视频在线播放| 乱中年女人av三区中文字幕| 黄色一级大片在线免费观看| 国产+高潮+白浆+无码| 成人女同在线观看| 一区二区三区毛片免费| av影院在线| 亚洲v在线观看| 久久黄色精品视频| 日韩三级.com| 免费在线黄色网| 欧美另类一区| 日本老熟妇毛茸茸| 日韩欧美一区二区三区| 亚洲风情在线资源| 五月婷婷综合激情| 日本久久综合| 成人乱色短篇合集| 色视频线观看在线播放| 日本a级片在线观看| 久久av免费看| 成人爱爱电影网址| 久久午夜宅男免费网站| 51国产成人精品午夜福中文下载| 最新四虎影在线在永久观看www| 青青操在线视频观看| 日本不卡1234视频| 国产97在线 | 亚洲| 天天色影综合网| 久久夜色精品亚洲噜噜国产mv| 亚洲一区二区三区日韩| 欧美另类videos黑人极品| 国产精品影音先锋| 国产乱视频在线观看播放| 2021国产精品久久精品| 一区久久精品| 欧美日韩国产片| 日韩福利一区| 猫咪在线永久网站| 99精品视频免费版的特色功能| 国产真实老熟女无套内射| 欧美高清性xxxxxxx| 影音先锋中文在线视频| 中文字幕精品在线视频| 精品久久久久久久久久久| 天然素人一区二区视频| 国语自产在线不卡| 欧美精品成人91久久久久久久| 免费激情视频网站| 欧美一区二区三区观看| 天天操天天摸天天舔| 郴州新闻综合频道在线直播| 99久久久国产精品无码免费| 老熟妻内射精品一区| 国产精品欧美日韩久久| 热99在线观看| 亚洲日本中文字幕在线| 亚洲精品成人a| 欧美黑人3p| 91在线porny国产在线看| 国产精品普通话对白| 日韩网站在线免费观看| 春色成人在线视频| 麻豆亚洲av成人无码久久精品| www.久草.com| 亚洲精品在线观看网站| 天天摸天天碰天天爽天天弄| 欧美一级在线看| 人人干人人插| 日韩欧美精品网址| 欧美视频在线观看免费网址| 中文字幕乱码久久午夜不卡| www.99re7.com| 1区2区3区在线| 欧美激情国内自拍| 激情欧美一区二区三区黑长吊| 日本一区二区三级电影在线观看| 国产51人人成人人人人爽色哟哟| 污污污www精品国产网站| 成年人深夜视频| 亚洲精品乱码久久久久久| 国产精品亚洲第一区在线暖暖韩国| 亚洲精品国产一区二区精华液| 四虎免费视频| 亚洲综合激情另类专区老铁性| 综合在线亚洲| 国产精品久久久久久网站| 国产日韩精品在线观看| 五十路六十路七十路熟婆| 奇米网人体黄视频| av无码精品一区二区三区| 久久精品国产亚洲一区二区| 丰满肉肉bbwwbbww| 亚洲免费视频成人| 韩日精品视频| 欧美日韩在线视频一区二区三区| 久久网一区二区| 深夜福利网站在线观看| 免费观看国产成人| 久久国产夜色精品鲁鲁99| 丁香花高清视频完整版在线观看| 老牛国内精品亚洲成av人片| 国产精品成人久久电影| 国产在线精品免费| 亚洲黄网站在线观看| 亚洲精品日韩av| 欧美一区二区三区视频在线观看| 一级特黄aaa大片| 欧洲三级视频| 亚洲国产日韩在线人成电影| 欧美日韩一区二区三区在线电影| 精品欧美激情精品一区| 国产精品视频h| av老司机久久| 综合激情成人伊人| 欧美日韩第一视频| 免费看成年人视频在线观看| av日韩中文字幕| 国产精品网站一区| 亚洲天堂手机版| 在线黄色网页| 亚洲久草在线视频| 黑人一区二区三区四区五区| 亚洲国产精品久久久久蝴蝶传媒| 国产精品久久天天影视| 久久久欧美精品| 四虎久久免费| 亚洲丰满少妇videoshd| 影音先锋国产资源| 区一区二在线观看| 全黄性性激高免费视频| 午夜美女久久久久爽久久| 欧美人动性xxxxz0oz| 99视频有精品| 欧美精品一区二区蜜桃| 极品美鲍一区| 国产精品久久久久久搜索| 国产精选久久久久久| 国产一区二区三区影视| 狠狠爱综合网| 无圣光视频在线观看| 美女网站一区二区| 视频精品导航| http://嫩草影院| 男女啪啪在线观看| 久久综合久久综合这里只有精品| 日韩精品在线视频免费观看| 亚洲手机视频| 日韩欧美看国产| 国产丝袜精品第一页| 成人午夜精品久久久久久久蜜臀| 天堂网在线观看国产精品| 妖精视频成人观看www| 嫩草影院懂你的影院| 欧美黑人一级爽快片淫片高清| 极品在线视频| 性欧美free| 成年人视频在线观看免费| 麻豆tv入口在线看| 国产精品ⅴa有声小说| 91久久精品一区二区别| 亚洲男人的天堂在线观看| 女人丝袜激情亚洲| 免费高清视频精品| 中文字幕一区二区三| 色先锋久久影院av| 亚洲欧美日韩专区| 日本成人在线播放| 亚洲第一香蕉视频| 性色av一区二区三区在线观看| 亚洲精品久久久久| 日韩精品专区| 大胆欧美熟妇xx| 日韩视频www| 午夜丝袜av电影| 一区二区三区中文在线观看| 国产精品理人伦一区二区三区| 亚洲欧美日韩一区二区三区在线观看| 在线国产三级| 国产精品久99| 一区二区成人网| 99中文视频在线| 精品亚洲自拍| 中文字幕网在线| 香蕉视频网站在线播放| 欧美日韩第一视频| 国产精品一二三产区| 欧美欧美午夜aⅴ在线观看| 亚洲精选成人| 日本人妻丰满熟妇久久久久久| 亚洲一区二区福利| 亚洲1区2区3区视频| 日韩不卡一区二区三区| 亚洲a视频在线| 亚洲黄一区二区| 国产精品久久久久一区二区国产| 久草免费在线播放| 国产又白又嫩又紧又爽18p| 国产热re99久久6国产精品| 亚洲视频在线观看日本a| 91社区视频在线观看| 日本在线观看一区| 日韩在线视频线视频免费网站| 911精品国产| 能直接看的av| 三级av免费观看| 国产人妻精品午夜福利免费| 欧美日韩在线视频一区| 免费久久99精品国产| 亚洲第一色网| 国产拍在线视频| 丰满人妻老熟妇伦人精品| 小黄文在线观看| 中文字幕中文字幕在线中文字幕三区| 久久久一本精品99久久精品66| 成人p站proumb入口| 中文字幕综合在线观看| 日本黄色片免费观看| 欧美日韩综合视频| 欧美一级电影久久| 亚洲性生活视频| 国产乱码精品一区二区三区精东| 极品蜜桃臀肥臀-x88av| 欧美乱妇一区二区三区不卡视频|