簡體   English   中英

Mongodb 異步與同步 Java 驅動程序

[英]Mongodb Async vs Sync Java driver

我對 Mongodb 的 java 驅動程序感到很困惑。閱讀官方文檔,您似乎可以使用普通的 MondoDB 驅動程序或 MongoDB 異步驅動程序。

第一個問題是:我可以在同一個應用程序中同時使用兩者還是必須選擇一個?

嘗試使用 Async 驅動程序時,我發現我以前(使用普通驅動程序)做的事情現在有點迷路了。 例如,我曾經這樣做:

FindIterable<Document> iterable = db.getCollection("my_coll").find(query);
String json = JSON.serialize(iterable);

現在我真的不知道如何將結果轉換為 json 字符串,因為它們沒有包含異步驅動程序中的JSON class。 第二個問題:如果我不能同時使用兩個驅動程序,我該如何序列化FindIterable<Document>

答案是:

  • 是的,你當然可以使用這兩種驅動程序。 實際上,如果您真的關心應用程序的性能,那么您應該使用Sync驅動程序來處理那些需要MongoDB響應的操作(比如find())。 並且您將使用Async驅動程序來處理那些您並不真正需要的驅動程序,以用於“即發即忘”操作(例如插入或更新)。
  • 因此,序列化問題得到了上述答案。 如果您收到響應,那么您正在使用同步驅動程序,因此您可以繼續使用JSON類:

JSON.serialize(iterable);

需要注意的一件事是這兩個驅動程序共享一些依賴項。 嘗試對齊驅動程序的版本,以便它們都期望相同版本的共同依賴項,否則您可能會遇到一些“未找到類”類型的問題,這是由於 class 加載程序為一個或一個選擇了 class 的不兼容版本而導致的其他司機。

我要補充一點,我發現異步驅動程序非常適合的用例是大型導出樣式查詢,我必須從 web 服務返回大量數據。 在這種情況下,我必須返回一個大的 CSV。以前,此方法會占用大量 RAM,在將其寫入客戶端之前構建整套 CSV 數據。 使用異步驅動程序,我可以從 MongoDB 讀取小批量(一次 500 條記錄似乎是最佳的),並將它們以分塊響應的形式寫入瀏覽器客戶端。

暫無
暫無

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

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