使用Google Cloud Datastore在所有用户之间共享数据

时间:2015-09-09 00:27:36

标签: android google-app-engine google-cloud-storage google-cloud-datastore

好的,所以在这种情况下我们有三个用户下载我的应用程序:Mike,Suzy和John。我想使用此代码为每个用户在数据存储上存储一个Entity对象:

        DatastoreService ds = DatastoreServiceFactory.getDatastoreService();
        Entity e = new Entity("Person",someKey);
        e.setProperty("name",name);
        e.setProperty("age",age);
        ds.put(e);

因此,当上面提到的三个用户第一次使用我的应用时,我的Google Cloud数据存储会显示三个实体类型,“人物”,其名称属性为:“Mike”,“Suzy”和“John”,以及相应的年龄属性。

让我们说约翰打开应用程序并希望看到还有谁在使用该应用程序,我如何获取这些实体并将其显示给约翰以便他看到Suzy和Mike的名字?

基本上,我希望能够通过在数据存储区中存储实体,以及向每个用户授予对其他用户实体的访问权限来在所有用户之间共享数据。

另一种情况可能是高分榜单的实现:假设我只想让所有用户保持前5名的高分:

        Entity e2 = new Entity("HiScore",aKey);
        e.setProperty("score",score);
        ds.put(e);

因此,当用户获得新分数时,我会提取所有现有实体,检查所有实体的分数属性,并通过替换分数来相应地更新数据存储区。与此同时,我还希望将此数据更新推送到其他设备。

以下是我想要完成的两个一般示例(我知道google-play API可以为您处理高分,所以不要告诉我使用它,因为我不一定会尝试实现高分)。简而言之,我想创建一个存在于我的数据存储区中的当前实体的提要,所有用户都可以看到

使用数据存储区实体是正确的方法吗?

1 个答案:

答案 0 :(得分:0)

这是一个非常广泛的问题(或一组问题),但要回答你的一些观点:

  

让我们说约翰打开应用程序并希望看到还有谁在使用该应用程序,我如何获取这些实体并将其显示给约翰以便他看到Suzy和Mike的名字?

这是一个非常简单的查询,如下所示:

DatastoreService ds = DatastoreServiceFactory.getDatastoreService();
Query q = new Query("Person");
List<Entity> persons = ds.prepare(q).asList(FetchOptions.Builder.withDefaults());

然后你说

  

我希望能够通过在数据存储区中存储实体并授予其他用户访问权限来在所有用户之间共享数据。每个用户的实体

用户不拥有实体;您的Cloud Platform项目拥有实体。因此,应由您的应用程序来确定谁可以查看哪些数据。除非您的应用程序已制定规则,否则数据存储中没有任何内在因素阻止Suzy看到Mike的Person实体。

最后,

  

另一种情况可能是高分榜单的实施:假设我只想让所有用户保持前5名的高分......

     

...因此,当用户获得新分数时,我会提取所有现有实体,检查所有实体的分数属性,并通过替换分数来相应地更新数据存储区。

根据您的流量,您可能会发现解决方案无法很好地扩展;我建议阅读this case study