Welcome 微信登录

首页 / 数据库 / MySQL / 把 MongoDB 当成是纯内存数据库来使用(Redis 风格)

基本思想

将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/# dfFilesystem 1K-blocksUsed Available Use% Mounted on/dev/xvde1 5905712 497392487179286% /none15344936 015344936 0% /dev/shmtmpfs 16384000 016384000 0% /ramdata 接下来要用适当的设置启动MongoDB。为了减小浪费的RAM数量,应该把smallfilesnoprealloc设置为true。既然现在是基于RAM的,这么做完全不会降低性能。此时再使用journal就毫无意义了,所以应该把nojournal设置为true。dbpath=/ramdatanojournal = truesmallFiles = truenoprealloc = true MongoDB启动之后,你会发现她运行得非常好,文件系统中的文件也正如期待的那样出现了:# mongoMongoDB shell version: 2.3.2connecting 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 root5 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.nsdrwxr-xr-x. 2 root root 40 Apr 30 15:52 _tmp 现在让我们添加一些数据,证实一下其运行完全正常。 Now let’s add some data and make sure it behaves properly. 我们先创建一个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} 
  • 1
  • 2
  • 3
  • 下一页
MySQL 主主同步配置RMAN备份报错Message file RMAN<lang>.msb not found相关资讯      MongoDB 
  • MongoDB 3.3.0 发布下载  (01月14日)
  • 使用MongoDB C#官方驱动操作  (12/31/2015 16:27:56)
  • CentOS 6.6下安装MongoDB 3.0.1  (12/21/2015 19:29:02)
  • MongoDB 3.2版WiredTiger存储引擎  (01月02日)
  • 进程监控工具Supervisor 启动  (12/26/2015 10:49:57)
  • MongoDB 3.2.1 RC0 发布下载  (12/18/2015 11:32:29)
本文评论 查看全部评论 (0)
表情: 姓名: 字数