MongoDB介绍──开发者专区(2)

2.2  MongoDB资源消耗

考虑到性能的原因,mongo做了很多预分配,包括提前在文件系统中为每个数据库分配逐渐增长大小的文件集。这样可以有效地避免潜在的文件系统碎片,使数据库操作更高效。

一个数据库的文件集从序号0开始分配,01...,大小依次是64M128M256M,直到2G。一旦文件大小达到2G,之后的文件大小都保持为2G。所以如果上一个文件是1G,而数据量刚好超过1G,则下一个文件(大小为2G)则可能有超过90%都是空的。如“ls -lh”输出为:

-rw------- 1 root root  64M 2010-04-08 12:27 blog.0

-rw------- 1 root root 128M 2010-04-08 12:27 blog.1

-rw------- 1 root root 256M 2010-04-08 12:33 blog.2

-rw------- 1 root root 512M 2010-04-08 10:38 blog.3

-rw------- 1 root root  16M 2010-04-08 12:33 blog.ns

在这里显示的最新文件“blog.3”没满,第二新的文件“blog.2”也没满,因为当前写的正是文件“blog.2”,从而可以知道数据库中数据的大小至少是64M + 128M + 1 byte。对于一个大的数据库来说这也不算浪费,因为最大的文件大小是2G,所以你最多只会浪费2G

如果你想使你的磁盘利用更有效率,下面是一些解决方法:

1.  只建立一个数据库。这样你最多只会浪费2G

2.  每个文档使用自建的“_id”值而不要使用默认的ObjectId对象。

3.  由于每个document的每个字段名都会存放,所以如果字段名越长,document的数据占用就会越大,因此把字段名缩短会大大降低数据的占用量。如把“timeAdded”改为“tA”。

Mongo使用内存映射文件来访问数据,这样在用top观察mongod进程的内存占用时会发现量很大,不用担心这个,当使用内存映射文件时是正常的。并且映射数据的大小只出现在虚拟内存那一列,常驻内存量才反应出有多少数据cached在内存中。

按照mongodb官方的说法,mongodb完全由系统内核进行内存管理,会尽可能的占用系统空闲内存,用free可以看到,大部分内存都是作为io cache被占用的,而这部分内存是可以释放出来给应用使用的。根据网上实际生产环境的运行情况介绍,也确实是这样,8G内存被完全用掉,但是始终还没有使用swap空间,所以mongodb的内存问题应该不用担心。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值