5

200 個のテーブルを持つアプリケーションがあります - 4 つのグループに分類されます

  1. 非トランザクション (50 テーブル) - 管理者によって時々更新される部門、指定などのテーブル (100000 読み取り: 1 書き込み率 & 1 書き込み/月)

  2. トランザクションが少ない (50 テーブル) - 設定、製品、税率などのテーブルは、より多く読み取られ、挿入される頻度は非常に低くなりますが、書き込みは毎日発生します (1000 読み取り: 1 書き込み率 & 1 書き込み/日)

  3. トランザクション (50 テーブル) - 注文、領収書などのテーブルで、ほぼ同じように書き込みと読み取りが行われます (10 回の読み取り: 1 回の書き込みと 1 回の書き込み/時間)

  4. ヘビー トランザクション (50 テーブル) - 書き込みが多く、読み取りが少ないが、サービスとレポートで使用されるタスク、履歴などのテーブル (1 回の読み取り: 1 回の書き込みと 1 回の書き込み/分)

私は休止状態、struts2、および春を使用しており、最高のパフォーマンスと効率を得るためのキャッシュ戦略を探しています。

あなたが観察した場合、テーブルには最も多くの書き込みと読み取りが行われるデータがあるため、それらをより重要にキャッシュします。

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

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

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

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

一部のテーブルでインメモリ db を使用できますか?

場合によってはビューが役立ちますか? どのケース?

私が最終的に望むのは、メモリ内データベースからの高速読み取りアクセスです。これは、データベースの変更に応じてメモリ内データベースを更新するものです。たとえば、製品リスト、注文リストがメモリにあるとしますが、新しい製品または注文が追加されると、このリストは自分自身をリロードする必要があります。通常、すべての読み取りはメモリ内データベースから行われ、すべての書き込みはデータベースに直接書き込まれ、トリガーを使用してリストまたはリスト項目を更新します。

4

2 に答える 2

4

キャッシングの経験則から始めましょう。

頻繁に読み取られ、めったに変更されない非トランザクション データをキャッシュします

Hibernate を使用すると、かなり安全にアクセスできます。この時点から、キャッシュを使用することはできますが、複数の問題が発生する可能性があるため、あまりお勧めできません。したがって、これについては慎重に進めたほうがよいでしょう。以下の記事のリストを見てください。より多くの洞察が得られます。

  1. Hibernate: セカンドレベルキャッシュとクエリキャッシュを真に理解する
  2. Hibernate でのキャッシングを理解する – セカンド レベル キャッシュ
  3. Hibernate のパフォーマンスの改善

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

于 2012-04-18T12:46:39.323 に答える
1

ManuPk は非常に詳細な方法で質問に答えていますが、いくつか追加したいことがあります。Hibernate は、マルチサーバー環境では使用できないローカル InProc キャッシュを提供します。そのため、負荷のピーク時に応答時間が遅く、パフォーマンスに問題があると思われる場合は、2 レベル キャッシュを使用することをお勧めします。これは、NHibernate を使用するアプリケーションをマルチサーバー環境に拡張し、データベースのボトルネックを取り除くことができるためです。NHibernate(.NET) に関するものですが、L1 および L2 キャッシュの概念について説明します。

セカンダリ レベル キャッシュ、パフォーマンスを次のレベルに引き上げる

Java および .NET アプリと完全に互換性があるため、 NCacheを 2 番目のレベルのキャッシュとして使用できます。乾杯

于 2012-05-16T09:54:21.193 に答える