最近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 type for #MongoDB
相关推荐
MongoDB 从 3.0 开始引入可插拔存储引擎的概念。目前主要有。,其采用 linux 操作系统内存映射技 术,但一直饱受诟病;...相比 MV1 存储索引时,更节省对内存空间的损耗;提供压缩算法,可以大大降低对硬盘资源的消耗,
Davis带来的MongoDB上索引的优化方法以及MongoDB索引的选择机制,帮助大家缩小索引的选择空间。 A. Jesse Jiryu Davis —— 10gen工程师,从事MongoDB、Python及Tornado。在Dzone上分享了Mon
腾讯云数据库MongoDB天然支持高可用、分布式、高性能、高压缩、schema free、完善的客户端访问均衡策略等功能。云上某重点用户基于MongoDB这些优势,选用MongoDB作为主存储服务,该用户业务场景如下: ·存储电商...
如果所有需要的字段都在索引中,不需要额外的字段,就可以不再需要从数据页加载数据,这就是查询覆盖。 db.human.createIndex({firstName: 1, lastName: 1, gender: 1, age: 1}) IXSCAN/COLLSCAN 索引扫描/集合...
工欲善其事必先利其器半藏说道:“若你在路途中遇到上帝,上帝也会被割伤。”一、mysql 索引分类(默认使用B树结构)在数据库表中,对字段建立索引...1、普通型索引这是最基本的索引类型,而且它没有唯一性之类的限...
索引主要表现为一种目录式的数据结构,用来实现快速数据查询。索引是对数据库表(集合)中的某些字段进行抽取、排列后,形成一种非常易于遍历读取的数据集合。使用WiredTiger存储引擎: B+ 结构注意在 3.0.0 版本前...
索引基础知识 什么是索引 索引最常用的比喻就是书籍的目录,查询索引就像查询一本书的目录。...假设我们有如下文档(每行的数据在MongoDB中是存在于一个Document当中) 姓名 id 部门 city score
在MongoDB建立索引能提高查询效率,只需要扫描索引只存储的这个集合的一小部分,并只把这小部分加载到内存中,效率大大的提高,如果没有建立索引,在查询时,MongoDB必须执行全表扫描,在数据量大时,效率差别就很...
400亿该业务迁移mongodb后,同样的数据节省了极大的内存、CPU、磁盘成本,同时完美解决了容量痛点、数据不均衡痛点,并且实现了一定的性能提升。此外,迁移时候的mysql数据为400亿,3个月后的现在对应mongodb集群...
索引是数据库中离不开的话题,其作用是提高数据的获取性能。与关系型数据库一样,MongoDB 同样可以利用...MongoDB 默认索引数据结构也是 B+Tree 与关系型数据库的索引相似。本篇文章将介绍 MongoDB 中的索引与维护。
A. Jesse Jiryu Davis —— 10gen...并通过explain()输出的结果来验证实际性能,同时还分析了MongoDB的查询优化器的索引选择机制。 项目背景 预想中的项目是在MongoDB上建立一个类Disqus的评论系统(虽然Disqu
– 系统优化 – 索引设计 – 备份监控 – 模式设计 – 程序配置 一、安全措施 1.1 为MongoDB集群启用认证鉴权 MongoDB服务器在默认安装下不启用鉴权。这意味着每个人都可以直接连接到mongod实例并执行任意数据库操作...
唯一索引数据结构更加便于查找 e.g. 对name创建唯一索引,name值不能有重复 db.class1.ensureIndex({name:1},{unique:true}) * 当对某个域创建唯一索引,该域就不能再插入重复数据 稀疏索引 只针对有...
MongoDB可使用TTL索引在一定时间后或在定时时间之后自动从集合中删除数据
本系统主要针对计算机相关专业的正在做毕业设计的学生和需要项目实战练习的学习者,可作为毕业设计、课程设计、期末大作业。本系统主要针对计算机相关专业的正在做毕业设计的学生和需要项目实战练习的学习者,可作为毕业设计、课程设计、期末大作业。本系统主要针对计算机相关专业的正在做毕业设计的学生和需要项目实战练习的学习者,可作为毕业设计、课程设计、期末大作业。本系统主要针对计算机相关专业的正在做毕业设计的学生和需要项目实战练习的学习者,可作为毕业设计、课程设计、期末大作业。
在 JavaScript 编程中,处理数组是一项基本而重要的任务。数组的过滤操作是其中的一个常见需求,Array.prototype.filter 方法为此提供了强大的支持。本文将深入探讨 Array.prototype.filter 方法的工作原理、使用场景、代码示例以及与其他数组方法的比较。 Array.prototype.filter 是 JavaScript 中处理数组的强大工具,它允许开发者以声明式的方式轻松筛选出符合特定条件的元素。通过结合使用 Array.prototype.filter 和其他数组方法,可以解决各种复杂的数据筛选问题。 通过本文的详细介绍和示例代码,你应该能够掌握 Array.prototype.filter 的工作原理,并能够在实际开发中灵活运用它来处理数组数据。此外,了解其与 Array.prototype.map 和 Array.prototype.reduce 的结合使用,可以帮助你更好地编写高效且易于维护的代码。
本系统主要针对计算机相关专业的正在做毕业设计的学生和需要项目实战练习的学习者,可作为毕业设计、课程设计、期末大作业。本系统主要针对计算机相关专业的正在做毕业设计的学生和需要项目实战练习的学习者,可作为毕业设计、课程设计、期末大作业。本系统主要针对计算机相关专业的正在做毕业设计的学生和需要项目实战练习的学习者,可作为毕业设计、课程设计、期末大作业。本系统主要针对计算机相关专业的正在做毕业设计的学生和需要项目实战练习的学习者,可作为毕业设计、课程设计、期末大作业。
本系统主要针对计算机相关专业的正在做毕业设计的学生和需要项目实战练习的学习者,可作为毕业设计、课程设计、期末大作业。本系统主要针对计算机相关专业的正在做毕业设计的学生和需要项目实战练习的学习者,可作为毕业设计、课程设计、期末大作业。本系统主要针对计算机相关专业的正在做毕业设计的学生和需要项目实战练习的学习者,可作为毕业设计、课程设计、期末大作业。本系统主要针对计算机相关专业的正在做毕业设计的学生和需要项目实战练习的学习者,可作为毕业设计、课程设计、期末大作业。
SMT小型视觉贴片机控制系统源码源代码图纸 DI