在数据存储写入方面,什么更快、更便宜?将数据存储在结构与性能或者作为子实体单独存储

2024-04-27 02:59:10 发布

您现在位置:Python中文网/ 问答频道 /正文

我目前使用这个模型在appengine ndb数据存储中存储数据

class BundleModel (ndb.Model):
  product_vals=ndb.StructuredProperty(ProductModel,repeated=True)

产品型号如下:

^{pr2}$

我只把BundleModel放在数据存储中,ProductModel实体以列表的形式嵌入到每个实体中。在

我想知道这是不是一个昂贵和缓慢的方法来存储数据。将每个ProductModel存储为子实体,将BundleModel存储为父实体会更好吗?在

在这种情况下,对BundleModel的每个请求都将转换为对ProductModels的多个请求。那么,一个请求一个大数据块与多个请求(大约10个左右)请求一个小数据块的权衡也是如此吗?在写数据的时候,我会分开写一小块,而不是修改一大块。在

在成本、速度和其他参数方面,这样的变化会产生什么后果?在

谢谢!在


Tags: 数据模型实体truemodelproductrepeatedclass
1条回答
网友
1楼 · 发布于 2024-04-27 02:59:10

不,使用structured property将比使用单独的子实体更快、更便宜。在

结构化属性的工作方式是扁平化结构,并在实体中为结构中的每个属性自动创建新属性。在您的例子中,BundleModel实体将获得自动生成的属性:product_vals.p_createdproduct_vals.p_updated,等等。。在

结构化属性更好,因为它只存储一个实体,而不是两个或多个(父级+子级)。这使得它更快更便宜。请注意,访问它时,没有按实体大小计算的成本。在

注意事项:

  1. 索引大小限制:重复的结构化属性将扩展为多个列表属性。这又将为每个值创建两个索引项。一个实体总共可以有5000个索引项,在一个实体中最多可以转换为2500个属性值。在
  2. 大小:实体的最大大小可以是1Mb。在

相关问题 更多 >