q.setOrder(...)在DataNucleus + MongoDB中非常慢

时间:2013-01-11 18:12:47

标签: mongodb jdo datanucleus nosql

我有一个最新的稳定DataNucleus(3.0.1),带有MongoDB数据存储区和JDO实现。 该集合包含大约1M个文档。 “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支持订购..

有什么想法吗?感谢。

1 个答案:

答案 0 :(得分:0)

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

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