簡體   English   中英

mongodb java驅動程序將大型結果集轉換為json

[英]mongodb java driver converting large result set to json

我在mongodb上運行了大約1.2億條記錄的查詢。 查詢通過mongo shell和使用Java驅動程序快速執行,但是當我嘗試通過Java驅動程序將結果轉換為json對象時,它非常慢(查詢需要<100ms但轉換為json需要> 30s) 。 結果集大約有5k項。 我正在使用JSON.serialize(cursor)進行轉換。

雖然我希望轉換為json字符串需要一點時間,但是如果我從shell運行查詢但是正在執行

var cursor = //execute query
var arr = cursor.toArray();
arr

它很快打印出來。

mongo服務器統計信息在序列化過程中報告了越來越多的頁面錯誤,但我已經將RAM增加到比整個集合加上索引大得多。

關於這里可能發生什么以及如何提高轉換到json的速度的任何想法?

當你得到光標時查詢沒有執行,即使它有,你只會得到一小部分結果。

通常我建議不要使用toArray()或序列化到內存中的字符串將所有結果加載到內存中。 50K文檔將占用大量客戶端內存,並且在分配該內存時也不會非常有效。

如果你堅持使用10gen Java驅動程序,那么你將需要等待JAVA-709解決流寫入功能。 異步Java驅動程序支持寫入流的功能。

如果你可以使用外部程序,你可能想看看mongoexport 它可以將JSON寫出到文件或標准輸出,並且應該接近最佳性能。

第一次運行查詢時,頁面錯誤是正常的。 第二次,如果服務器有足夠的內存來將整個數據集保存在內存中,您應該會看到很少的頁面錯誤。 如果您在與服務器相同的計算機上運行客戶端,則可能會將數據推出內存以在客戶端中為JSON blob分配所需的內存。

HTH - Rob

事實證明它與mongo shell一樣長。 當我從shell測試時,結果必須已經緩存,所以我認為我看到了更好的shell結果,但在我的情況下並非如此。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM