キャッシング - Hibernateのキャッシュ機構を導入
。データキャッシュは、物理データソースのデータのレプリケーションでは、アプリケーションの実行時間は読んで、キャッシュと物理データソースを同期させる特定の瞬間やイベントでは、キャッシュからデータを書き込む。
gbvy[W
キャッシュメモリは、通常のメディアなので、読み込まれ、高速。ただし、キャッシュに格納されているデータの量が非常に大きい場合、メディアはキャッシュとしてハードディスクを使用します。。だけではなく、キャッシュの記憶媒体の実装を考慮することも考慮してキャッシュとキャッシュデータのライフサイクルへの同時アクセスの管理を。
内部キャッシュおよび外部キャッシュ:SessionFactoryのキャッシュは、2つのカテゴリに分けることができるキャッシュとSessionFactoryセッションキャッシュを含む、Hibernateのキャッシュ。。。SessionFactoryは、マッピングに格納されているキャッシュのメタデータと定義済みのSQLステートメントでは、マッピングメタデータは、データのファイルのコピーにマッピングされている構築し、初期化フェーズでのSQL文を事前定義された、読み取り専用ですセット内に、派生キャッシュをSessionFactoryをマッピングメタデータを休止状態に応じて、キャッシュのマッピングメタデータおよび定義済みのSQLステートメントを変更することはできませんアプリケーションなので、SessionFactoryは必要としない組み込みマッピングファイルを使用してキャッシュの同期化で。SessionFactoryの外部キャッシュは、設定プラグイン。デフォルトでは、SessionFactoryは有効にしないこのプラグイン。。SessionFactoryの外部キャッシュは、Hibernateの番目のレベルのキャッシュとして知られている。
このレベルのキャッシュのHibernate永続化層が配置されている、データのデータベースのコピーに格納されている、それらの間にその差がいいですか?キャッシュのスコープおよびキャッシュの並行戦略:二つの違いを理解するために、キャッシュの2つの特徴の永続化層の深さを理解する必要があります。
永続化層キャッシュの範囲
にキャッシュバッファの範囲を決定する人のライフサイクルとアクセス。キャッシュの範囲は次の3つのカテゴリに分かれています。
。。この範囲では、キャッシュは、メモリ媒体である。サービスは、アプリケーションサービスや、データベーストランザクションすることができ、各トランザクションは、独自のキャッシュを持って、相互に関連するオブジェクトの一般的に使用される形式でデータをキャッシュする。
2プロセス範囲:キャッシュは、プロセス内のすべての事項についての共有されている。。キャッシュのライフサイクルはプロセスのライフサイクルに依存し、プロセスの最後には、キャッシュがライフサイクルを越すようになる。メディアは、メモリやハードディスクに保存することができますので、データのプロセス全体のキャッシュを大量には、格納することができる。データキャッシュには、緩やかなオブジェクトの形でデータの形式することができる相互に関連するオブジェクト内のいずれかを指定できます。緩やかなオブジェクトの形でオブジェクトのデータは、多少のシーケンスデータに似ているアルゴリズムは、必要以上のオブジェクトが緩んでオブジェクトのシリアル化アルゴリズムに分割されて高速化。
3クラスタ全体:クラスタ環境では、キャッシュは、マシンまたは複数のマシンは、プロセスを共有することです。。
。
永続化層は、キャッシュの幅広い範囲を提供することができます。トランザクションのスコープは、対応するキャッシュデータの中から発見されていない場合だけでなく、プロセスバッファの範囲またはクラスタの調査の範囲内には、まだ場合は、データベースクエリからのみ、見つかりませんでした。サービス範囲の永続化層のキャッシュは通常、それが必要な場合、最初のレベルのキャッシュです。範囲またはキャッシュクラスタの永続化層の範囲のプロセス番目のレベルのキャッシュは、通常オプション。
複数の同時実行トランザクションが同時に並行性の問題を引き起こす可能性が、キャッシュの永続化層に同じデータにアクセスすると、我々は、トランザクション分離するために必要な措置を採用する必要があります。
プロセスでは、キャッシュ領域またはクラスタ、第2レベルのキャッシュの範囲は、そこに問題が複雑になる。ですから、それぞれのトランザクション分離レベルの戦略に対応する同時アクセスポリシーの以下の4種類を設定することができます。
サービスの種類は:のみ管理された環境で適用されます。。これは、トランザクション分離レベルRepeatable Readをを提供しています。。
。非クラスタ環境でのみ、適用される。それは同時実行の問題を防ぐことができるため、しばしば読んでめったに変更されたデータについては、汚れなど読んで、この分離タイプを使用することができます。
非厳密な読み取りと書き込みのタイプ:データベースのキャッシュは、データの整合性を保証するものではありません。。非常に少ないが、変更するには、汚れた時折データを読み取ることができる、この同時方式を使用することができます。
読み取り専用の:参照データなどのデータを変更しないためには、この同時方式を使用することができます。
トランザクション同時実行の戦略は、最高のトランザクション分離レベルは、最小の読み取り専用の分離レベルです。トランザクション分離レベルを、高い並行性低い。
何番目のレベルキャッシュに格納するデータの種類は?
データ3、同時アクセスはされません。
4リファレンスデータ
ない番目のレベルのキャッシュにデータを格納するための適切な?
2財務データは、絶対に同時許可していません
他のアプリケーションとの3共有データ。
Hibernateの二次キャッシュ
前述のように、Hibernateは、2つのキャッシュを提供し、キャッシュの最初のレベルは、セッションです。Sessionオブジェクトのライフサイクルは、通常、データベーストランザクションまたはアプリケーションのトランザクションに対応していますので、それのキャッシュは、トランザクションのキャッシュのスコープです。。。。
番目のレベルのキャッシュは、プラグイン可能なキャッシュは、管理のSessionFactoryを担当しており、プラグインです。。SessionFactoryのオブジェクトは、アプリケーションのライフサイクル全体のプロセスに対応するため、第2レベルのキャッシュのためのスコープは、プロセスまたはクラスタ全体のキャッシュです。キャッシュデータが緩んでオブジェクトを格納。。特定のキャッシュの実装ソフトウェアとHibernateの統合のためのキャッシュアダプタ。番目のレベルのキャッシュは省略可能ですが、あなたは、各クラスに設定可能な第2レベルのキャッシュサイズの各構成。
一般的なのHibernateの第2レベルキャッシュの戦略は、次の:
1)クエリは常にtable_nameにします。select * from発行される条件は.... (選択してすべてのフィールド)は、データベースクエリにSQL文が一度にすべてのデータオブジェクトを取得している。
2)第2レベルキャッシュにIDの下に置かれるすべてのデータオブジェクトを取得する。
。
。
Hibernateの第2レベルキャッシュの戦略は、キャッシュIDの戦略のクエリには、お問い合わせの条件のための役割があります。この目的のために、Hibernateはクエリクエリの条件に対してバッファを提供しています。
次のようにHibernateのクエリキャッシュの戦略は:
。
2)Hibernateクエリが結果リスト問合せキーキャッシュに応じて対応を見つけるために。もしそうであれば、結果のリストを返す、そしてていない場合は、クエリにデータベースを検索結果の一覧を取得するために、全体の結果は、クエリのキーキャッシュにクエリに応じてリスト。
これらのテーブル内の任意のデータが変更された場合3)何らかの形で関与するSQLの名前のクエリキー、追加、削除、など、これらに関連する問合せキーは、キャッシュから消去する必要があります。