2013-03-06 52 views
1

這太奇怪了...應用程序引擎數據存儲區不一致?

首先,這個查詢在數據存儲查看器,即。它返回正確的行。

SELECT * FROM Level where short_id = 'Ec71eN' 

但是,如果我運行此

Level.all().filter("short_id = ", 'Ec71eN').get() 

返回,如果我運行此:

db.GqlQuery("SELECT * FROM Level where short_id = '%s'" % 'Ec71eN').get() 

它也返回。如果我運行此:

level = Level.get_by_id(189009) 

返回正確的行(189009是正確的行的ID)

困惑?這裏有什麼可能是錯的?我以前從未見過這樣的事情,它在製作過程中至少可以正常工作幾個星期......我認爲我現在至少有兩個案例,現在它開始從今天開始工作。


更新:這不可能是一個最終一致的問題,因爲當我嘗試上述時,行已經7小時了。我有兩排症狀相同,由同一用戶生成的奇怪展位。他們在那裏的展臺「固定」我做他們的ID的手動fecth後,通過上傳喜歡特例代碼:

if short_id==CASE_1_SHORT_ID: 
    level = Level.get_by_id(CASE_1_ID) 

之後,查詢工作如常。

回答

4

您使用的是HRD嗎?沒有錯。你知道這應該是最終一致的權利?

查詢操作最終是一致的。 Get-by-id操作完全一致。

你描述的是正確的數據存儲行爲。數據存儲查看器操作返回正確的結果有點奇怪,但它可能在數據存儲操作中碰到了單獨的平板電腦。

+2

是HRD,但此行已創建,7小時前。沒有上限?如果有這種情況,設計一個系統很難。 – Okku 2013-03-06 19:26:03

1

鑑於它是在7小時前創建的,「最終一致性」一般爲應該花費幾分鐘時間。 如果最終的一致性是問題,那麼運行相同的查詢方法很多次,看看是否返回相同的結果。如果它用相同的方法連續返回相同的結果,那麼它很可能不是最終的一致性問題。您應該切換到NDB API來查詢數據 - 它的性能要好1000倍,而且Guido也在努力 - 所以您知道這很好。 NDB是否顯示相同的不一致?

+1

我不知道NDB API,我一定會考慮這個。 (主要使用Java與應用程序引擎,最近切換到python。) 我有兩個展位至少5-7小時的展位。在我手動完成get_by_id(使用if語句上傳新版本以用於失敗的short_id)後,「固定」展位。所以這不是歐共體的事情,這是一種錯誤。 – Okku 2013-03-07 15:15:07

相關問題