2

我有一個應用程序,它使用put_async()將880行導入NDB數據存儲區。每當我運行此導入時,它都會超過數據存儲的每日50,000個寫入操作的配額。Appengine NDB:放置880行,超過數據存儲區寫操作配額。爲什麼?

我在試圖理解爲什麼這個操作是如此昂貴,可以做些什麼來保持配額。

有像這樣13列:

stringbool = ['true', 'false'] 
class BeerMenu(ndb.Model): 
    name = ndb.StringProperty() 
    brewery = ndb.StringProperty() 
    origin = ndb.StringProperty() 
    abv = ndb.FloatProperty() 
    size = ndb.FloatProperty() 
    meas = ndb.StringProperty() 
    price = ndb.FloatProperty() 
    active = ndb.StringProperty(default="false", choices=stringbool) 
    url = ndb.StringProperty() 
    bartender = ndb.StringProperty() 
    lineno = ndb.IntegerProperty() 
    purdate = ndb.DateProperty() 
    costper = ndb.FloatProperty() 

我修剪索引回一個:

- kind: BeerMenu 
    properties: 
    - name: brewery 
    - name: name 

按照SDK數據存儲瀏覽器,每行29個寫入OPS,所以那會產生25520個寫入!我假設索引消耗了剩餘的寫操作,但我不知道究竟有多少,因爲AppEngine只是說我超出了配額。

什麼是減少寫操作數的最佳策略?

+0

更新:我意識到ndb.StringProperty()默認索引。通過在許多這些項目上設置indexed = False,我可以將寫入操作減少到18個。我仍然不理解與index.yaml的關係。 – Irving

回答

8

默認情況下,除text和blob屬性之外的所有屬性都被索引。因此,如果您取消索引字符串屬性,則所有的float,int和date屬性仍會索引。您應該將indexed=False添加到其他屬性以減少寫入。

index.yaml中列出的索引是屬性索引的附加索引。 index.yaml索引適用於有序查詢和關係查詢(即,使用date> date_property的查詢將在index.yaml中生成一個條目)。

+1

所以有索引,然後有索引!謝謝你解釋。 – Irving

+1

嗚呼!寫操作現在已經降到了4行,現在我已經將所有我不查詢的float,int和date屬性設置爲indexed = False。 – Irving

+0

@我會像這樣說。有索引,然後在那之前有索引... – Vishwanath

相關問題