如果我有2个“表”,
“Table Player”,(Fields - PlayerKey,PlayerName,PlayerUrlPhoto) “Table PlayerGames”,(Fields - PlayerGameKey,PlayerKey,GameDate)
如果我要列出所有游戏,我将在“PlayerGames”中创建一个查询,并显示“玩家”信息,我将需要“GetObjectbyID”来阅读PlayerName和PLayerUrlPhoto。
这样做的最佳方式是什么?
1 - 使用GetObjectByID是正确的方法(为每个“PlayerGame”记录花费1“数据存储区读取”更多) 2 - 在“PlayerGames”中存储我知道将来需要列出的字段吗? (作为playername和playerurlphoto,保存“DataStore read”以获取播放器信息) 3 - 其他方式...
有人可以给我一个关于此的提示吗?
THX
答案 0 :(得分:0)
听起来你只需要在你的实体面前使用memcache。当您按键获取播放器实体时,首先使用您从数据存储区键计算的键检查内存缓存,如果有值,请使用它。否则,执行数据存储读取,然后将结果存储在内存缓存中以备将来使用。这将大大减少数据存储区读取的数量。
当玩家更新她的记录时,只需在更新数据存储记录后删除memcache值。这会强制下一次读取转到数据存储区,并更新缓存。
答案 1 :(得分:0)
我正在用“returnmemcache”替换“GetObjectByID”。
我做了一个像这样的简单函数:
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;
}
有没有人有更好的代码?