我面临一点可扩展性问题。我正在使用JDO来查询我的数据存储区。 我需要检索给定实体的所有键(这些键的类型为Long)。鉴于在我的数据存储区中这样的实体有1.000.000条记录,我需要以非常有效的方式获取它们,以便在后台任务中循环遍历这个集合。
哪种方法最有效?
如果我不仅需要钥匙,还需要另一个领域呢?假设我有一个名为TPImage的实体:
Long idPic; //this is my key
String title; //this is the field I want to retrieve together with the key
... // other properties
如何在一个有效的查询中检索idPic和title?
像
这样的东西 Query q = new Query("select idPic, title from " + TPImage.class.getName());
但效率更高?
非常感谢!
再见 cghersi
答案 0 :(得分:1)
你遇到的缩放问题是你需要所有的键 - 而不是你不能有效地获取它们。无论你使用什么系统,这总是至少是O(n)。
您应该批量完成工作,而不是尝试预取所有内容,而是使用cursors有效地检索下一组结果。
如果您需要模型中的字段,则必须检索整个模型实例 - 它们存储为序列化blob,因此无法仅检索一个字段。
答案 1 :(得分:0)
您的问题有2个部分。对于第一部分,仅获取键,您可以指定查询只应在创建时通过将参数keys_only设置为True来返回键。 看这里: http://code.google.com/appengine/docs/python/datastore/queryclass.html#Query
这会有所帮助,因为您没有检索整个实体。但是,如果您想一次处理1,000,000个,那么它可能对您没有帮助。在这种情况下,请听取尼克的建议并分解工作。