在元数据存储区中存储元组的有效方法

Dre*_*ars 5 python google-app-engine google-cloud-datastore

如果我有一对浮点数,它是否更有效(计算或存储)将它们存储为GeoPtProperty比将元组腌制并将其存储为BlobProperty

如果GeoPt要更聪明地将多个值保存在单个属性中,是否可以将其用于任意数据?我可以("Johnny", 5)以同样有效的方式将元组存储在单个实体属性中吗?

Dav*_*ill 3

以下是一些经验性的答案:

GeoPtProperty使用31B的存储空间。

使用BlobProperty取决于您存储的具体内容:

  • struct.pack('>2f', lat, lon)=> 21B。
  • 使用 pickle (v2) 打包包含 float => 37B 的 2 元组。
  • 使用pickle(v0)打包一个包含浮点数的2元组=>大约30B-32B(v0对浮点数使用可变长度ascii编码)。

简而言之,它看起来并没有GeoPt做任何特别聪明的事情。如果您要存储大量这些,那么您可以用来struct包装您的漂浮物。打包和解包它们struct可能与序列化/反序列化相关的 CPU 成本有明显不同GeoPt

如果您计划为每个实体存储大量浮点数并且空间非常重要,那么您可以考虑利用CompressedBlobPropertyaetycoon 。

免责声明:这是所需的最小空间。根据房产名称的长度,每个房产的实际空间会稍大一些。模型本身也增加了开销(对于它的名称和密钥)。