2

ユーザーがサーバーに登録し、すべてのユーザープロファイルがDBとアプリケーションセッションに保存しているコレクションプールに保存されるサーバークライアントアンドロイドアプリケーションを構築しました。

セッションに既存のすべてのユーザーを保存している理由は、ユーザーが他のユーザーについて頻繁に更新されるためです。Google アプリ エンジンのデータ ストアからの読み取りには、多くの場合、多額の費用がかかります。

これは最初の 1 か月は問題なく機能しましたが、今日、セッションに 1000 個のプロファイルがあるため、状況が悪化し始めました。突然、プロファイルのコレクションが null になり、プロファイルをセッションに再度ロードするには、サーバーを「再起動」する必要がありました。

セッションですべてのプロファイルを保存するという私の設計が間違っていると思います。私は正しいですか?または他の何かがnullコレクションを引き起こした可能性がありますか?

物事を正しく行うために使用できるデザインパターンはありますか?

4

1 に答える 1

0

セッションの内部構造と、GAE でのセッションの処理方法についてはよくわかりませんが、セッションが大きくなりすぎて、リクエスト間で適切にシリアル化できないことが最初に推測されます。

私の提案は、MemCache を使用してユーザーのリストを保存することです。典型的なパターンは、必要なテーブルをデータベースに格納することです (これには、言及したユーザーごとの接続プールが含まれます)。次に、セッションの最初の作成時または実際に必要なときに、DB から MemCache にデータをロードします。

キャッシュされると、追加のデータベース クエリなしで直接使用できます。正しく行われれば、これは非常に堅牢であり、パフォーマンスの問題も発生しません。MemCache はシステムによってランダムに消去される可能性があることに注意してください。MemCache が初期化またはリセットされていない場合は、DB から確実にロードする必要があります。

于 2012-10-16T21:56:08.783 に答える