MongoSpy, MongoWatch及MongoDB数据压缩

标签: MongoDB 理论原地 MongoSpy MongoWatch 压缩 | 发表时间:2011-10-08 19:44 | 作者:nosqlfan gOODiDEA
出处:http://blog.nosqlfan.com

本文源自openmymind博客的一篇文章,文中作者介绍了两个自己用Node.JS写的MongoDB监控小工具,MongoSpyMongoWatch,然后提出了在对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表示未做压缩即可。

参考文章:openmymind.net

相关文章:

压缩 MongoDB 的数据文件

mtop – 针对 MongoDB 的 top 命令

mongodb GridFS 介绍

MongoDB 1.4.3 发布

简单的MongoDB
无觅

相关 [mongospy mongowatch mongodb] 推荐:

MongoSpy, MongoWatch及MongoDB数据压缩

- gOODiDEA - NoSQLFan
本文源自openmymind博客的一篇文章,文中作者介绍了两个自己用Node.JS写的MongoDB监控小工具,MongoSpy和MongoWatch,然后提出了在对MongoDB进行文本存储时使用压缩以节约空间的设想. 这两上小工具功能并不怎么强大,实现也简单,如果你会用任何一种语言操作MongoDB的话,相信你都能写一个类似的东西.

[mongodb] java操作mongodb

- - 数据库 - ITeye博客
           //实例化Mongo对象,连接27017端口.                               //连接名为yourdb的数据库,假如数据库不存在的话,mongodb会自动建立. //从Mongodb中获得名为yourColleection的数据集合,如果该数据集合不存在,Mongodb会为其新建立.

【MongoDB】MongoDB之优化器Profiler

- - CSDN博客数据库推荐文章
在mysql数据库中,慢查询日志经常作为优化数据库的依据, mongodb中依然有类似的功能. Mongodb自带的profiler,可以方便地记录所有耗时的操作,以便于调优;. 一、开始profiler功能. 开启profier功能有两种:. 第一种就是直接在启动参数里面进行设置,就在茄冬mongodb时候添加-profile=级别.

夜说mongodb

- Lianhui Wang - NoSQLFan
前两天本站刚刚分享了wordnik使用MongoDB经验的文章:《Wordnik 的 MongoDB 使用经历》,今天又看到一位朋友对这方面做的总结,分享在这里,供大家参考. 赋闲以后很长没有更新博客了,说忙完全是借口,多半因为没有兴致所致. 今天凌晨比赛多多,趁着比赛的前奏和间隙,遂浏览些技术文章.

MongoDB与内存

- 高春辉 - 火丁笔记
但凡初次接触MongoDB的人,无不惊讶于它对内存的贪得无厌,至于个中缘由,我先讲讲Linux是如何管理内存的,再说说MongoDB是如何使用内存的,答案自然就清楚了. 据说带着问题学习更有效,那就先看一个MongoDB服务器的top命令结果:. 这台MongoDB服务器有没有性能问题. 先讲讲Linux是如何管理内存的.

白话MongoDB(一)

- Ease - 江边潮未尽,枫红一季秋
按照官方的说法,MongoDB是一种可扩展的高性能的开源的面向文档(document-oriented )的数据库,采用C++开发. 注意mongo不是mango(芒果),这个词是从humongous中截取出来的,其野心不言而明,直指海量数据存储. 和其他很多NoSQL不太一样,MongoDB背后有一个专门的商业公司在提供支持和推广,有点类似MySQL AB的模式.

MongoDB 索引

- - 博客园_首页
索引是用来加快查询的,数据库索引与数据的索引类似,有了索引就不需要翻遍整本书,数据库可以直接在索引中查找,. 使得查询速度很快,在索引中找到条目后,就可以直接跳转到目标文档的位置.. 要掌握如何为查询配置最佳索引会有些难度.. MongoDB索引几乎和关系型数据库的索引一样.绝大数优化关系型数据库索引的技巧同样适用于MongoDB..

MongoDB sql操作

- - 数据库 - ITeye博客
1.  基本查询:. 下面的示例等同于SQL语句的where name = "stephen" and age = 35.      --返回指定的文档键值对. 下面的示例将只是返回name和age键值对.      --指定不返回的文档键值对. 下面的示例将返回除name之外的所有键值对.

MongoDB Shareding部署

- - 开源小站
几年前写过 MongoDB的Sharding和replication. 其实现在看起来Replication还是可以,Sharding的部分有点过于简单了. 于是现在重新补充一下,至少也更新下,毕竟现在的MongoDB已经到了2.6,于当时的2.2还是有所差异的. 正常的情况下,应该是有6台主机实现一个比较像样的MongoDB Sharding集群,它们分别是mongos /router1台,config 3台,shard 2台.