我從昨天開始玩MongoDB,絕對喜歡它。我正在嘗試導入大量數據(20億行)並對其進行索引,但似乎沒有使用我的系統擁有的8個內核,並且導入速度正常(60000記錄/秒)。我只能想象在這個集合中索引兩列可能需要多長時間。有沒有MondoDB類型的數據庫利用CPU的多核特性?是否有任何多核開發NoSQL系統?
2
A
回答
9
如果MongoDB有一個致命弱點,那就是它只支持單線程寫和單線程map-reduce。
與往常一樣,這裏存在取捨。單線程寫入是避免鎖定問題和最小化開銷的最簡單方法。以同樣的方式,多線程映射縮減是鎖定數據的好方法。因此,生產系統上的單線程映射減少可能更容易和更安全。
但是,你不是沒有工具在這裏。 MongoDB將爲每個實例提供一個寫入線程。所以,如果你分片MongoDB,那麼你會得到每個分片的一個寫線程。
如果你想要20億行上的多個索引,你會想看看分片。這裏有一些快速數學:MongoID是12個字節。 MongoID的索引將爲2B * 12字節= 22GB +。如果你現在想要添加兩個索引(甚至只是兩個4字節整數),我們每個都談論7.5GB。
所以在2B行,你說的是在索引中有超過37GB(最小值爲)。在大多數8核心服務器上,這意味着你甚至無法將索引保存在內存中,更不用說任何數據了。
所以如果你想在這裏認真的表現,你會想開始看分片。只是基於一般數字。 FWIW,MySQL不會擅長處理2B文檔。有了這麼多的數據,你真的想要多個服務器來跟上負載。
+0
我想分拆是這次走的唯一途徑。謝謝你的建議。我在MySQL和MongoDB中都有索引。將使用第一個完成的:)另外一個很好的基準測試練習...... – Legend 2010-10-03 06:32:35
相關問題
- 1. 是否有任何開源辦理入住/退房系統?
- 2. Redis/Memcached/MongoDB(或任何NoSQL系統)是否支持MySQL的DUPLICATE KEY UPDATE?
- 3. 開發多語言系統
- 4. 是否存在任何開源,完整的系統verilog語法?
- 5. 操作系統是否對Ruby開發有重大影響?
- 6. 在MAC/Linux操作系統上開發asp.net核心的任何工具?
- 7. 是否可管理的堆不能擴展到多核系統
- 8. 是否有任何開源的基於Java的知識庫系統
- 9. 是否有支持加密的Windows的任何開源文件系統?
- 10. 評論系統rdbms vs nosql
- 11. 是否有任何允許回調的Thrift式RPC系統?
- 12. ASP.NET中是否有任何郵件隊列系統?
- 13. 是否有任何純文本驗證碼系統可用?
- 14. Linux操作系統中是否有任何Bash腳本示例?
- 15. 是否有任何操作系統不支持線程?
- 16. 是否有任何系統調用阻塞內存
- 17. 如何測試NoSQL數據庫系統
- 18. iOS開發是否有任何開源計算器鍵盤?
- 19. NoSql數據庫是否有任何JDBC實現?
- 20. NoSQL系統保存關係數據
- 21. 四核內核的性能是否比雙內核的Web開發好得多?
- 22. 什麼是初學者內核開發的良好準系統Linux發行版?
- 23. 是否有任何系統用於記錄或跟蹤在開發時遇到哪種類型的錯誤?
- 24. Apple是否在任何地方以應用程序購買系統狀態發佈?是否有可能確定他們的系統是否停機?
- 25. 是否有具有推理能力的開源專家系統?
- 26. 任何開源發佈管理系統,如codeplex或sourceforge?
- 27. 離子應用程序開發是否有效?在Ionic Framework中是否有任何Android應用程序開發?
- 28. 目標C中的消息系統是否依賴於內核消息系統?
- 29. FORTRAN是否有任何開源ODBC庫?
- 30. 文件系統開發
我不認爲你可以高效地處理來自多個內核的數據插入。 – zneak 2010-10-03 01:06:19
@zneak:我實際上正在考慮將數據插入多個集合(表格)。只是我不確定這樣分手會有好處。我的意思是,我不會在大表上添加索引,而是創建許多小表,然後在每個表上創建一個索引。然後從前端查詢所有表格以獲取所需的值。你對這種方法有什麼建議嗎? – Legend 2010-10-03 01:12:38
我不是NoSQL專家。我所知道的是,你不能安全地修改多線程中的數據而不鎖定它,因此我的評論。 :/抱歉,我無法幫助。 (不過,我也知道你應該填充你的集合,然後創建索引,否則,你會浪費很多時間在每個插入時重新索引數據。) – zneak 2010-10-03 04:41:13