3

親愛的所有數據存儲:使用ndb API時是否可以只保存到memcache?

目前我使用ndb API來存儲一些統計信息。不幸的是,這成爲我成本的主要來源。我認爲如果我只將它們保存到memcache中應該便宜得多。數據由於緩存過期而丟失並不重要。

閱讀說明書後,我以爲_use_datastore類變量可以用來配置此行爲:

class StaticModel(ndb.Model): 
    _use_datastore = False 

    userid = ndb.StringProperty() 
    created_at = ndb.DateTimeProperty(auto_now_add=True) 

我想知道,如果上述說法是正確的解決方案?

乾杯!

回答

5

我認爲有三種方法可以實現你想要的。

首先是根據您的問題在NDB模型類上設置_use_datastore = False。

第二種情況是,只要您放置/獲取/刪除StaticModel,就會傳遞use_datastore = False。一個例子是:

model = StaticModel(userid="foo") 
key = model.put(use_datastore=False) 
n = key.get(use_datastore=False) 

第三個選項是設置在NDB上下文返回任何StaticModel鍵虛假的數據存儲策略。例如:

context.set_datastore_policy(lambda key: True if key.kind() == 'StaticModel' else False) 
+0

感謝您的好評! –

+1

@james剛剛發現了這個問題,因爲你沒有使用數據存儲,當你放置()它們時,它不會爲模型生成id。在我的測試中,所有的put都成功了,但是他們返回的鍵是'Key(StaticModel,None)',它實際上是一個有效的鍵,並且會返回放入的最後一個模型,但是您將無法檢索任何其他模型。簡單的解決方法是爲模型指定一個id,'StaticModel(userid =「foo」,id =「staticmodel_01」)' – PGower

+0

嗨,@Power,我碰巧手動生成密鑰,所以這不會發生在我身上。不過,知道這個重要的限制是很好的。感謝分享和+1 –

相關問題