2013-10-12 39 views
1

我在現場的應用程序的查詢已經「奇」 ......的AppEngine NDB查詢返回不同的結果

運行使用Python 2.7

1.8.4 SDK 1.8.5 ...例如直播測量是NDB模型......有一個字符串屬性名爲狀態和關鍵屬性所謂資產....

(深在我的處理程序代碼。)

cursor=None 
limit=10 
asset_key = <a key to an actual asset> 
qry = Measurement.query(
    Measurement.status=='PENDING', 
    Measurement.asset=asset_key) 
results, cursor, more = qry.fetch_page(page_size=limit, start_cursor=cursor) 

現在奇怪的事情如果我運行這個有時我g等4個項目,有時只有1個(正確的答案是4)....

查詢的轉儲是完全一樣的...遊標設置爲無...限制總是相同.. ..相同的處理程序...相同的查詢和每個查詢之間沒有新的記錄。新鮮實例(例如第一次+沒有其他用戶)

每個查詢僅以秒隔開,但結果不同。

我在這裏錯過了什麼...有沒有其他人經歷過這個?這是一種腐敗指數嗎? (這是一個相對較大的「表」,含有482,911項)NDB是否緩存遊標變量?

非常奇怪。

回答

0

查詢不會在任何緩存中查找值。但是,如果緩存策略如此(按照文檔),則查詢結果將寫回到上下文緩存中。 https://developers.google.com/appengine/docs/python/ndb/cache#incontext

也許審查有關實體的緩存策略。但是,從您的摘錄中,我不確定您的查詢是否非常一致。這很可能是這個問題的原因:https://developers.google.com/appengine/docs/python/datastore/structuring_for_strong_consistency

+0

感謝您的迴應。緩存不是一個因素,但我認爲你對一致性的評論看起來是正確的。 查看我們的日誌,當天有一些「緩慢」的數據存儲活動。我覺得有趣的是,不一致的結果是......好......不一致。我想它表明,對數據存儲的RPC請求是由許多服務器處理的,每個服務器都對數據是不同的概念。有趣的是,雖然我會認爲這是可以避免使用交易(它是在)...但現在我們有這種見解,希望我們可以找出一個替代解決方案(例如您的鏈接) – user2873131