【问题标题】:GAE - Saving DataStore ReadsGAE - 保存 DataStore 读取
【发布时间】:2012-01-31 18:11:51
【问题描述】:

如果我有 2 个“表”,

"Table Player" , (Fields - PlayerKey, PlayerName, PlayerUrlPhoto) "Table PlayerGames", (Fields - PlayerGameKey, PlayerKey, GameDate)

如果我想列出所有游戏,我将在“PlayerGames”中创建一个查询,并显示“Players”信息,我必须“GetObjectbyID”来读取 PlayerName 和 PLayerUrlPhoto。

最好的方法是什么?

1 - 使用 GetObjectByID 是正确的方法(为每个“PlayerGame”记录多花费 1 个“数据存储读取”) 2 - 将我知道将来需要列出的字段存储在“PlayerGames”中? (作为 playername 和 playerurlphoto,保存“DataStore read”以获取 Player 信息) 3 - 其他方式...

  • 提醒玩家可以更改他的姓名和照片,所以如果我将姓名和照片存储在“PlayerGames”中,我也必须更新所有记录。 (并且会花费大量的 DataStore 写入)

有人可以给我一个提示吗?

谢谢

【问题讨论】:

    标签: google-app-engine google-cloud-datastore denormalization


    【解决方案1】:

    听起来您只需要在实体前面使用 memcache。当您通过键获取 Player 实体时,首先使用从数据存储键计算的键检查内存缓存,如果那里有值,请使用它。否则,执行数据存储读取,然后将结果存储在内存缓存中以备将来使用。这将大大减少数据存储读取次数。

    当玩家更新她的记录时,只需在更新数据存储记录后删除 memcache 值即可。这会强制下一次读取进入数据存储区,并更新缓存。

    【讨论】:

    • 谢谢 Dan,我就是这么认为的,我只需要有人确认 MemCache 可以解决我的问题 =)
    【解决方案2】:

    我将“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;
    }
    

    谁有更好的代码?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-04-10
      • 1970-01-01
      • 2011-07-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多