我目前正在使用此模型在我的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的每个请求都会转换为对ProductModel的多个请求。那么需要权衡一个大块数据的请求与小块数据的多个请求(大约十个左右)之间的权衡吗?在编写数据方面,我会分别编写小块而不是修改一个大块。
在成本,速度和任何其他参数方面,这种变化的后果是什么?
谢谢!
答案 0 :(得分:1)
不,使用structured property比使用单独的子实体更快,更便宜。
结构化属性的工作方式是展平结构并在结构中为每个属性在实体中自动创建新属性。在您的情况下,您的BundleModel
实体会获得自动生成的属性:product_vals.p_created
,product_vals.p_updated
等。
结构化属性更好,因为它只存储一个实体,而不是两个或更多(父+子)。这使它更快,更便宜。请注意,访问它时,每个实体大小没有成本。
关于限制的说明: