当前位置 : 主页 > 网络安全 > 测试自动化 >

性能Mongodb java驱动

来源:互联网 收集:自由互联 发布时间:2021-06-22
我在我的项目中使用 mongodb java驱动程序在一个大集合中执行查询(查找,聚合,mapreduce,…)(500万个文档) 驱动程序版本是: !-- MongoDB driver--dependency groupIdorg.mongodb/groupId artifactIdmongo-java-driv
我在我的项目中使用 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] command b.$cmd command: count { count: “logs”, query: { timestamp: { $gte: new Date(1433109600000) }, aplicacion: “APP1”, event: “Event1” } } planSummary: IXSCAN { timestamp: 1, aplicacion: 1 } keyUpdates:0 writeConflicts:0 numYields:19089 reslen:44 locks:{ Global: { acquireCount: { r: 19090 } }, MMAPV1Journal: { acquireCount: { r: 19090 } }, Database: { acquireCount: { r: 19090 } }, Collection: { 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());

强烈建议在查询字段上创建索引.

网友评论