2016-11-06 37 views
3

當我嘗試從(微)計算引擎查詢Google Cloud Datastore時,通常需要> 800ms才能獲得答覆。我得到的最好是450ms,最差的是> 3秒。Google雲數據存儲緩慢(> 800ms),使用來自計算引擎的簡單查詢

我的印象是延遲應該大大低於20-80ms,所以我猜測我做錯了什麼。

這是我使用的查詢(從一個簡單的數據存儲只是一個單一的實體)的(node.js的)代碼:

const Datastore = require('@google-cloud/datastore'); 
const projectId = '<my-project-id>'; 

const datastoreClient = Datastore({ 
    projectId: projectId 
}); 

var query = datastoreClient.createQuery('Test').limit(1); 

console.time('query'); 
query.run(function (err, test) { 
    if (err) { 
    console.log(err); 
    return; 
    } 
    console.timeEnd('query'); 
}); 

不知道,如果是相關的,但我的應用程序引擎項目在美國中部地區,我正在運行查詢的計算引擎。

UPDATE

一些更多的測試後,我發現該默認認證(標誌?),你使用谷歌提供的Node.js的庫時獲得約4分鐘後過期。換句話說:如果使用相同的進程,但在請求之間等待4分鐘或更長時間,則查詢時間會回到> 800ms。
我也嘗試使用密鑰文件進行身份驗證,而且似乎做得更好:後續請求仍然更快,但初始請求只需要一半的時間(> 400毫秒)。

+0

你可以嘗試計時額外的請求?第一個API請求會爲驗證令牌獲取帶來一些開銷。 – Stephen

+0

不要只通過一次通話測試性能。將它包裝成一個循環,做很多並記錄每個時間,然後您可以查看平均值,P50,P90,P95等。 –

+0

感謝您的評論!實際上,循環查詢可以非常清楚地瞭解第一個查詢與連續查詢的性能。 第一個查詢> 800ms,後續查詢對於簡單查詢<100ms,對於更復雜的查詢則小於250。 不過,我的用例是一個頁面請求後的單個查詢。有什麼方法可以加速第一個請求?我應該創建一個經過驗證的長時間運行的進程並按需獲取數據? – Reynaerde

回答

1

您看到初始請求到數據存儲區的延遲很可能是由於緩存被加熱。數據存儲使用分佈式體系結構來管理擴展,這可以使您的查詢按照結果集的大小進行擴展。通過執行更多相同的查詢,數據存儲區的更好準備就是爲您的查詢提供服務,並且結果的速度越一致。

如果您希望在低數據存儲區訪問速率上獲得相似的結果速度,建議您配置自己的高速緩存層。 Google App Engine提供了Memcache,它已針對數據存儲進行了優化。由於您正在從計算引擎發出請求,因此您可以使用其他第三方解決方案,例如RedisMemcached