0

我们正在开发一个 AppEngine 应用程序,它部分是用 Java 编写的,部分是用 Python 编写的(不同的版本使用不同的语言)。我想知道是否可以在 Python 端使用 ndb 数据库来访问一些与 Java 代码共享的模型。

具体来说,当从 Java 端更新实体时,该实体的 ndb 缓存值是否会自动失效?显然,这是必不可少的,否则 ndb 将返回先前的值。

此外,如果在 ndb 中写入提交(返回),则在通过键检索时,Java 端的值是否立即可用?我读到一旦缓存失效,ndb 写入就会返回,这不能保证数据可以通过 Java 端的键检索。

4

1 回答 1

3

正如您所怀疑的,由于 Java Datastore API 不知道 NDB 的缓存,如果您希望 Python 代码立即看到 Java 进程所做的更改,则必须关闭该缓存。可以仅针对特定请求(例如 key.get(use_memcache=False))或仅针对特定模型(添加 _use_memcache = False 作为类变量)关闭缓存。

Java 看到通过 NDB 所做的更改没有问题。我不知道你在哪里读到的,但是 NDB 在数据写入数据存储之前返回是不正确的(除非你使用异步写入并且从不等待响应——但即便如此,基础设施也会等待在向用户返回 HTTP 响应之前写入成功)。

写入时的实际事件顺序如下:

  1. 通过向其写入特殊值来锁定 memcache 条目
  2. 将数据写入 Datastore
  3. 通过删除它使 memcache 条目无效

(内存缓存条目在下一次读取时更新。)

于 2013-05-07T16:14:53.777 回答