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 –

相关问题