查看: 4360|回复: 1

MongoDB 索引数据类型优化,节省60%内存

[复制链接]
论坛徽章:
1
2012新春纪念徽章
日期:2012-01-04 11:58:44
跳转到指定楼层
1#
发表于 2012-2-29 13:06 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
最近trunk.ly的工程师通过mongostat发现了大量的page fault,然后通过检查发现,他们的索引已经超出内存限制了(没有keep all index in RAM)。于是他们决定开始减小索引大小,通过测试得出了如下的数据,不同的数据类型的索引大小有2到3倍的差距。
虽然能够想像得到,但是直观的数据图可能让我们更深刻的认识到。他们的测试再一次告诉我们:给索引定一个好的数据结构是多么重要。
这是测试结果图,分别是用int、MongoDB的ObjectID、base64和md5的字符串做索引产生的索引大小:
file:///C:/Users/amhere/AppData/Local/Temp/moz-screenshot-2.pngfile:///C:/Users/amhere/AppData/Local/Temp/moz-screenshot-3.pngfile:///C:/Users/amhere/AppData/Local/Temp/moz-screenshot-4.pngfile:///C:/Users/amhere/AppData/Local/Temp/moz-screenshot-5.png
测试过程也非常简单,首先用下面脚本将各种不同数据结构的数据写入到不同的collection里:
#!/usr/bin/env python
import pymongo
import bson
from pymongo import Connection
db = connection.test_database
print('ObjectID')
for i in range(1, 1000000):
   db.objectids.insert({'i': i})
print('int')
for i in range(1, 1000000):
   db.ints.insert({'_id': i, 'i': i})
print('Base64 BSON')
for i in range(1, 1000000):
   db.base64s.insert({'_id': \
       bson.Binary(hashlib.md5(str(i)).digest(),
       bson.binary.MD5_SUBTYPE), 'i': i})
print('string')
for i in range(1, 1000000):
   db.strings.insert({'_id': hashlib.md5(str(i)).digest(), 'i': i})
然后获取每个collection的index大小,得到如下的结果,画成上面的图:
> db.base64s.stats()
{
       "totalIndexSize" : 67076096,
}
> db.objectids.stats()
{
       "totalIndexSize" : 41598976,
}
> db.ints.stats()
{
       "totalIndexSize" : 32522240,
}
> db.strings.stats()
{
       "totalIndexSize" : 90914816,
}
原文链接:How to save 200% RAM by selecting the right key data typefor #MongoDB


论坛徽章:
6
ITPUB9周年纪念徽章
日期:2010-10-08 09:28:512010广州亚运会纪念徽章:拳击
日期:2011-01-28 14:17:482011新春纪念徽章
日期:2011-02-18 11:42:49ITPUB十周年纪念徽章
日期:2011-11-01 16:25:51奥运会纪念徽章:篮球
日期:2012-07-26 10:14:50宝马
日期:2014-01-13 14:56:04
2#
发表于 2012-7-10 14:06 | 只看该作者
好贴

使用道具 举报

回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

TOP技术积分榜 社区积分榜 徽章 团队 统计 知识索引树 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 未成年人举报专区 
京ICP备16024965号-8  北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表