2

私の GAE サーバーでは、データストアの読み取り操作が 12 時間後に 100% に達し、約 20 人のユーザーがいます。

アプリの他の操作に加えて、アプリに接続しているユーザーが 1 秒ごとにサーバーをプールしているチャットを作成しました。したがって、多くのリクエストがありますが、データストアにアクセスし/messageいません。

/message要求数(約 42K) と最大 Datstore 読み取り操作 (50k)の間に相関関係はありますか?

ここに画像の説明を入力

編集:

のコード/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);
    }


}
4

2 に答える 2

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/

于 2012-08-17T09:02:19.863 に答える
0

アプリのセッションが有効になっていますか? セッションは永続性のためにデータをデータストアに保存することで機能します。これは、リクエストが /message ハンドラーに着信するたびに読み取られる可能性があります。

于 2012-08-17T09:01:34.607 に答える