簡體   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