ORDAを使用して、Client/Serverモードで大きなテーブル(特にリレーションを持つテーブル)にアクセスすることが、大幅に強化されました。4D v17 R5では、LANのパフォーマンスは2-3倍、WANのパフォーマンスは最大30倍向上しています。そして、何よりも素晴らしいのは、あなたのコードを変更する必要がなく、すべて自動で行われることです。面白いでしょう?では、詳しく見ていきましょう。
通常、クライアントアプリケーションでレコードを読み込むと、そのレコードのすべてのフィールドがサーバーから転送されます。不要なフィールドも含めてです。したがって、パフォーマンスは、アプリケーションの設計、データベース構造、およびネットワーク機能に依存します…特に複数または大規模なフィールドを持つ大規模なテーブルを使用している場合。例えば、低速のWAN上で、選択ベースのリストボックスでわずか数フィールドを使用している場合(多くの関係/フィールドと大きなテキスト/画像を持つ数十フィールドのテーブルの)、あなたのアプリケーションはすぐにサービス停止になります。
ORDAのリクエストは、以前は同じフィールドロードの原則を使用していました…今までは!v17 R5では、サーバーが各データクラスで必要な属性を分析し、関連する属性を特定するため、サーバーとクライアントの間で要求されたデータのみが転送されるようになります。
ケーススタディ
これらの改善点を説明するために、簡単なデータベースを使用してみましょう。
Bookテーブルには1,000のレコードがあります。Bookテーブルには1,000のレコードがあり、summaryフィールドには100から2,000文字、thumbnailフィールドには10KB程度の画像が含まれています。関連するAuthorテーブルでは、biographyフィールドは各レコードに10,000文字含まれています。
このデータベースを使用して、2つの選択ベースのリストボックスを作成しました。1つはORDAエンティティ選択、もう1つはクラシック選択を使用しています。それぞれのリストボックスでは、リレーションを有効にするために、本のタイトルとその著者を表示するようにしました。また、リストボックスを自動的にスクロールさせるアクションを追加し、人間の操作によって結果が乱されないようにしました。
下の表の測定値は、ビデオの例のサーバーとクライアントの間で送信されたTCPフレーム(すべての確認応答を含む)を示しています。クライアントのネットワーク接続は、Wi-Fiタイプ「802.11ac」(ダウンロード250Mbps、アップロード100Mbps、1msの遅延あり)です。
Mode | Frames | Overall size (bytes) | 時間 (ms) |
クラシック | 4,070 | 473,924 | 5,747 |
オルダ | 46 | 6,744 | 692 |
このように、ORDAを使用すると、わずかなフレームしか転送されないことになりますそして持続時間は?ネットワークの速度が遅いほど、ORDAと従来の手法の差は大きくなります。
新しいコンセプトです。OPTIMIZATIONコンテキスト
これは、システムが学習したことを記録し、後で再利用することができます。これを行うには、「context」属性を含むオプションオブジェクトを作成し、オブジェクトをパラメータとして設定する前に目的の値を指定するだけでよい。
If (Form.currentContext=Null)
Form .currentContext:=New object("context"; "contextListboxBookAndAuthor")
End if
Form .books:=ds.Book.all(Form.currentContext)
このオプション・オブジェクトは Create entity selectionコマンドと次のメンバ・メソッドで使用できるようになりました:dataClass.query(),entitySelection.query()、dataClass.fromCollection()、およびdataClass.all().
注:計測表では、できるだけ正確を期すために、コンテキスト機能を有効にしていません。
結論として
ORDAはあなたの開発を簡素化します。
- コードを変更することなく、情報の転送をスピードアップできます。
- テーブルから大きなフィールドを移動し、1-1関連テーブルに格納する必要がないため、クライアント/サーバーモードへの影響を防ぐことができます。
- LANの外にあるサーバーにアクセスする場合、リモートデスクトップ技術を使用せずに、クライアントを直接接続することができます。