【仕様】ORDER BY FORMULAがサーバー上で実行されないケース
【仕様】ORDER BY FORMULAがサーバー上で実行されないケース
v11.2以降,ORDER BY FORMULAコマンドは,クライアントではなく,サーバー側でフォーミュラーを評価するようになりました。
http://doc.4d.com/4Dv16/4D/16/ORDER-BY-FORMULA.301-3036513.ja.html
http://doc.4d.com/4Dv16/4D/16.1/Compatibility-page.300-3373287.ja.html
v2004まで
カレントセレクションのレコードは,1件ずつ,クライアントに送信され,その評価値が並び替えのキーとしてサーバー側で使用されました。
v11.2以降
カレントセレクションのレコードは,1件ずつ,サーバー側で評価され,そのまま値が並び替えのキーとして使用されました。
新しい動きは,ネットワークトラフィックが少なくて済む,というメリットがあります。
しかし,実際に試してみると,今までどおり,フォーミュラがクライアント側で評価されているケースもあることに気づきます。カレントセレクションのレコードが,1件ずつ,クライアントに送信されていることは,ネットワークリクエストログで見れば一目瞭然です。
http://doc.4d.com/4Dv16/4D/16.1/Appendix-E-Description-of-log-files.300-3373556.ja.html
注記:付録 E「ログファイルの詳細」は,デベロッパーにとって非常に有意義な技術資料です。「ネットワークリクエストログ」とは何か,クライアント/サーバーアプリケーションの開発に不可欠なのはなぜか,といった点についてさらに知りたい方は,下記の記事をご覧ください。
https://github.com/4D-JP/4d-tips-network-analysis
これは仕様です。
技術背景
並び替えのフォーミュラにFind in arrayのような関数が使用されている場合,配列はクライアント側に存在するものなので,これをサーバー側で正しく評価するためには,配列をサーバー側に送信しなければなりません。また,並び替えのフォーミュラにコンパイルされたメソッドが含まれる場合(つまりコンパイルモード),「サーバー上で実行」メソッドプロパティが有効にされていない限り,コンパイルされたメソッドは常にクライアント側で実行されるものなので,結局のところ,設定に関係なく,フォーミュラはクライアント側で評価されることになります。それで,メソッド内でFind in arrayが使用されている場合,インタープリターモード(フォーミュラはサーバー側で評価されるが,配列が存在しないので結果がランダム)とコンパイルモード(結果は正しいが,フォーミュラはクライアント側で評価される)の動きを合わせるため,配列を使用するコマンド(代表例:Find in array)やプロジェクトメソッドが含まれるフォーミュラは,モードに関係なく,クライアント側で評価されるよう,実装が見直された経緯があります(ACI0071465: v12.3)。
http://doc.4d.com/4Dv16/4D/16/ORDER-BY-FORMULA.301-3036513.ja.html
http://doc.4d.com/4Dv16/4D/16.1/Compatibility-page.300-3373287.ja.html
v2004まで
カレントセレクションのレコードは,1件ずつ,クライアントに送信され,その評価値が並び替えのキーとしてサーバー側で使用されました。
v11.2以降
カレントセレクションのレコードは,1件ずつ,サーバー側で評価され,そのまま値が並び替えのキーとして使用されました。
新しい動きは,ネットワークトラフィックが少なくて済む,というメリットがあります。
しかし,実際に試してみると,今までどおり,フォーミュラがクライアント側で評価されているケースもあることに気づきます。カレントセレクションのレコードが,1件ずつ,クライアントに送信されていることは,ネットワークリクエストログで見れば一目瞭然です。
http://doc.4d.com/4Dv16/4D/16.1/Appendix-E-Description-of-log-files.300-3373556.ja.html
注記:付録 E「ログファイルの詳細」は,デベロッパーにとって非常に有意義な技術資料です。「ネットワークリクエストログ」とは何か,クライアント/サーバーアプリケーションの開発に不可欠なのはなぜか,といった点についてさらに知りたい方は,下記の記事をご覧ください。
https://github.com/4D-JP/4d-tips-network-analysis
これは仕様です。
技術背景
並び替えのフォーミュラにFind in arrayのような関数が使用されている場合,配列はクライアント側に存在するものなので,これをサーバー側で正しく評価するためには,配列をサーバー側に送信しなければなりません。また,並び替えのフォーミュラにコンパイルされたメソッドが含まれる場合(つまりコンパイルモード),「サーバー上で実行」メソッドプロパティが有効にされていない限り,コンパイルされたメソッドは常にクライアント側で実行されるものなので,結局のところ,設定に関係なく,フォーミュラはクライアント側で評価されることになります。それで,メソッド内でFind in arrayが使用されている場合,インタープリターモード(フォーミュラはサーバー側で評価されるが,配列が存在しないので結果がランダム)とコンパイルモード(結果は正しいが,フォーミュラはクライアント側で評価される)の動きを合わせるため,配列を使用するコマンド(代表例:Find in array)やプロジェクトメソッドが含まれるフォーミュラは,モードに関係なく,クライアント側で評価されるよう,実装が見直された経緯があります(ACI0071465: v12.3)。
miyako- 投稿数 : 483
登録日 : 2016/07/05
Permissions in this forum:
返信投稿: 不可
|
|