2012-04-18 14 views
4

I持って200個のテーブルを持っているアプリケーション - 4グループ休止状態のキャッシング技術

  1. 非トランザクショナル(50のテーブル)に分類 - デパートのようなテーブル、指定管理者などによってながら、いつか一度更新されます(100000読み:1write比& 1write /月)

  2. レストランザクショナル(50のテーブル) - 続きを読む1000は読み込み(非常に少ないことが多い挿入が、書き込みが日々発生している設定は、製品、税率などのテーブル:1個の書き込み比率& 1書込み/日)

  3. トランザクション(50のテーブル)ほぼ均等読み書きされる注文、領収書等のよう-tables(10読み取り:1個の書き込み& 1書き込み/時間)

  4. 重トランザクション(50のテーブル) - タスクのようなテーブルを、より多く書かれており、以下を読みますが&レポート(1つの読み取り:1は、& 1個の書き込み/分を書き込み)サービスによって使用されている歴史などどの私はStruts2の&春、休止状態使用して取得するために、キャッシング戦略を探しています

最高のパフォーマンス& effi効率。

私が見ると、&と書かれているデータが多く、より重要なものをキャッシュしています。

グループ4のテーブルをキャッシュできますか?はいの場合はどうですか?

グループ3のテーブルをキャッシュできますか?はいの場合はどうですか?

グループ2のテーブルをキャッシュできますか?はいの場合はどうですか?

グループ1のテーブルをキャッシュできますか?はいの場合はどうですか?

いくつかのテーブルでメモリdbを使用できますか?

場合によってはヘルプが表示されますか?どの場合?

私が最後に望むのは、メモリデータベースからの高速読み取りアクセスです。データベースが変更されたときにメモリ内データベースを更新するものがあります。私は製品リストを持っているように、注文はメモリにリストされますが、新しい製品や注文が追加されると、このリストは自動的にリロードされます。通常、すべてのメモリ内のデータベースからのすべての読み取りは、リストまたはリストアイテムを更新するためにトリガを使用してdbに指示します。

+0

あなたの最も高い活動が毎分1回の操作である場合、私はキャッシュが重要であることを真剣に疑っています。データベースは信じられないほど速く、毎分1回の読み取り/書き込みがデータベースを圧倒することはほとんどありません。パフォーマンスの問題がある場合、およびキャッシュが解決策であることを測定して証明している場合にのみ最適化してください。そうでない場合は、複雑さを追加します。 –

+0

テーブルあたりのユーザー1人あたりボールマークの数字はありません。100人のユーザーと複数のテーブルがあります。.......基本的にもっと高速になる必要があります:) 1つの要求に応えるため、応答時間をできるだけ短くする必要があります。 –

+0

Hibernate固有のAPIまたはJPAとHibernateを実装として使用していますか? –

答えて

4

は頻繁に読み、めったにを変更されていない非トランザクションデータ

キャッシュ、キャッシュの親指のルールで開始します。

Hibernateはあなたがかなり安全にそこに着くことを可能にします。この時点から、まだキャッシュを使用することはできますが、複数の問題に対処するためには、実際には推奨されません。したがって、このことに注意することをお勧めします。記事の下のリストを見てください、それはあなたにもっと洞察を与えるでしょう。

  1. Hibernate: Truly Understanding the Second-Level and Query Caches
  2. Understanding Caching in Hibernate – The Second Level Cache
  3. Improving Hibernate's Performance

私たちはあなたのシナリオにこのルールを適用する際に、最初のセットのみがキャッシュされるはずです。最初に、のパフォーマンスを向上させるためにアプリケーションを測定します。問題がなければ、2番目のグループもキャッシュすることを検討できます。トランザクションテーブルをキャッシュして、セット3とセット4を除外することはお勧めしません。

1

ManuPkは非常に詳細に質問に答えましたが、私はちょうどいくつかを追加したいだけです.Hibernateはマルチサーバ環境では使用できないローカルInProcキャッシュを提供します。ピーク負荷時に、応答時間が良くなく、パフォーマンスが問題であると感じる場合は、2レベルキャッシュを使用する方がよいでしょう。これは、NHibernateを使用するアプリケーションがマルチサーバ環境に拡張できるようにし、データベースのボトルネックを取り除くことができるからです。詳細については、以下の記事を読んでください.Hiibernate(.NET)については説明しますが、L1およびL2キャッシュの概念については説明します。

Secondary Level cache, Taking performance ot the next level

それが今でJavaと.NETのアプリケーションと完全に互換性があるとして、あなたは、セカンドレベルキャッシュとしてNCacheを使用することができます。 乾杯お待ちください