MongoSpy, MongoWatch及MongoDB数据压缩

本文源自openmymind博客的一篇文章,文中作者介绍了两个自己用Node.JS写的MongoDB监控小工具,MongoSpy和MongoWatch,然后提出了在对MongoDB进行文本存储时使用压缩以节约空间的设想。

这两上小工具功能并不怎么强大,实现也简单,如果你会用任何一种语言操作MongoDB的话,相信你都能写一个类似的东西。

MongoSpy:一个对MongoDB慢查询进行监控的小工具,使用node.js从MongoDB的system.profile这个Collection中不停读出最新的数据并显示在Web页面,这样你就能实时的看到MongoDB的慢查询了。当然,前提是你得配置好对应DB的profile级别。具体可见:《Mongo Database Profiler》

MongoWatch:这个脚本是定时获取MongoDB的状态信息,并将其按时间顺序排列显示在Web页面上,让你可以直接看到随着时间推移你MongoDB的各项状态指标的变化。

上面说完两个小工具,有兴趣的话你可以自己去看一看具体的用法,下面部分提出了使用压缩方法对MongoDB文本数据进行压缩的想法。

MongoDB是一个文档型数据库,其数据使用BSON结构存储,BSON支持文本型数据存储的同时也支持二进制数据存储。试想如果BSON结构会将字符串做某种压缩然后以二进制的形式存储,那将会节约很大的空间。

但是这有一个前提,那就是你不会对压缩过的字段建立索引做查询。实际上这一点在很多情况下是可以保证的,比如我们使用MongoDB存储博客的博文信息,是不会对博文做查询操作的。

但是很遗憾,MongoDB并没有提供这样的功能,虽然这个功能已经早就有人提出(SERVER-164)。

既然MongoDB不支持,那么我们可以考虑在客户端实现,目前压缩算法数不胜数,这主要取决于你使用语言的支持。比如Google’s Snappy或者是MessagePack等等。实际上这一想法并不新鲜,在一些不提供二级索引的存储,比如Memcached上,我们早就使用了类似的做法来节约内存。

比如你可以把一些纯文本的数据压缩后存成二进制,再保存一个压缩类型的字段做标识,如下:

{account: 1231232, server: 'linode1', latest: 'Sep 23 2011', data: [ {type: 1, data: BinData(0,"iad42ZXJzaW9upTEuOC4wpnVwdGltZc4Ae3z")}, {type: 1, data: BinData(0,"iad42ZXJzaW9upTEuOC4wpnVwdGltZc4Ae3z")}, {type: 1, data: BinData(0,"iad42ZXJzaW9upTEuOC4wpnVwdGltZc4Ae3z")}, {type: 0, data: {virtual: 1889, mapped: 852, uptime: 7920098, hit: 99, date: 'Sep 23 2011' }}]}

上面数据前三条用了类型为1的压缩算法对数据进行压缩并存在二进制数据,第四条没有压缩。具体情况可以通过压缩算法在不同长度数据下的压缩率来调整,比如只有两个字符的value值,可能你就不需要压缩了,这时候你设置type为0表示未做压缩即可。

(责任编辑:吕光)

时间: 2024-11-20 14:47:46

MongoSpy, MongoWatch及MongoDB数据压缩的相关文章

MongoDB资料汇总

与大家共勉~ 1.MongoDB是什么 MongoDB介绍PPT分享 MongoDB GridFS介绍PPT两则 初识 MongoDB GridFS MongoDB GridFS 介绍 一个NoSQL与MongoDB的介绍PPT MongoDB:下一代MySQL? 写给Python程序员的MongoDB介绍 又一篇给Python程序员的MongoDB教程 MongoDB源码研究系列文章 白话MongoDB系列文章 MongoDB Tailable Cursors 特性介绍 MongoDB 文档阅

MongoDB使用实践:妈妈帮平台技术架构

在2017年3月12日下午于阿里巴巴西溪园区举行的MongoDB杭州用户交流会上,来自妈妈帮平台的开发总监胡兴邦给我们带来了<妈妈帮平台技术架构及MongoDB使用实践 >的分享,在演讲中他对比传统的关系型数据库,分析并总结出了MongoDB的优势和不足,以及实际使用中应注意的问题. 此次演讲的内容主要分为四个方面: 选择并使用Mongo的经历  MongoDB与关系数据型数据库的对比  MongoDB对开发和架构带来的影响  MongoDB的数据模型设计. 以下是本次演讲的整理内容: 一.早

MongoDB 哈希分片为什么数据大小不均匀?

