2010-07-21 60 views
4

我已經使用GAE創建了一個應用。我期望每天有100K的請求。目前,每個請求應用程序在執行所需任務之前需要查找4個表格和8個diff列。在谷歌應用引擎中使用memcache

這4張表是我的主表,有5k,500,200和30條記錄。它低於1 MB(限制)。

現在我想將我的主記錄放在memcache中,以便更快地訪問並減少RPC調用。當任何用戶更新主數據時,我將替換memcache對象。

我需要關於此的社區建議。

可以更改當前設計嗎?

如何將4個主表數據放入memcache中?

下面是應用程序的工作目前

  1. 用戶的訪問100相同的應用程序頁面。
  2. 它們提供了一個唯一的識別標記和3個參數(比如說p1,p2和p3)。
  3. 我的servlet收到請求。
  4. 應用程序通過令牌提取用戶表並檢查啓用狀態。
  5. 應用程序獲取另一個表(如department)並檢查p1是否存在。如果存在檢查啓用狀態。
  6. 如果上述返回true,則根據參數p2查詢服務表以檢查此服務是否已啓用並且檢查此服務的EndDate。
  7. 根據p3長度檢查另一個表的可用性。
+0

您應該只對頻繁的數據操作使用memcache。 – RubyDubee 2010-07-21 07:32:32

+0

是的,您需要提供更多信息,然後才能提供更多幫助。如果我們知道更多關於數據的信息,可能會做一些非常好的優化。 – Jacob 2010-07-21 11:25:43

+0

查看編輯的問題 – Manjoor 2010-07-23 09:50:48

回答

6

您不應該考慮將表插入到memcache中。相反,請使用'樂觀緩存'策略:只要您需要執行要緩存的操作,首先嚐試在memcache中查找它,如果失敗,請從數據存儲中獲取它,然後存儲在memcache中。這裏有一個例子:

def cached_get(key): 
    entity = memcache.get(str(key)) 
    if not entity: 
    entity = db.get(key) 
    memcache.set(str(key), entity) 
    return entity 

注意,雖然,緩存個別實體是相當低的回報 - 數據存儲速度也相當快,在做取。緩存查詢結果或呈現的頁面會提高速度。

+0

我的問題仍然存在。我想要恢復RPC。 – Manjoor 2010-07-21 09:50:51

+0

如果您希望任何人都能提供幫助,您需要更具體地瞭解您的問題以及我的答案出了什麼問題。 – 2010-07-21 10:14:35

+0

Manjoor:減少RPC是一個好主意,但你必須從某個地方獲取你的數據。而且,並非所有RPC的成本都相同 - memcache的獲取應該通常只有幾毫秒的開銷。數據存儲RPC延遲通常比較高(約100倍)。 – 2010-07-21 18:13:06