0

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

我很好奇有关如何实现这一点的建议。我可以有一个包含数据和索引的 ndb.Model,“更新”,或者我可以在主实体上使用带有 Repeated=true 的 StructuredProperty。我也可以以某种方式存储键列表,然后将实际更新数据存储在非强链接结构中。

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

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

4

1 回答 1

1

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

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

正如您所说,为什么没有模型“更新”,一个简单的版本是让每个提供的更新创建并保存一个新模型。如果您将保存日期作为模型中的一个字段进行跟踪,则可以在查询它们时按时间对它们进行排序(大概在某种程度上存在上限)。

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

由于这对于数据存储读取来说可能代价高昂,我相信您可以实现一个在单个中使用重复属性的版本,在存储 N 个键后移至新模型,但您必须将其包装在事务中才能成为确保多次更新不会发生冲突等等。

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

于 2013-02-03T17:28:28.327 回答