公司有一個數據來源,一天的數據量大概是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下如果裝成服務,有時自動啓動了,但客戶端連不上,這時需要用命令再去啓動
有不對的地方歡迎大家給予指正,或者有更好的辦法來解決希望能夠進行交流!