Variety:MongoDB schema分析工具

对于MongoDB这种schema-free 的数据库来说,存在数据库里的每一条数据在结构上经常不同,时间长了我们可能就很难去了解库里数据的具体结构了。今天分享一个叫Variety的小脚本,用于对collection中存储的数据情况进行分析。

Variety就是一个js脚本,直接使用mongo客户端执行。

下面是官方例子:

用下面语句插入四条结构不同一数据:

db.users.insert({name: "Tom", bio: "A nice guy.", pets: ["monkey", "fish"], someWeirdLegacyKey: "I like Ike!"});
db.users.insert({name: "Dick", bio: "I swordfight."});
db.users.insert({name: "Harry", pets: "egret"});
db.users.insert({name: "Geneviève", bio: "Ça va?"});

然后用mongo官户端对users这个collection中的内容进行分析:

$ mongo test --eval "var collection = 'users'" variety.js

{ "_id" : { "key" : "_id" }, "value" : { "types" : [ "object" ] }, "totalOccurrences" : 4, "percentContaining" : 100 }
{ "_id" : { "key" : "name" }, "value" : { "types" : [ "string" ] }, "totalOccurrences" : 4, "percentContaining" : 100 }
{ "_id" : { "key" : "bio" }, "value" : { "types" : [ "string" ] }, "totalOccurrences" : 3, "percentContaining" : 75 }
{ "_id" : { "key" : "pets" }, "value" : { "types" : [ "string", "array" ] }, "totalOccurrences" : 2, "percentContaining" : 50 }
{ "_id" : { "key" : "someWeirdLegacyKey" }, "value" : { "type" : "string" }, "totalOccurrences" : 1, "percentContaining" : 25 }

上面命令就是在test加的users这个collection上进行数据结构分析。

从上面结果我们能够看出,Variety将所有在users中出现过的字段都进行了统计,包括其类型和数量,以及出现在记录中的频率。这对于我们了解一个collection中的数据是很有用的。比如我们可以很容易看到是否在应该是数字的字段上还出现了一些string类型的值。如果是的话,可能要检查一下代码中是否有类型问题。

需要注意的是,Variety在对数据结构进行分析的时候,实际是用MapReduce来做的,会进行全表扫描操作,所以如果是对线上库进行分析,那么建议最好使用一个不提供服务的备份库或者在业务低峰来做。避免给线上业务造成压力。

获取更多Variety的信息,请移步其开源主页:github.com

anyShare分享此文章的同学,将有机会送我iphone5!
          

无觅相关文章插件,快速提升流量

分类 MongoDB · tag ,