0

, если у меня есть 2 "Таблицы",GAE - Сохранение DataStore Читает

"Таблица игрока" (Fields - PlayerKey, PlayerName, PlayerUrlPhoto) "Таблица PlayerGames" (Fields - PlayerGameKey, PlayerKey, GameDate)

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

Каков наилучший способ для этого?

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

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

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

ТНХ

ответ

0

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

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

+0

Спасибо, Dan, это было то, что я упрямый, мне просто нужен был кто-то, чтобы подтвердить, что MemCache может решить мою проблему =) – LeandroRezende

0

Я заменяю «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; 
} 

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

Смежные вопросы