0

我有一个带有 MongoDB 数据存储和 JDO 实现的最新稳定 DataNucleus (3.0.1)。该集合有大约 100 万份文档。“id”字段被索引。此代码需要几分钟才能执行:

Query q = pm.newQuery(CellMeasurement.class);
q.setOrdering("id descending");
q.setRange(0, count);
Collection<CellMeasurement> result = (Collection<CellMeasurement>)q.execute();

如果我删除q.setOrdering(...)一切正常,因为count=1000加载大约需要一秒钟。

看起来 DN 进行了内存重新排序,这有什么意义吗?MongoDB 本身通过这个索引字段立即订购,API 支持订购..

任何想法 ?谢谢。

4

1 回答 1

0

查看日志(对于任何应用程序)显然会发现很多;在这种情况下,实际执行的是什么查询。在这种情况下,它会很容易地告诉您,当前没有实现排序以在数据存储中执行。

显然,任何人都可以为这种自首次发布以来一直是开源的代码库做出贡献。org.datanucleus.store.mongodb.query.QueryToMongoDBMapper 方法“compileOrdering”是您需要实现的地方,然后在完成后将补丁附加到 JIRA 问题。谢谢

于 2013-01-11T18:28:15.607 回答