MongoDB 索引数据类型优化,节省60%内存
来源:互联网 发布:java在线考试系统代码 编辑:程序博客网 时间:2024/05/20 07:35
转载地址:http://blog.nosqlfan.com/html/2064.html
最近trunk.ly的工程师通过mongostat发现了大量的page fault,然后通过检查发现,他们的索引已经超出内存限制了(没有keep all index in RAM)。于是他们决定开始减小索引大小,通过测试得出了如下的数据,不同的数据类型的索引大小有2到3倍的差距。
虽然能够想像得到,但是直观的数据图可能让我们更深刻的认识到。他们的测试再一次告诉我们:给索引定一个好的数据结构是多么重要。
这是测试结果图,分别是用int、MongoDB的ObjectID、base64和md5的字符串做索引产生的索引大小:
测试过程也非常简单,首先用下面脚本将各种不同数据结构的数据写入到不同的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})
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,
}
{
"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 type for #MongoDB
- MongoDB 索引数据类型优化,节省60%内存
- mongodb组合索引优化
- mongodb 优化索引心得
- MongoDB 索引优化
- APP开发实战121-APP内存优化节省内存
- MongoDB组合索引的优化
- MongoDB组合索引的优化
- mongodb索引优化的方法
- MongoDB组合索引的优化
- MongoDB组合索引的优化
- mongodb索引占用内存大小优化
- Flash 平台技术的优化(二) 节省内存
- Flash Platform的性能优化——节省内存
- 使用pandas优化Spark内存消耗(节省90%)
- MongoDB 性能优化之索引优化
- lucene-内存索引、内存索引保存在硬盘、索引优化
- MongoDB范围查询的索引优化
- MongoDB范围查询的索引优化
- 富文本编译器
- 如何安全的存储密码 - hash、salt 以及更多
- 如何来分析活跃用户和留存用户?
- json插件
- 选项卡
- MongoDB 索引数据类型优化,节省60%内存
- Android 滑动引导页
- Tomcat 常用优化和配置
- sql笔试题
- iOS 上的「来电归属地+超豪华通讯录专业版」这个应用的原理是什么?
- 打开Mac OS系统的root帐户
- 再谈以客户为中心——见识大神了
- vim编辑二进制文件
- Windows8 RP版亲手体验全过程