2009-08-14 7 views
2

私は、サーバ(データベース)からいくつかの質問を取り出し、それをブラウザのクライアント(ユーザ)に表示しています。クライアントは質問に答え、その答えに基づいて、次の質問のセットがデータベースから取り出されます。今、次の質問のプリフェッチをしたいのですが、ユーザーが現在の質問を読んでいる間に次の質問を見るための待ち時間が短くなるようにします。キャッシュのようなメカニズム(どのデータ構造)?

私の質問は、プリフェッチされた質問を格納する方法です。つまり、プリフェッチされた質問をメモリに保存してパフォーマンスを向上させる必要がありますか?私は "キャッシュ"タイプのものを欲しいです。また、一度ユーザーヒットキャッシュから質問をもう一度そこにはありません。

PS:各質問には固有のIDがあります。

おかげ

のNaveen

+0

を? –

+0

任意のWeb開発言語を使用できます。 – Naveen

答えて

2

それについて移動する複数のオプションがあります。大きな違いを生むもの、少ししかしないもの。

  • 質問を取得してユーザーのセッションに保存することはほとんど違いがありません。基本的には、セッションが格納されている場所、データベース、またはファイルに依存します。これは、あなたのdbテーブルが非常に非正規化されており、答えを得るためにたくさんの結合が必要な場合にのみ意味があります。私はそれが事実であるとは思わないので、どのデータ構造が使用されても、これはユーザーにとって大きな違いはありません。

  • 大きな違いがあれば、JavaScriptをブラウザに直接使用してAJAXでプリフェッチすることになります。この場合、単純な配列で十分です。 JSでは、あらゆるプロパティを持つオブジェクトを柔軟に構築できます。したがって、ユーザーが質問を見ている間にサーバーから質問を取得し、JSONを使用してそれらを戻すJSにポーラーを作成します。 JSONは単純なオブジェクトになります。各ユーザーはブラウザにプリフェッチされた質問のうちのいくつかだけを保存しているので、特定のデータ構造の選択はここでも違いはありません。あなたのコンテキストに適応する

+0

AJAXを使用した2番目のソリューションは、ユーザが一度に複数の質問を表示することを意図していない場合、問題になる可能性があります。 JSONは基本的にクライアント上で簡単に閲覧できるので、ユーザーはローカルで質問を先読みしていることを知り、Firebugなどのツールを使用してプリフェッチされたすべての質問をプレビューできます。ちょうど:) –

+0

秘密の必要条件を見ない。 –

0

まずいくつかの質問:

  • は、Javaを使用すると仮定すると?
  • Hibernateも使用していますか?

サーバーにプリフェッチしたい場合は、多くのキャッシングソリューションが存在します。

一意のID(PSを参照)を考慮すると、このIDがデータベースに関連していて、Hibernateを使用している場合、最も簡単な解決策は、そのエンティティのHibernate第2レベルキャッシュを構成することです。次に、あなたの唯一のコードは、事前にクエリを実行することです....

これらの必要条件が合わない場合は、キャッシュソリューションとしてEhCacheを使用しました。 何となく簡単に使い始めることができ、後で必要なときに利用できる機能がたくさんあります。

1

LinkedHashMapを使用してみてください。LRUアルゴリズムをすぐれたパフォーマンスで実装します。

だけでなく、このリンクを読む:どのプログラミング言語

LinkedHashMap as cache

関連する問題