使用 google Cloud Datastore 在所有用户之间共享数据
Posted
技术标签:
【中文标题】使用 google Cloud Datastore 在所有用户之间共享数据【英文标题】:Use google Cloud Datastore to share data between all users 【发布时间】:2015-12-04 19:24:33 【问题描述】:好的,所以在这种情况下,我们有三个用户下载我的应用程序:Mike、Suzy 和 John。我想为每个用户使用此代码在 Datastore 上存储一个实体对象:
DatastoreService ds = DatastoreServiceFactory.getDatastoreService();
Entity e = new Entity("Person",someKey);
e.setProperty("name",name);
e.setProperty("age",age);
ds.put(e);
因此,当上面提到的三个用户第一次使用我的应用时,我的 Google Cloud Datastore 会显示三个实体,即“Person”,其名称属性为:“Mike”、“Suzy”和“John”,而对应的年龄属性。
假设 John 打开应用并想查看还有谁在使用该应用,我如何获取这些实体并将它们显示给 john,以便他看到 Suzy 和 Mike 的名字?
基本上,我希望能够在所有用户之间共享数据,方法是在 Datastore 上存储实体,并向每个用户授予对其他用户实体的访问权限。
另一种情况可能是高分列表的实现:假设我只想在所有用户中保持前 5 个历史最高分:
Entity e2 = new Entity("HiScore",aKey);
e.setProperty("score",score);
ds.put(e);
因此,当用户获得新分数时,我会提取所有现有实体,检查所有实体的分数属性,并通过替换分数来相应地更新数据存储。同时,我也想把这个数据更新推送到其他设备上。
所以这里有两个关于我想要完成的一般示例(我知道 google-play API 可以为你处理高分,所以不要告诉我使用它,因为我不一定会尝试实现高分)。简而言之,我想创建一个所有用户都可以看到的数据存储中存在的当前实体的提要
使用数据存储实体是实现此目的的正确方法吗?
【问题讨论】:
我同意@tx802 的回答,应该差不多涵盖了它。尽管您已经放弃了,但我真的建议您深入了解 Google Play 服务,它不仅仅是一个高分 API,它还有数十个不错的 kickass API 来处理您很可能需要的用户之间的交互。 我认为您使用了错误的方法。云数据存储是一个数据存储。您在问题中提到的所有内容都是应用程序级别的问题。我会将此作为答案发布,但这不是答案,而是建议。您需要在应用程序级别而不是在数据库中实现数据共享。如果您来自 RDBMS 背景,您可能已经在数据库级别实现了这一点,但在云存储世界中,这是在应用程序中实现的。 【参考方案1】:这是一个非常广泛的问题(或一组问题),但要回答您的一些个人观点:
假设 John 打开应用并想查看还有谁在使用该应用,我如何获取这些实体并将它们显示给 john,以便他看到 Suzy 和 Mike 的名字?
这是一个非常简单的查询,如下所示:
DatastoreService ds = DatastoreServiceFactory.getDatastoreService();
Query q = new Query("Person");
List<Entity> persons = ds.prepare(q).asList(FetchOptions.Builder.withDefaults());
然后你说
我希望能够在所有用户之间共享数据,方法是将实体存储在 Datastore 中,并向每个用户授予对其他用户实体的访问权限
用户不拥有实体;您的 Cloud Platform 项目拥有实体。因此,由您的应用程序决定谁可以查看哪些数据。除非您的应用程序设置了规则,否则 Datastore 中没有任何固有的东西可以阻止 Suzy 看到 Mike 的 Person
实体。
最后,
另一种情况可能是高分列表的实现:假设我只想在所有用户中保持前 5 个历史最高分...
...所以当用户获得新分数时,我会拉取所有现有实体,检查所有实体的分数属性,并通过替换分数来相应地更新数据存储。
根据您的流量,您可能会发现该解决方案无法很好地扩展;我建议阅读this case study。
【讨论】:
以上是关于使用 google Cloud Datastore 在所有用户之间共享数据的主要内容,如果未能解决你的问题,请参考以下文章
在 Google Cloud Datastore 上使用动态类型
Google Cloud Datastore Emulator 如何验证我们的 datastore-index.xml?
使用 google Cloud Datastore 在所有用户之间共享数据
无法连接到本地 Google Cloud Datastore 模拟器
在 Google Cloud Datastore 与 Google Cloud Bigtable 中存储用户事件历史记录