数据建模 - 在NDB中建模仅附加列表

时间:2013-02-03 16:24:40

标签: google-app-engine app-engine-ndb

我正在尝试制作通用数据结构。从本质上讲,它将是客户可以订阅的仅附加的更新列表。客户也可以发送更新。

我很想知道如何实现这一点。我可以有一个包含数据和索引的ndb.Model,'Update',或者我可以在主实体上使用带有Repeated = true的StructuredProperty。我还可以以某种方式存储密钥列表,然后以非强连接结构存储实际更新数据。

我不确定重复的属性是如何工作的 - 附加到它们的列表(通过Python API)是否必须重写它们?

我也担心一致性。由于多个客户端可能正在发送更新,我不希望它们相互覆盖并丢失更新或以某种方式最终得到两个具有相同索引的更新。

1 个答案:

答案 0 :(得分:1)

问题是您拥有数据存储区中每个模型的最大总大小。

因此,累积更新(直接存储数据或通过收集密钥存储数据)的任何单个模型最终将耗尽空间(不确定限制如何应用于结构化属性)。

为什么不像你说的那样拥有模型“更新”,而简单的版本就是让每个提供的更新创建并保存新模型。如果您将保存日期作为模型中的字段进行跟踪,则可以在查询它们时按时间对它们进行排序(可能在某个级别无论如何都存在上限)。

另外,您不必担心同时进行客户端更新覆盖,数据存储会为您担心。而且你不必担心他们被分配了什么“索引”,它是自动完成的。

由于数据存储区读取的成本可能很高,我确信你可以实现一个在单个中使用重复属性的版本,在存储N个键后转移到新模型但是你必须将它包装在一个事务确保多个更新不会发生冲突等等。

您还可以缓存生成结果的查询,并仅在保存新更新时使其无效。看看NDB,因为它提供了一些自动缓存(但不是查询)。