Google AppEngine:在DataStore中存储数据的方法

时间:2014-07-01 20:19:03

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

我是GAE的新手,非常感谢您对GAE-app数据存储方法的建议。

简单的例子:
- 有作者和文件实体
- 每个作者可能是几个文件的创建者
所以我们有两个选择:
1)将所有文件作为子项添加到相应的作者实体(拥有关系)
2)在每个文档中添加一个字段,用于标识作者(无主链接或其他内容)

每种方法的优点和缺点是什么?

附:我知道groups and strong consistency。还有什么?
买路,最终的一致性,实际上是什么 - 分钟,小时......

感谢

2 个答案:

答案 0 :(得分:1)

大多数NoSQL存储的一般准则是构建数据,使其最适合您的主要用例和非规范化,因为您需要满足其他需求。

如果您最常见的操作是阅读作者的所有文档,那么将文档放在作者下是有意义的。如果按文档获取,则引用作者可能更实用。

数据存储的定价方式(就读取与写入的成本而言)将有助于指导您 - 最便宜的通常也是最有效的设计。例如,如果文档写得很重并且索引很多,那么当您想要更新单个文档时,选项1可能会很昂贵。

W.R.T最终的一致性,它通常不会比最坏的情况长几秒,但是没有保证。在必须准确的情况下(例如,作者编辑文档然后在发布之前预览文档),您不应该依赖它。请记住,get by id是非常一致的读取,因此通常可以根据需要进行缓解。

答案 1 :(得分:0)

正在搜索答案我已经完成了多次攻击,并且还遇到了有用的thisthis帖子。

所以我形成了自己的观点并希望能帮到某人:

实体群体优势:
+内在strong consistency(另见transactions
+ Ancestor调用可能类似于“微缩名称空间”。这可用于分离仍有可能共享数据的数据。

实体组由于每秒写入次数限制(see here in the end)而存在缺点:
- 可能会影响可扩展性 - 可能会降低并发访问速度 - 无论如何都不应该很大,因为对组的访问是序列化的

因此,使用实体组IMHO仅限于:
- 要求强一致性的情况。仍然要避免contention组尽可能小 - 单用户数据存储
在所有其他情况下,我会避免它们。