GAE - Сохранение чтения из хранилища данных - PullRequest
0 голосов
/ 31 января 2012

если у меня есть 2 «Таблицы»,

«Игрок за столом», (Поля - PlayerKey, PlayerName, PlayerUrlPhoto) «Игрок за столом», (Поля - PlayerGameKey, PlayerKey, GameDate)

если я хочу перечислить все игры, я создам запрос в «PlayerGames», и для отображения информации об «игроках» мне потребуется «GetObjectbyID», чтобы прочитать PlayerName и PLayerUrlPhoto.

Что лучшеспособ сделать это?

1 - использование GetObjectByID является правильным способом (тратить 1 «чтение хранилища данных» больше для каждой записи «PlayerGame») 2 - Хранить в «PlayerGames» поля, которые, как я знаю, мне понадобятсяперечислить в будущем?(в качестве имени игрока и playerurlphoto, сохранение «чтения хранилища данных» для получения информации об игроке) 3 - Другой способ ...

  • , напоминающий, что игрок может изменить свое имя и свою фотографию, поэтому, если я сохранюимя и фото на "PlayerGames" мне тоже придется обновить все записи.(и потратит много времени на записи в хранилище данных)

Может кто-нибудь дать мне совет по этому поводу?

thx

Ответы [ 2 ]

0 голосов
/ 02 февраля 2012

Я заменяю «GetObjectByID» на «returnmemcache».

Я сделал простую функцию, подобную этой:

public Object returnmemcache(Class class,Key key)
{
     Cache cache = null;
     Object returntemp = null;
     try {
        CacheFactory cacheFactory = CacheManager.getInstance().getCacheFactory();
        cache = cacheFactory.createCache(Collections.emptyMap());
        returntemp = cache.get(key);
        if (returntemp==null)
        {   
            PersistenceManager pm = PMF.get().getPersistenceManager();
            returntemp=pm.getObjectById(class,key);
                    pm.close();
            cache.put(key, returntemp);
        }
    } catch (CacheException e) {
        PersistenceManager pm = PMF.get().getPersistenceManager();
        returntemp=pm.getObjectById(class.getClass(),key);
            pm.close();
    }
    return returntemp;
}

У кого-нибудь есть лучший код?

0 голосов
/ 01 февраля 2012

Похоже, вам просто нужно использовать memcache перед вашими сущностями.Когда вы получаете сущности Player по ключу, сначала проверьте memcache, используя ключ, который вы вычисляете по ключу хранилища данных, и, если там есть значение, используйте его.В противном случае выполните чтение хранилища данных, затем сохраните результат в memcache для будущего использования.Это резко сократит количество операций чтения хранилища данных.

Когда игрок обновляет свою запись, просто удалите значение memcache после обновления записи хранилища данных.Это заставляет при следующем чтении перейти в хранилище данных и обновить кэш.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...