Java App Engine - счетчик ранжирования - PullRequest
2 голосов
/ 24 марта 2010

Я понимаю, что счётчик закрытых ключей здесь: http://code.google.com/appengine/articles/sharding_counters.html Проблема в том, что простой счётчик не будет работать в моём приложении. Я сортирую свои сущности по определенной переменной, поэтому мне возвращается не столько счет, сколько рейтинг. Мой текущий метод:

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

Результат + 1 - это ранг параметра по отношению к переменной значения в постоянных объектах сущности. Ограничением является самый высокий ранг, возвращаемый равным 1001, потому что count () может дать максимум 1000. Причина, по которой я не могу сохранить ранг объекта Entity, заключается в том, что ранги обновляются очень часто, и переустановка этой переменной ранга будет слишком дорогостоящей.

Есть идеи, как лучше всего это сделать?

Ответы [ 2 ]

1 голос
/ 24 марта 2010

Возможно, вы захотите адаптировать что-то вроде проекта google-appengine-ranklist для Java. Он строит дерево узлов 'ranker', так что элемент n-го ранга может быть найден за O (log n), и обновления также аналогичны O (log n).

0 голосов
/ 25 марта 2010

Я бы создал класс со статической переменной для хранения текущего значения счетчика. Например, вы можете создать что-то вроде следующего:

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;
    }
}
...