我試圖設計一個應用程序,它使用Google AppEngine存儲/處理/查詢數據,然後通過Cloud Endpoints API將數據提供給移動設備儘可能的時間。AppEngine實時查詢 - 成本,性能,延遲平衡操作和配額
這是直截了當的解決方案,但我正努力在AppEngine上獲得性能,成本和延遲之間的正確平衡。
情景(類比)是用戶檢入(每天從不同地點,城市,國家進行多次檢查),我們希望允許用戶通過設備查詢所有數據並提供最新的信息儘可能。
- 如:
- 簽入在過去數:
- 24小時
- 1周
- 1個月
- 所有時間
- 哪裏最在相同時間段內在地點/城市/國家/地區檢查
- 哪裏檢查得最少發生在同一時間段
- 其他類似查詢報告
我們可以使用內存緩存來存儲最近簽入,推到數據存儲,每5分鐘,但是這可能不會規模非常好,是不健壯! 使用Cron作業運行Task Queue/Map Reduce以獲取每30分鐘每個位置的聚合,平均值並更新數據存儲。
面臨的挑戰是對數據存儲使用盡可能少的讀/寫操作,因爲最後的「24小時」數據每5分鐘更改一次,因此最後一週的數據,上個月的數據等也是如此。數據在某種程度上必須是動態的,所以它不是固定的時間點,它們總是在變化 - 這是問題所在!
設置它並不是一個問題,而是要高效地設置它,平衡用戶的性能/延遲和我們的成本/配額並非易事!
簡單的解決方案是使用SQL,並運行日期範圍查詢,但這不會很好地擴展。
我們最終可以使用BigTable & BigQuery進行「所有時間」查詢,但爲了在其他時間段通過API爲用戶提供儘可能實時的數據,這是相當大的挑戰!
任何關於AppEngine架構/方法的建議都將受到嚴肅的歡迎。
非常感謝。
非常感謝Martin提供的建議和鏈接,非常感謝,有一些好的觀點,會看進入他們。 – user965612