Java App Engine - 排名靠前

时间:2010-03-23 23:24:32

标签: java google-app-engine jdo

我理解分片计数器,这里:http://code.google.com/appengine/articles/sharding_counters.html问题是一个简单的计数器在我的应用程序中不起作用。我正在通过一个特定的变量对我的实体进行排序,所以我得到的不是计数,而是更多的排名。我目前的方法是:

SELECT COUNT(this) FROM Entity.class WHERE value <= ?

结果+ 1是持久性Entity对象中与值变量相关的参数的等级。这个限制是返回的最高等级是1001,因为count()最多可以给出1000。 我无法在实体对象上存储排名的原因是排名经常更新,重新设置此排名变量的成本太高。

关于实现这一目标的最佳方法的任何想法?

2 个答案:

答案 0 :(得分:1)

您可能需要考虑将类似google-appengine-ranklist项目的内容调整为Java。它构建了一个'ranker'节点树,这样第n个排序项就可以在O(log n)时间内找到,更新同样是O(log n)。

答案 1 :(得分:0)

我会创建一个带有静态变量的类来保存当前计数值。例如,您可以创建以下内容:

public class Counter {
    private static int counter = -1;

    public static synchronized int getNextValue() {
    if (counter == -1) {                
            counter = // Insert code that retrieves the highest value from Google datastore
    }
    counter++;
    return counter;
    }
}