0

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

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

产品型号如下:

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 的每个请求都会转化为对 ProductModel 的多个请求。那么,一个对大块数据的请求与对小块数据的多个请求(大约十个左右)之间的权衡是什么?在写入数据方面,我会单独编写小块,而不是修改一大块。

这种变化在成本、速度和任何其他参数方面的影响是什么?

谢谢!

4

1 回答 1

1

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

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

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

限制注意事项:

  1. 索引大小限制:重复的结构化属性将扩展为多个列表属性。这反过来将为每个值创建两个索引条目。一个实体总共最多可以有 5000 个索引条目,这意味着一个实体内最多可以有 2500 个属性值。
  2. 大小:实体的大小最大为 1Mb。
于 2013-10-02T07:04:41.167 回答