MongoDB 探索二三事
这篇文章涉及如下工具:
1、mongodb
2、datax
3、superset
4、redash
5、metabase
最近一直在探索着数据相关的事情。
比如什么开源BI工具啊。像superset、redash和metabase啦,每个工具都有优劣,我会在后续文章继续更新。
最近的项目呢,又用到了mongodb,那么顺其自然的呢,这些BI工具调研的时候呢,自然的数据源,就优先选择了mongodb。
那么万事俱备,只欠东风了。我的数据哪里找呢?为了探索这些BI工具的优劣,我么的数据集一定要大,对不对。当然你可以造假数据,但是呢,我也是比较“傲娇”吧,就是不愿意自己造数据。
9kw数据!那怎么办呢,我就百(gu)度(ge)了一下“开放数据平台”这样的字眼,找到了很多结果,选定了滴滴的“盖亚计划”,获取了一个月的轨迹数据+订单数据。滴滴也是够“大方”,我试着用datax导入了一下,三天的轨迹数据,竟然已经达到了9kw的数据量级。那相关探索工作,就做起来吧!
先大概讲讲BI工具
我只想说,superset、redash和metabase只是做了工具到数据库的连接,其他的任何性能上的优化,都没有做。
工具做的优化,主要是让不太懂sql语句的人可以快速上手,制作数据报告。
MongoDB查询优化
实验环境
- centos6
- CPU 2Core 4G
- 存储空间 500G
- MongoDB 3.4.11
我是用三台这样的机器,组成了一个Replica Set。
索引初步探索
我先做了一个简单的查询,查询的结果,大跌我的眼镜。。。
100s的查询,吓尿了
看来replica set也不能拯救单纯的但数据存储啊。那怎么办呢?
上索引!!
// 查询索引
db.collection.getIndexes();
// 增加索引
db.collection.createIndex({
"你要加索引的字段": 1/-1
});
// 1代表正序、-1代表倒序
// 当然,mongodb的索引有很多种。比如单索引、组合索引、"text"、"Geospatial Index"等等。
// 我最开始使用了"text",但是没有优化查询速度,这个我后续会继续探索原因。
replica set添加索引的方法有些特殊。
1、在备用机器上添加索引
1.shutdown mongo
>> use admin
>> db.shutdownServer()
2.非replica set方式启动mongo。
3.createIndex
2、在备用机器上添加索引
1.mongo 退级
>> rs.stepDown()
2.shutdown mongo
>> use admin
>> db.shutdownServer()
3.非replica set方式启动mongo。
4.createIndex
添加好了索引以后,给了我极大的惊喜。
这才是大数据应该有的速度
这才是大数据应该有的速度
group by 呢?
很遗憾的是,添加索引,并没有优化group by的表现。(我猜是因为 group by必须要全表查询吧)
group by 挺慢的
那么,下一步能做的是什么呢?
后续更新预告
- replica set搭建
- sharding cluster搭建
- superset+redash+metabase