2017-04-21 60 views
0

對於測試,我們使用Google提供的LocalDatastoreHelper類啓動雲數據存儲模擬器的本地實例。Google數據存儲模擬器

有趣obersvation,我們做了,我們可以用我們的代碼再重新插入數據,然後找到它,通過執行GQL查詢

SELECT [..] WHERE myfield = true

,如果我們做到這一點對一個「活」店,在Google Cloud上託管。

但是:

當我們運行對仿真器相同的代碼在本地運行,插入工作,但查詢不。一個findAll()工作正常,所以它看起來像插入和閱讀作品一般,但不知何故索引缺失?

在閱讀了幾個小時的文檔之後,我沒有發現任何提示,爲什麼會發生這種情況。

任何人都可以幫忙嗎?

回答

0

只是爲了不讓人們與我原來的問題混淆,我回答自己,因爲我們發現問題的根源。

不幸的是,實時和本地之間的差異並不是由於數據存儲側的某些行爲差異造成的,而是源於我們的代碼。 :-(

至於我看到我們所有的關於未生成的索引前的假設是錯誤的。有了這方面,地方的行爲完全活做。

感謝您的貢獻!

1

您最可能遇到的是 - 最終的一致性。默認情況下,數據存儲模擬器模擬0.9的一致性。請注意,大多數查詢最終都是一致的,除非WHERE子句是一個鍵或查詢是一個祖先查詢。我相信你只是幸運的,「實時」商店正在返回結果。如果您在一天的不同時間運行測試次數足夠多,則可能無法返回結果(這一切都取決於更新索引所需的時間和時間)。

也就是說,數據存儲模擬器有一個選項來指定它應該模擬的一致性級別。這可以通過以下命令完成:

gcloud beta emulators datastore start --data-dir=/my/data/dir --host-port localhost:9999 --consistency 1.0 

一致性級別1.0將保證一致的讀取。我不確定是否有一個選項來設置LocalDatastoreHelper的一致性級別。

此外,「活」數據存儲最終始終與除上述少數例外情況以外的所有情況保持一致。

+0

謝謝你你的建議! 我會研究一致性方面。 –

相關問題