0

cfqueryの代替となるJavaメソッド/オブジェクトがあり、どちらも変数のサニテーションとより優れたキャッシングメソッドを可能にするのではないかと思います。

情報スキーマを使用してデータ型と文字の長さを取得し、それを使用してクエリ内の変数のデータ型と長さを検証できることを知っています。

しかし、誰もがバインド変数と変数サニテーションにcfqueryparamを使用するように変換しているため、cfqueryでのキャッシュの使用も妨げられます。

だから私は、より多くのパフォーマンスとスケーラビリティを得るためのより良い方法やスクリプトがあることを望んでいました...

個人的には、cfqueryでキャッシュする新しい方法または方法が必要だと思います。私たちが本当に望んでいるのは、x分間キャッシュすることではなく、データが変更されるまでキャッシュすることです。新しいデータを使用してから、データが再び変更されるまで再度キャッシュします。

代わりに、何年もの間、ColdFusionでcfqueryをキャッシュする時間を計算する必要がありました。これでは、データがいつ変更されたかをあまり制御したり認識したりすることはできません。

これは意味がありますか?

4

3 に答える 3

5

まず、誤解をなくしましょう。CF8 +では、cfqueryparamを使用するクエリをキャッシュできます。「全員が変換する」とはどういう意味かよくわかりません。これを使用することは、しばらくの間、ベストプラクティスと広く見なされてきたからです。

ですから、あなたの質問は実際には議論の余地があると思います。クエリを手動でキャッシュすることはできますが(そして私は他のデータ型に対してこれを行います)、cfqueryparamはしばらくの間これを行う理由ではありませんでした。

于 2009-12-22T04:19:17.517 に答える
1

データにアクセスするための「代替」方法を探している場合は、ORM(オブジェクトリレーションマッピング)が最適です。CF9を使用している場合、データのアクセスとキャッシュを管理するために、内部でHibernateライブラリ(Java)が使用されます。

CF7 +ユーザーは、ORM機能のためにMarkMandelによって構築されたTransferライブラリを使用できます。

于 2009-12-22T04:24:30.017 に答える
0

jarofclayの回答に加えて、Transfer ORMにはキャッシュシステムが組み込まれていることに注意してください(ただし、今後のバージョンでは、さらに優れた既存のソリューションを使用できるようになります)。これにより、パフォーマンスが向上します。

とにかく、スキーマとクエリの最適化から始めて、キャッシュを使用してみたほうがよいでしょう。データベースクエリからレンダリングされたコンテンツまで、実際にはさまざまなレベルで実行できます。

たとえば、新しいバージョンのRailoは、ehCacheなどの一部のエンタープライズレベルのキャッシングエンジンをサポートしています。

IMOこれは、Javaやクエリを台無しにするよりも、パフォーマンスタスクを解決するためのより良い方法です。私が物事を正しく理解していれば、それらは同じデータソースを介して実行され、おそらく同じ基になるバイトコードを使用している可能性があります。

于 2009-12-22T10:18:38.313 に答える