現在のプロジェクトでは、既存の XPage アプリケーションを高速化するという一般的な要件があります。私たちが検討したことの 1 つは、一部の遅い先行入力フィールドを高速化する方法でした。これに対する高速と思われる解決策の 1 つは、元々あった DBColumn ではなく FTSearch を使用して実装することです。これが適切なアプローチであるかどうか、または必要なことを別の方法で行うための提案があるかどうかについて、アドバイスを求めたい.
背景: 速度に影響を与える要因は多数ありますが (ネットワーク遅延、サーバー OS、使用可能なサーバー メモリなど)、8.5.3 を使用しているため、可能な限り一般的にアプリケーションを最適化しました。問題領域を見つけるための IBM ツールキットの使用、および 8.5.3 でこれを支援するために IBM が追加した機能 (例えば、部分実行、最適化された JS および CSS オプションの使用など) の使用。残念ながら、3.5Gb RAM を搭載した 32 ビット Windows OS で実行されているサーバーで、さらに数か月間立ち往生しています。
応答が最も遅い要素の 1 つは、多数のドキュメントを参照する特定の先行入力です。最悪の場合、先行入力が有効なフィールドの候補リストが表示されるまでに、平均で約 5 ~ 6 秒かかります。SSJS を使用して Java クラスを呼び出し、(Ferry Kranenburg の XPages Snippetを使用して) dbcolumn 呼び出しを実行し、ビューから一意のリストを取得してから、SSJS に戻って配列をループし、各エントリに検索キー値が含まれているかどうかを確認します。見つかった場合は、単語内の検索テキストの周りに強調表示 (太字) の html タグを追加し、書式設定されたリストをブラウザーに返します。コードの実行にかかる経過時間を出力する print ステートメントを追加しました。今日の開発サーバーでの平均時間は約 3250 ミリ秒です。
このプロセスを高速化する方法を確認するために、いくつかのことを試しました。
すべての処理を行う Java クラスを追加しました (SSJS を使用しないため)。これにより、平均 100 ミリ秒しか節約できませんでした。
ビュー スコープのマネージド Bean を使用して、ページの読み込み時に一意のルックアップ リストをメモリに読み込みました。これにより、非常に高速な先行入力応答 (16 ミリ秒) が生成されますが、これは大規模なデータ セットでこれを行うには非常に悪い方法であると思われます。また、複数のユーザーがアプリケーションにアクセスしている場合、一般的なサーバーに実際に影響を与える可能性があります。ラージ オブジェクトと見なされるものに関する情報を見つけようとしましたが、メモリに格納するには大きすぎるというガイダンスや推奨事項を見つけることができませんでした (JSF と XPage のサイトを検索しました)。これに関する提案はありますか?
まだJavaクラスです-dblookupを実行して検索するすべての値の「リスト」を取得する代わりに、コードでFT検索を実行してドキュメントコレクションを取得し、各ドキュメントをループして必要なフィールド値を抽出し、それらを「SortedSet」に追加し(自動的に重複を許可しません)、ソートされたセットをループして検索語の周りに太字のタグを挿入し、それをブラウザに返します。これには平均 100 ミリ秒かかります。これは素晴らしく、ほとんど目立ちません。このアプローチには欠点がありますか、またはこの方法で行うべきではない理由はありますか?
これに関するフィードバックやアドバイスをありがとう。パム。
2013 年 8 月 14 日更新: 別のアプローチ (OpenNtf の IBM/Tony McGuckin Insights アプリケーションに触発された) を試しました。これは、マネージ Bean を使用し、大量のデータで高速な Company Search の先行入力です。
4 . Insights アプリケーションは複数のデータベースに分割されたデータを処理しますが、先行入力の原則は似ています。エントリの先頭だけでなく、テキスト内の文字列も検索する必要があったため、getAllEntriesByKey でビューを使用できませんでした。ビュー FTSearch に基づいて ViewEntryCollection を作成しようとしましたが、列に重複した名前がたくさんあるため、必要な一意のリストが得られませんでした。次に、分類されたビューで NotesViewNavigator を使用して、それをループしてみました。これにより、必要な一意のリストが作成されましたが、上記の他のどの方法よりも遅いことが判明しました。(これらのViewNavigator パフォーマンスのヒントを実装しました)。