日期:2014-05-16  浏览次数:20430 次

把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:

  1. #?mkdir?/ramdata?
  2. #?mount?-t?tmpfs?-o?size=16000M?tmpfs?/ramdata/?
  3. #?df?
  4. Filesystem???????????1K-blocks??????Used?Available?Use%?Mounted?on?
  5. /dev/xvde1?????????????5905712???4973924????871792??86%?/?
  6. none??????????????????15344936?????????0??15344936???0%?/dev/shm?
  7. tmpfs?????????????????16384000?????????0??16384000???0%?/ramdata?