簡體   English   中英

性能Mongodb java驅動

[英]Performance Mongodb java driver

我在我的項目中使用mongodb java驅動程序在一個大集合中執行查詢(查找,聚合,mapreduce,...)(500萬個文檔)

驅動程序版本是:

<!-- MongoDB driver-->
<dependency>
  <groupId>org.mongodb</groupId>
  <artifactId>mongo-java-driver</artifactId>
  <version>3.0.3</version>
</dependency>

我的問題是當我使用api find和java中的一些過濾器時,操作需要15秒。

....
Iterable<Document> messageList = collection.find().filter(... some filters).sort(... fields);

// Find documents
for (Document message : messageList) {
....
// some code
....
}

我檢查mongo服務器日志文件,看到跟蹤是一個COMMAND而不是QUERY

2015-09-01T12:11:47.496 + 0200 I COMMAND [conn503]命令b。$ cmd命令:count {count:“logs”,查詢:{timestamp:{$ gte:new Date(1433109600000)},aplicacion:“ APP1“,事件:”Event1“}} planSummary:IXSCAN {timestamp:1,aplicacion:1} keyUpdates:0 writeConflicts:0 numYields:19089 reslen:44 locks:{Global:{acquireCount:{r:19090}},MMAPV1Journal :{acquireCount:{r:19090}},數據庫:{acquireCount:{r:19090}},收藏:{acquireCount:{R:19090}}} 14297ms

如果我從mongodb客戶端(Robomongo)運行相同的查詢,則需要0.05毫秒。

db.getCollection('logs').find({ timestamp: { $gte: new Date(1427839200000) }, aplicacion: "APP1", event: "Event1" })

並在服務器日志中為QUERY

使用驅動程序java命令進行的所有查詢(查找,聚合,...)都會被轉換? 性能比mongo shell差很多。

我認為問題是當你在mongo shell中運行查詢時,它一次只返回前20個結果,在這里你試圖讀取所有文檔並將其放入數組中

試試這個查詢,看看

列表messageList = collection.find(filter).sort(... field).limit(20).into(new ArrayList());

強烈建議在查詢字段上創建索引。

暫無
暫無

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

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