在Google AppEngine中使用ndb时,Memcache set_multi()出现错误

3
我们的Python Google AppEngine应用程序中出现了一些过时的Datastore数据。我检查了日志,发现在更新相应数据的请求中出现了以下警告:
Memcache set_multi() error: [':part', ':full']

在ndb.put()之后,会生成日志记录。没有引发异常,只有这个“无声”的日志输出。然而,该模型并没有写入数据存储器(Datastore)。这种情况连续发生了4次。
准确来说,我不确定该日志是在模型的put()期间还是在GAE保存特定请求的appstats时产生的。此外,该日志指出我们的内存缓存(memcache)已满,但我不清楚它是否是一个问题(缓存难道不应该时不时地变满吗?)。
然而,在所有产生此日志的情况下,ndb.put()都无法将数据写入数据存储器,我无法确定原因。如果ndb.put()失败,我希望能够引发某种错误/异常(我的代码处理这些情况),但警告却是无声的。
有什么建议吗?

在文档中,返回值是一个未设置值的键列表。在完全成功的情况下,该列表应为空。那么,这些键的值可能无法被 pickle 化吗?此外,NDB 使用原子事务,这可能包括需要将写入 memcache 的写入操作一起完成,以使整个保存动作能够正常工作。 - belteshazzar
嗯,我觉得我明白你的意思。但基本上,那意味着我需要透明地重新编写ndb的预期功能,可能需要付出很多额外的努力(在每次写入之前检查内存缓存容量等)。 - Christos
特定的错误来自appstats-- ndb在其调用路径中没有记录该错误。如果Datastore put失败,ndb将出现错误。当您说数据未写入Datastore时,您是如何检查的?使用get?查询? - Patrick Costello
@Christos 如果你不需要 memcache,db(虽然较旧)具有相同的数据存储接口,但根本不会使用 memcache。 - Patrice
在写入之前,我记录了实体的内容,以确保其值已正确更新。稍后使用key.get()读取该实体。我还在开发者控制台中使用Datastore查看器进行了检查,发现模型未被更新。 - Christos
显示剩余2条评论
1个回答

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接