gpt4 book ai didi

python - 在 App-Engine 中存储元组列表的最佳方式是什么?

转载 作者:太空狗 更新时间:2023-10-29 19:25:55 25 4
gpt4 key购买 nike

当存储和检索包含元组列表的数据存储实体时,存储此列表的最有效方法是什么?

当我遇到这个问题时,元组可以是从键值对到日期时间和示例结果,再到 (x, y) 坐标的任何内容。
元组的数量是可变的,范围从 1 到几百。

包含这些元组的实体需要快速/廉价地引用,并且不需要对元组值进行索引。

我遇到过几次这个问题,并通过多种不同的方式解决了它。

方法一:

将元组值转换为字符串并用一些分隔符将它们连接在一起。

def PutEntity(entity, tuples):
entity.tuples = ['_'.join(tuple) for tuple in tuples]
entity.put()

优点:结果在 Datastore Viewer 中很容易读取,一次获取所有内容。缺点:潜在的精度损失,需要程序员反序列化/序列化,需要更多字节以字符串格式存储数据。

方法二:

将每个元组值存储在列表中并压缩/解压缩元组。

def PutEntity(entity, tuples):
entity.keys = [tuple[0] for tuple in tuples]
entity.values = [tuple[1] for tuple in tuples]
entity.put()

优点:不会损失精度,在数据存储区查看器中查看数据时会造成混淆但仍然可以查看数据,能够强制执行类型,一次获取所有内容。
缺点:程序员需要压缩/解压缩元组或小心维护列表中的顺序。

方法三:

序列化一些庄园 json、pickle、 Protocol Buffer 中的元组列表,并将其存储在 blob 或文本属性中。

优点:可用于对象和更复杂的对象,错误丢失匹配元组值的风险更小。
缺点:Blob 存储访问需要额外的提取?无法在数据存储查看器中查看数据。

方法四:

将元组存储在另一个实体中并保留键列表。

优点:更明显的架构。如果实体是一个 View ,我们不再需要保留两份元组数据。
缺点:需要两次提取,一次用于实体和键列表,一次用于元组。

我想知道是否有人知道哪个表现最好,是否有一种方法我没有想过?

谢谢, 吉姆

最佳答案

我使用方法 3。Blobstore 可能需要额外的提取,但 db.BlobProperty 不需要。对于从存储中取出的对象与放入时完全一样很重要的对象,我使用 PickleProperty(可以在 tipfy 和其他一些实用程序库中找到)。

对于我只需要存储其状态的对象,我编写了一个与 PickleProperty 类似工作的 JsonProperty 函数(但显然使用 SimpleJson)。

对我而言,在一次获取中获取所有数据并防止白痴比 cpu 性能(在 App Engine 中)更重要。根据关于 AppStats 的 Google I/O 演讲,访问数据存储几乎总是比一些本地解析更昂贵。

关于python - 在 App-Engine 中存储元组列表的最佳方式是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5044653/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com