公司有一个数据来源,一天的数据量大概是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下如果装成服务,有时自动启动了,但客户端连不上,这时需要用命令再去启动
有不对的地方欢迎大家给予指正,或者有更好的办法来解决希望能够进行交流!