ndb可以与Java数据存储区访问同时使用吗?

时间:2013-05-06 21:28:26

标签: java google-app-engine app-engine-ndb

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

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

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

1 个答案:

答案 0 :(得分:3)

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

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

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

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

    (memcache条目在下次阅读时更新。)