3

ColdFusion ORM と永続的な CFC について、またそれによってアプリケーションのパフォーマンスがどのように向上するかについて学び始めたところです。私は自分のサイトに何かを実装しようとする前に、完全に理解することにまだ取り組んでいますが、答えがどこにも見つからないように見える質問が 1 つあります。

パフォーマンスの向上の多くは、ページの最後にある単一のトランザクションでデータベース CRUD をバッチ処理することと、select ステートメントのインテリジェントなキャッシュによってもたらされることを理解しています。後者に関しては、このキャッシュがどのように機能するか、より具体的には、ColdFusion アプリケーションの外部で行われた変更をどのように処理するかです。

たとえば、次のような users テーブルがあるとします。

名前の髪

ニック・ブラウン

ジョン・ブロンド

ここで、PL/SQL Developer を介して単純な更新クエリを実行し、John の髪の色を黒に更新するとします。今...

  • 次にページがジョンの髪の色をリストしようとするとどうなるでしょうか?
  • 髪の色がキャッシュされたためにまだブロンドとして表示されていると仮定すると、そのキャッシュをフラッシュするにはどうすればよいでしょうか?
  • 髪の色がまだブロンドとしてキャッシュされていると仮定すると、CF ORM を使用して John の名前を Jonathon に変更するとどうなりますか? 行を更新するときに、髪の色を上書きして金髪に戻しますか?
  • 同様に、CF ORM を使用して髪の色を緑に更新しようとするとどうなりますか? CF は、キャッシュされた値 (金髪) が現在の値 (黒) ではないことを確認して通知し、何らかのフィードバックを提供しますか?

同様に重要な (おそらくもっと重要な) ことは、外部プログラムの代わりに CFQuery を使用して John の髪の色を更新した場合、これらの同じ質問に対する答えは何であるかということです。つまり、ORM 管理テーブルで CFQuery を安全に使用できますか?

CF のドキュメント、Hibernate のドキュメント、およびさまざまなオンライン ブログを確認してみましたが、ORM のキャッシングと、それが他のデータベース操作方法 (CFQuery、PL/SQL Developer など) とどのように相互作用するかについての情報が不足しています。どんな助けでも大歓迎です。

ありがとう。

4

3 に答える 3

2

キャッシュされたデータを外部で更新する場合は、自分でキャッシュを削除する必要があります。

見る:

ormEvictCollection()ormEvictEntity()、およびormEvictQueries()

于 2010-12-06T17:49:40.120 に答える
2

基本的な「キャッシング」は、ColdFusion リクエストと同じくらい持続する Hibernate セッションに近いためです。次のワークフローを見てみましょう。

ColdFusion リクエストが開始され、ニックの髪が赤に変わります。リクエスト終了。

SQL エディターで SELECT * ... を実行すると、色は赤になります。update を使用して、Blond に変更します。

新しい ColdFusion リクエストで、ORM を介してニックスの髪の色を取得します。その値は Blond です。

基本的に、Marc が言うように、二次キャッシュを使用しない場合、値は常にデータベースから取得されたものであり、正常に機能します。

于 2010-12-07T01:42:26.963 に答える
1

私の経験では、ほとんどの場合 (キャッシュが関係していない場合) は問題なく動作します。ただし、移行の一環として大量のデータを消去して再挿入するスクリプトがいくつかあります。そのような場合、ORMReload() は機能せず、ColdFusion を再起動する必要があります。これが発生した場合の明確な兆候は、CF から「更新に失敗しました。1 を予期しましたが、0 を受け取りました」というエラーが表示されることです。

于 2010-12-06T18:00:49.087 に答える