公司有一个数据来源,一天的数据量大概是3千万,要实时进行存储,并能够快速查询,并自动进行维护。
一、调研测试
测试数据准备,20个字段,数字类型+字符串类型组合,每条数据大小设计为1k,数据值不一样。用mongo客户端进行插入操作,用mongostat观察每秒入库数据,及最后生成的数据文件大小。
1、单节点windows server 2008 64
插入记录数 |
所花时间(秒) |
每秒插入数 |
数据文件大小 |
10w |
8 |
12500 |
256M |
100w |
76 |
13157.8 |
3.73G |
1000w |
823 |
12150.6 |
11.7G |
10000w |
11h20s |
2523.9 |
85.7G |
插入记录数 |
所花时间(秒) |
每秒插入数 |
数据文件大小 |
10w |
59 |
1694.9 |
536.9M * 2 |
100w |
1687 |
592.7 |
3757.1M * 2 |
1000w |
17400 |
574.7 |
20.6G * 2 |
二、解决问题
1、mongo的内存控制
设置定期刷库与定点刷卡方式来释放内存
db.command(new BasicDBObject("closeAllDatabases", 1))
2、数据库维护
创建参数规定创建数据库能够按年月日来创建数据库,并且设置可以保存多少个库来保证硬盘的空间,索引的key都是用最简单的字母表示。
3、故障恢复
创建replicat set集群方式可以来自动恢复故障
4、快速查询
创建数据库时创建索引,提供参数配置规定按哪些字段来建索引。
三、 感想
1、使用mongo需要有足够的内存
2、mongo同一个查询会有规律的有一次是时间比较长的
3、windows下如果装成服务,有时自动启动了,但客户端连不上,这时需要用命令再去启动
有不对的地方欢迎大家给予指正,或者有更好的办法来解决希望能够进行交流!