我们正在开发一个 AppEngine 应用程序,该应用程序部分用 Java 编写,部分用 Python 编写(不同版本使用不同的语言)。 我想知道是否可以在Python端使用ndb数据库来访问与Java代码共享的一些模型。
具体来说,当从 Java 端更新实体时,该实体的 ndb 缓存值是否会自动失效?显然,这是必要的,否则 ndb 将返回之前的值。
此外,如果在ndb中写入提交(返回),那么当通过键检索时,该值是否立即在Java端可用?我读到,一旦缓存失效,ndb 写入就会返回,这不能保证可以通过 Java 端的键检索数据。
最佳答案
正如您所怀疑的,由于 Java 数据存储 API 不知道 NDB 的缓存,因此如果您希望 Python 代码立即看到 Java 进程所做的更改,则必须关闭该缓存。可以仅针对特定请求(例如 key.get(use_memcache=False))或仅针对特定模型(添加 _use_memcache = False 作为类变量)关闭缓存。
Java 查看通过 NDB 所做的更改没有问题。我不知道你在哪里读到的,但 NDB 在数据写入数据存储之前返回是不正确的(除非你使用异步写入并且从不等待响应 - 但即便如此,基础设施也会等待在向用户返回 HTTP 响应之前写入成功)。
写入时的实际事件顺序如下:
- 通过写入特殊值来锁定内存缓存条目
- 将数据写入数据存储区
- 删除内存缓存条目使其失效
(内存缓存条目将在下次读取时更新。)
关于java - ndb 可以与 Java 数据存储访问同时使用吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16407589/