2012-08-17 82 views
2

在我的GAE服務器中,數據存儲讀取操作在12小時後達到100%,並且我有大約20個用戶。快速數據存儲讀取操作配額耗盡

隨着我的應用程序中的其他操作,我構建了一個聊天,其中連接到我的應用程序的用戶每隔1秒彙集一次服務器。因此,我有很多要求/message,但我而不是訪問數據存儲。

請求數到/message(約42K)與最大Datstore讀操作(50k)之間是否存在相關性?

enter image description here

編輯:

/message代碼:是否啓用會話

ArrayListMultimap<String, ChatMessage> messages; 
ServletContext application = null; 

@Override 
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException 
{ 

    if (application == null) 
    { 
     application = getServletContext(); 
     messages = ArrayListMultimap.create();   
    }  

    out = response.getOutputStream(); 
    oos = new ObjectOutputStream(out); 
    Object o = ServerUtils.readObject(request); 

    if(o instanceof ChatMessage) 
    { 
     ChatMessage message = (ChatMessage) o; 
     messages.put(message.getReciverId(), message);   
     List<ChatMessage> list = (List<ChatMessage>) messages.get(message.getReciverId());    
    } 

    else if(o instanceof String) 
    {   
     String sender = (String) o; 
     List<ChatMessage> list = (List<ChatMessage>) messages.removeAll(sender); 
     ArrayList<ChatMessage> newList = new ArrayList<ChatMessage>(list); 
     reponseToClient(newList); 
    } 


} 
+0

因爲GAE已將這些愚蠢的配額從RedHat切換到了openshift。 – Eugene 2012-08-17 07:49:13

+0

我會用我的下一個應用程序記住它,但現在我必須處理這個配額。我相信我做錯了,而不是谷歌是那麼便宜。 – Rami 2012-08-17 08:39:12

+0

你在/ message handler中執行什麼操作? – 2012-08-17 08:59:47

回答

2

一個很好的開始就是設置Appstats。這將顯示您正在進行數據存儲讀取以及哪些讀取花費很長時間。 https://developers.google.com/appengine/docs/java/tools/appstats

此外,代替輪詢,考慮使用channelApi或xmpp作爲消息。 https://developers.google.com/appengine/docs/java/xmpp/overview https://developers.google.com/appengine/docs/java/channel/

+0

這聽起來很有希望,我會檢查它。謝謝。 – Rami 2012-08-17 10:34:31

0

您的應用程序? Sessions work by storing its data in the datastore for persistence,這可能是每次請求進入/消息處理程序時被讀取的內容。

+0

會話也使用memcache,所以如果memcache可用,他不應該在請求和讀取之間看到1:1。 – 2012-08-17 09:39:29

+0

@PeterKnego是的,但我們不知道OP會話的內存緩存命中/未命中率是多少。每個用戶每秒鐘點擊應用程序的請求並不是特別的memcache友好的。我並不是建議所有讀操作都來自會話讀取,但其中很大一部分可能是。 – 2012-08-17 10:58:20

+0

是的我正在使用/ sign中的會話 – Rami 2012-08-17 11:05:38