MongoDB 索引数据类型优化,节省60%内存
2014-09-11 10:55
706 查看
最近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}) 然后获取每个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 |
相关文章推荐
- MongoDB 索引数据类型优化,节省60%内存
- 索引优化时如何处理Date数据类型
- MySQL架构优化实战系列1:数据类型与索引调优全解析
- Mysql架构优化和索引——选择优化的数据类型
- mysql中的字符串类型数据索引优化
- MySQL架构优化实战系列1:数据类型与索引调优全解析
- 架构优化和索引--数据类型的选择
- 今日内容介绍 1、自定义类型的定义及使用 2、自定义类的内存图 3、ArrayList集合的基本功能 4、随机点名器案例及库存案例代码优化 ###01引用数据类型_类 * A: 数据类型
- Schema的优化和索引 - 选择最佳的数据类型
- 数据查询优化之使用索引
- 类是数据类型,对象是内存的具体分配
- 类是数据类型,对象是内存的具体分配
- xml 数据类型列的索引
- lucene-内存索引、内存索引保存在硬盘、索引优化
- 数据类型 关乎内存占用——已发《电脑报》
- 类是数据类型,对象是内存的具体分配
- Oracle Database10g 性能调整与优化--索引的类型
- 【数据操作】优化SQL server性能 之 索引
- HubbleDotNet 开源全文搜索数据库项目--数据表的数据类型和索引类型
- SQL优化(索引、存储过程、数据分页的存储过程)