2013-05-06 59 views
0

我們正在開發部分用Java編寫的AppEngine應用程序,部分用Python編寫(不同的版本使用不同的語言)。 我想知道如果我可以在Python端使用ndb數據庫來訪問一些與Java代碼共享的模型。ndb可以與Java數據存儲訪問同時使用嗎?

具體來說,當實體從Java端更新時,該實體的ndb緩存值是否自動失效?顯然,這將是必不可少的,否則ndb會返回以前的值。

此外,如果在ndb中寫入提交(返回),是通過密鑰檢索時Java立即可用的值嗎?我讀過緩存失效後返回的ndb寫入,這並不能保證數據可以通過Java端的密鑰進行檢索。

回答

3

正如您懷疑的那樣,由於Java Datastore API不知道NDB的緩存,所以如果您希望Python代碼立即查看由Java進程所做的更改,則必須關閉該緩存。可以僅爲特定請求(例如,key.get(use_memcache = False))關閉緩存,或者僅針對特定模型(將_use_memcache = False添加爲類變量)關閉緩存。

Java看到通過NDB所做的更改沒有問題。我不知道你讀到的是哪裏,但在數據寫入數據存儲之前NDB不會返回(除非使用異步寫入並且從不等待響應 - 但即使如此,基礎結構也會等待在向用戶返回HTTP響應之前寫入成功)。

事件上寫的實際順序如下:

  1. 寫一個特殊的價值,將其鎖定在內存緩存條目
  2. 將數據寫入到數據存儲
  3. 無效由內存緩存條目刪除它

(內存緩存條目由下一個讀帶來的是最新的。)

+0

比ks,這是非常有用的。我想知道是否在Java也使用的基礎架構中實現了ndb緩存失效機制。就我而言,我可能會在不經常使用memcache的情況下執行一次ndb get,因爲您經常足夠頻繁地使用它,這樣在這些get之間使用陳舊的數據對我而言是可以接受的。 – Luca 2013-05-07 16:37:46

+0

其實我還有一個問題。當我用.get(use_memcache = False)讀取時,它是否使用數據存儲中的值更新了memcache,還是繞過memcache,使memcache中的陳舊值保持不變? – Luca 2013-05-07 17:52:56

+0

完全繞過內存緩存。 – 2013-05-08 14:49:15

相關問題