阅读更多

最近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



相关推荐

  • 3. MongoDB存储和索引

    ​ MongoDB 从 3.0 开始引入可插拔存储引擎的概念。目前主要有。,其采用 linux 操作系统内存映射技 术,但一直饱受诟病;...相比 MV1 存储索引时,更节省对内存空间的损耗;提供压缩算法,可以大大降低对硬盘资源的消耗,

  • MongoDB组合索引的优化

    Davis带来的MongoDB上索引的优化方法以及MongoDB索引的选择机制,帮助大家缩小索引的选择空间。 A. Jesse Jiryu Davis —— 10gen工程师,从事MongoDB、Python及Tornado。在Dzone上分享了Mon

  • 记某核心MongoDB集群索引优化实践

    腾讯云数据库MongoDB天然支持高可用、分布式、高性能、高压缩、schema free、完善的客户端访问均衡策略等功能。云上某重点用户基于MongoDB这些优势,选用MongoDB作为主存储服务,该用户业务场景如下: ·存储电商...

  • MongoDB (五) 索引机制

    如果所有需要的字段都在索引中,不需要额外的字段,就可以不再需要从数据页加载数据,这就是查询覆盖。 db.human.createIndex({firstName: 1, lastName: 1, gender: 1, age: 1}) IXSCAN/COLLSCAN 索引扫描/集合...

  • mysql索引优化种类_MySQL索引类型,优化,使用数据结构

    工欲善其事必先利其器半藏说道:“若你在路途中遇到上帝,上帝也会被割伤。”一、mysql 索引分类(默认使用B树结构)在数据库表中,对字段建立索引...1、普通型索引这是最基本的索引类型,而且它没有唯一性之类的限...

  • MongoDB单值索引、复合索引、数组索引、地理空间索引、唯一索引、TTL索引、条件索引、稀疏索引、文本索引、模糊索引

    索引主要表现为一种目录式的数据结构,用来实现快速数据查询。索引是对数据库表(集合)中的某些字段进行抽取、排列后,形成一种非常易于遍历读取的数据集合。使用WiredTiger存储引擎: B+ 结构注意在 3.0.0 版本前...

  • MongoDB索引优化详解

    索引基础知识 什么是索引 索引最常用的比喻就是书籍的目录,查询索引就像查询一本书的目录。...假设我们有如下文档(每行的数据在MongoDB中是存在于一个Document当中) 姓名 id 部门 city score

  • mongodb索引使用

    在MongoDB建立索引能提高查询效率,只需要扫描索引只存储的这个集合的一小部分,并只把这小部分加载到内存中,效率大大的提高,如果没有建立索引,在查询时,MongoDB必须执行全表扫描,在数据量大时,效率差别就很...

  • 千亿级Mysql数据迁移mongodb成本节省及性能优化实践

    400亿该业务迁移mongodb后,同样的数据节省了极大的内存、CPU、磁盘成本,同时完美解决了容量痛点、数据不均衡痛点,并且实现了一定的性能提升。此外,迁移时候的mysql数据为400亿,3个月后的现在对应mongodb集群...

  • MongoDB 索引管理

    索引是数据库中离不开的话题,其作用是提高数据的获取性能。与关系型数据库一样,MongoDB 同样可以利用...MongoDB 默认索引数据结构也是 B+Tree 与关系型数据库的索引相似。本篇文章将介绍 MongoDB 中的索引与维护。

  • 10gen工程师谈MongoDB组合索引的优化

    A. Jesse Jiryu Davis —— 10gen...并通过explain()输出的结果来验证实际性能,同时还分析了MongoDB的查询优化器的索引选择机制。 项目背景 预想中的项目是在MongoDB上建立一个类Disqus的评论系统(虽然Disqu

  • mongodb详细优化策略方案

    – 系统优化 – 索引设计 – 备份监控 – 模式设计 – 程序配置 一、安全措施 1.1 为MongoDB集群启用认证鉴权 MongoDB服务器在默认安装下不启用鉴权。这意味着每个人都可以直接连接到mongod实例并执行任意数据库操作...

  • mongodb索引 操作符

    唯一索引数据结构更加便于查找 e.g. 对name创建唯一索引,name值不能有重复 db.class1.ensureIndex({name:1},{unique:true}) * 当对某个域创建唯一索引,该域就不能再插入重复数据 稀疏索引 只针对有...

  • 【MongoDB】索引属性 之 TTL索引(过期自动删除)

    MongoDB可使用TTL索引在一定时间后或在定时时间之后自动从集合中删除数据

  • "MATLAB R2018A中基于超高斯全自动组织图像盲彩色反卷积方法研究-一种下采样预设值优化策略及参数设定",MATLAB环境下基于超高斯全自动组织图像盲彩色反卷积方法 算法运行环境为MATLA

    "MATLAB R2018A中基于超高斯全自动组织图像盲彩色反卷积方法研究——一种下采样预设值优化策略及参数设定",MATLAB环境下基于超高斯全自动组织图像盲彩色反卷积方法 算法运行环境为MATLAB R2018A,压缩包=数据+代码+参考。 opts.prescale = 1; %% downsampling opts.xk_iter = 5; %% the iterations opts.k_thresh = 1 20; opts.kernel_size = 51; ,MATLAB;超高斯全自动组织图像盲彩色反卷积方法;R2018A;压缩包;参数设置;opts.prescale;opts.xk_iter;opts.k_thresh;opts.kernel_size,MATLAB超高斯图像盲彩色反卷积算法v1.0

  • (源码)基于ARM处理器的太阳能充电管理系统.zip

    # 基于ARM处理器的太阳能充电管理系统 ## 项目简介 本项目是一个基于ARM处理器的太阳能充电管理系统,旨在通过10W太阳能板为12V电池充电。系统采用MPPT(最大功率点跟踪)算法,优化太阳能板的输出电压和电流,以最大化充电效率。此外,系统还具备电压和电流监测、数据记录和夜间休眠等功能。 ## 主要特性和功能 1. MPPT控制通过微控制器调整降压转换器的占空比,优化太阳能板的输出电压,从而提高充电效率。 2. 电压和电流监测实时监测太阳能板和电池的电压,以及充电电流,确保电池不会过充。 3. 数据记录通过SD卡记录太阳能板的性能数据和电池的充电状态,便于长期监控和分析。 4. 夜间休眠系统在夜间自动进入休眠状态,减少能耗。 5. 高效电路设计采用高效率的降压转换器和3.3V转换器,确保系统在低功耗下稳定运行。 ## 安装使用步骤 1. 硬件准备

  • himate聊天应用的React Native app-himate-rn-app-master.zip

    himate聊天应用的React Native app-himate_rn_app-master.zip

  • 2025年最新开工第一课考试试题及答案.docx

    2025年最新开工第一课考试试题及答案.docx

  • 信息系统项目管理师,高级,参考论文,项目的进度管理,软考高级

    文主要面向准备参加信息系统项目管理师(软考高级)考试的专业人士,包括信息系统集成高级项目工程师、项目经理、系统架构师及IT咨询顾问等。这些人群需要掌握进度管理的理论知识与实践经验,以应对考试中的相关题目,并在实际工作中有效管理项目进度。考生可将本文作为复习进度管理相关知识的参考资料,了解考试重点与答题思路

Global site tag (gtag.js) - Google Analytics