【发布时间】:2015-06-12 18:18:17
【问题描述】:
我需要存储大量 ModelA 实体,并且由于应用引擎定价基于写入/读取的实体数量,因此我将 100 个实体捆绑在一起并将它们存储为一个 ModelB。
class ModelA(ndb.Expando):
a1 ... a20 = ndb.IntegerProperty()
class ModelB(ndb.Model):
data = ndb.StructuredProperty(ModelA, repeated=True)
我的数据存储中只有 80 个这样的 ModelB 实体,应该使用大约 1-2MB 的内存,但 ModelB.query().fetch() 需要 5 秒。有什么办法可以让这更快吗?使用LocalStructuredProperty 代替StructuredProperty 会更好吗?
【问题讨论】:
-
考虑到如果您需要修改
ModelA的值,以这种方式捆绑可能不是最佳的。此外,ModelB.query().fetch()将尝试加载ModelB的所有实例,您可能希望先将其过滤掉。也许你可以给我们更多关于你想要做什么的细节。 -
我不想修改ModelA的值(它们是每分钟采样一次的设备的状态),我只需要稍后阅读它们。在我的实际应用程序中,modelB 还包含一个 DateTime 变量,我正在对其进行过滤,但过滤结果将来可能会达到 80 的长度。等待 5 秒以获取仅代表的 1-2mb 数据似乎很奇怪80 个实体。
-
LocalStructuredProperty应该更好,因为它没有被索引,并且可以被压缩。无论如何,如果ModelA是一个复杂对象,请考虑到序列化/反序列化可能会带来性能问题
标签: google-app-engine google-cloud-datastore app-engine-ndb