今天接到一个用户反馈的问题,sharding集群,使用wiredtiger引擎,某个DB下集合全部用的hash分片,show dbs 发现其中一个shard里该DB的大小,跟其他的集合差别很大,其他基本在60G左右,而这个shard在200G左右? 由于这个DB下有大量的集合及索引,一眼也看不出问题,写了个脚本分析了一下,得到如下结论 somedb 下所有集合都是hash分片,并且chunk的分布是比较均匀的 show dbs 反应的是集合及索引对应的物理文件大小 集合的数据在各个shard上逻

全新版本MongoDB数据存储席卷物联网

本文首先对物联网进行了模型抽象,着重和大家剖析了MongoDB解决方案,包括文档模型.高可用复制集.分片集群和Aggregation&MapReduce,最后分享了全新的MongoDB特性. 以下为内容整理: MongoDB是文档型数据库,其核心的三大优势是灵活文档模型 .高可靠复制集. 高可扩展分片集群.在最新的 DB Engine Rank 的排名中,MongoDB 排在第4,是非关系型数据库领域的领头羊. 物联网模型抽象 物联网离我们越来越近,这主要得益于云计算和移动互联网技术的发展.物联

阿里云数据库MongoDB版正式支持3.4、RocksDB、TerarkDB存储引擎

云数据库 MongoDB 版 基于飞天分布式系统和高性能存储,提供三节点副本集的高可用架构,容灾切换,故障迁移完全透明化.并提供专业的数据库在线扩容.备份回滚.性能优化等解决方案. 了解更多 MongoDB 3.4 社区版于2016年年底正式发布,目前已经历10次的小版本迭代,在经过长时间的内部场景测试后,阿里云数据库团队正式支持 MongoDB 3.4,让用户直接在云上享受稳定的数据库服务. MongoDB 3.4 的主要功能改进参考这里,简单总结一下就是: 更快的主备同步,参考 MongoD

MongoDB最佳实践及性能优化(DTCC中国数据库技术大会分享PPT)

云数据库 MongoDB 版 基于飞天分布式系统和高性能存储,提供三节点副本集的高可用架构,容灾切换,故障迁移完全透明化.并提供专业的数据库在线扩容.备份回滚.性能优化等解决方案. 了解更多 上周五在北京DTCC分享了「32 Tips to Boost MongoDB Performance」,本文是分享的PPT以及重要内容的注解. 注解:本次分享主要「自底向上」的介绍提升 MongoDB 服务性能需要注意的问题,从硬件.操作系统.服务端一直到应用端,前面3个层次的建议主要面向DBA及运维人员,

告别 MongoDB 2.x 拥抱 3.x 版本的5大理由

云数据库 MongoDB 版 基于飞天分布式系统和高性能存储,提供三节点副本集的高可用架构,容灾切换,故障迁移完全透明化.并提供专业的数据库在线扩容.备份回滚.性能优化等解决方案. 了解更多 据不完全统计,目前还有很多同学在生产环境使用着 MongoDB 2.x 版本的服务,偶尔也会听到一些抱怨,但有些抱怨其实很没道理,因为抱怨的问题在最新版本的MongoDB里已经解决了,你缺的只是一次版本升级. 1. 更安全的数据库 3.x 版本默认WriteConcern 为{w:1},2.x 较早的版本为

比MongoDB领先一到两年 打造企业级NoSQL数据库

这几年来, NoSQL数据库凭借其易扩展.高性能.高可用.数据模型灵活等特色吸引到了大量新兴互联网公司的青睐,包括国内的淘宝.新浪.京东商城.360.搜狗等都已经在局部尝试NoSQL解决方案. 广州巨杉数据库是一家专注于新型NoSQL分布式数据库研发的创业公司,目前已经获得首轮天使投资,核心产品是SequoiaDB.巨杉数据库的创始团队成员多来自于IBM北美实验室,长期从事关系型数据库DB2的研发工作.SequoiaDB 1.3于2013年4月正式发布(最新版本为1.5),主要面向政府.电信.金

python操作mongodb根据

  本文实例讲述了python操作mongodb根据_id查询数据的实现方法.分享给大家供大家参考.具体分析如下: _id是mongodb自动生成的id,其类型为ObjectId,所以如果需要在python中通过_id查询,就需要转换类型 如果pymongo的版本号小于2.2,使用下面的语句导入ObjectId ? 1 from pymongo.objectid import ObjectId 如果pymongo的版本号大于2.2,则使用下面的语句 ? 1 from bson.objectid