繁体   English   中英

就数据存储写入而言,更快,更便宜的是什么? 将数据存储在ndb.StructuredProperty中或作为子实体单独存储

[英]What's faster and less expensive in terms of datastore writes? Storing data in ndb.StructuredProperty or storing separately as child entities

我目前正在使用此模型将数据存储在我的appengine ndb数据存储区中

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

ProductModel如下:

class ProductModel(ndb.Model):
  p_created=ndb.DateTimeProperty(auto_now_add=True)
  p_updated=ndb.DateTimeProperty(auto_now=True)
  p_title=ndb.StringProperty()
  p_link=ndb.StringProperty()
  p_categ=ndb.StringProperty()
  p_categ_alt=ndb.StringProperty()
  p_value=ndb.FloatProperty()
  p_location=ndb.StringProperty()
  p_avail=ndb.BooleanProperty(default=True)
  p_mod=ndb.BooleanProperty(default=False)

我只将BundleModel放在数据存储区中,并且ProductModel实体作为列表嵌入在每个实体中。

我想知道这是否是一种昂贵且缓慢的数据存储方法。 将每个ProductModel存储为一个子实体,以BundleModel作为父实体,会更好吗?

在这种情况下,对BundleModel的每个请求都将转换为对ProductModels的多个请求。 那么,要权衡一下,一个请求大数据块而不是多个请求(大约十个左右)吗? 在写数据方面,我将分别写小块,而不是修改一个大块。

这种变化在成本,速度和任何其他参数方面的后果是什么?

谢谢!

不,与使用单独的子实体相比,使用结构化属性会更快,更便宜。

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

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

限制说明:

  1. 限制索引大小:重复的结构化属性将扩展为多个列表属性。 反过来,这将为每个值创建两个索引条目。 一个实体总共最多可具有5000个索引条目,这将转换为一个实体内部的最大2500个属性值。
  2. 大小:实体的最大大小为1Mb。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM