4D v14.3Execute on server |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
4D v14.3
Execute on server
Execute on server
Execute on server コマンドはサーバマシン上 (クライアント/サーバで実行された場合) 、または同じマシン上 (シングルユーザで実行された場合) で新しいプロセスを開始し、そのプロセスのプロセス番号を返します。 Execute on serverコマンドを使用してストアドプロシージャを開始します。ストアドプロシージャについての詳細は4D Server Referenceマニュアルのストアドプロシージャの節を参照してください。 クライアントマシンでExecute on serverを実行した場合、負のプロセス番号が返されます。サーバマシンでExecute on serverを実行すると、正のプロセス参照番号が返されます。サーバマシン上でNew processコマンドを実行することは、Execute on serverを実行することと同じです。 プロセスが作成できない場合 (例えばメモリ不足) 、Execute on serverは0を返し、エラーが発生します。このエラーはON ERR CALLでインストールしたエラー処理メソッドを使用してとらえることができます。 procedureには、新しいプロセスのプロセスメソッド名を指定します。4Dは新規プロセスのコンテキストを設定した後、このメソッドの実行を開始します。したがって、これがプロセスメソッドになります。 stackには、プロセスのスタックに割り当てるメモリの量を指定します。このメモリ領域にメソッド呼び出し、ローカル変数、サブルーチンの引数、スタックしたレコード等が“積み上げ”られてゆきます。この大きさはバイトで表され、少なくとも64K (約64,000バイト) を渡します。しかし、プロセスでサイズの大きいコールを続けて実行する場合等は (サブルーチンからサブルーチンを呼び出す等) 、これ以上の値を渡すこともできます。例えば、必要なら200K (約200,000バイト) を渡すこともできます。 Note: スタックはプロセスの合計メモリではありません。各プロセスはレコードやインタープロセス変数等のためにメモリを共有します。またプロセスはプロセス変数の保持にメモリを余計に使用します。スタックはローカル変数やメソッドコール、サブルーチンの引数、スタックされたレコードを維持するだけです。 64-bit 4D Serverに関する注意: 64-bit 4D Serverで実行されるプロセスのスタックは32-bit 4D Serverより多くのメモリー量を必要とします (大体2倍程度)。このことから最低でも128,000バイト、連鎖呼び出しがある場合は一般的に400,000バイト程度のスタックサイズを渡すことが 推奨されます。 64-bit 4D Serverでコードが実行されることが予測される場合、この引数の値をチェックしてください。 nameには新しいプロセスの名前を指定します。シングルユーザモードでは、ここで指定した名前が短タイムエクスプローラのプロセスリストに表示され、この新しいプロセスに対してPROCESS PROPERTIESコマンドを実行するとこの名前が返されます。クライアント/サーバモードでは、4D Serverのメインウインドウのストアドプロシージャリストに青字で表示されます。 この引数は省略することができます。省略した場合、プロセス名は空の文字列になります。 警告: New Processとは異なり、Execute on serverコマンドの実行時に、プロセス名の先頭にドル記号 ($) 記号を付けて、プロセスをローカルにしようとはしないでください。シングルユーザモードではExecute on serverコマンドはNew Processコマンドと同じ処理を実行するため、プロセスをローカルにしても正常に動作します。しかし、クライアント/サーバモードではエラーが発生します。 プロセスメソッドに引数を渡せるようになりました。サブルーチンにパラメータを渡すのと同じ要領でプロセスメソッドに引数を渡します。 しかし制約があります。ポインタ表現は渡すことができません。また、メソッドに対して配列を引数として受け渡すことができない点にも留意してください。プ ロセスメソッドは、新規プロセスのコンテキスト内で実行を開始する際に、$1, $2等に引数の値を受け取ります。 Note: プロセスメソッドに引数を渡す場合、必ずname引数を指定しなければなりません。この場合、この引数は省略できません。 param または戻り値に 4Dオブジェクト(C_OBJECT) を渡す場合、サーバーに対してはUTF-8のJSONフォームが使用されます。もし C_OBJECT オブジェクトにポインターが格納されている場合、そのポインターが参照している値が送られ、ポインターそのものは送られる訳ではないことに注意して下さい。 この最後の引数を指定した場合、4Dははじめにnameに指定した名前を持つプロセスが既に実行されているかどうかを調べます。同一名のプロセスが存在する場合、4Dは新規プロセスを開始せずにその名前を持つプロセスのプロセス番号を返します。 以下の例は、クライアント/サーバにおいてデータ読み込みの処理速度を飛躍的に向上する方法を示しています。以下のRegular Importメソッドにより、クライアント側でIMPORT TEXTコマンドを使用したレコード読み込みに要する時間を調べることができます:
` Regular Import Project Method 通常のデータ読み込みでは、4D Clientがテキストファイルの解析を行った後、各レコードごとに新規レコードを作成し、読み込んだデータをフィールドに格納して、データベースに追加 するためにレコードをサーバマシンに送信します。この結果、ネットワーク上には大量のリクエストが行きかいます。この処理を最適化するには、ストアドプロ シージャを利用し、サーバマシン上でローカルにジョブを実行します。クライアントマシンではドキュメントファイルをBLOBにロードし、引数にこの BLOBを渡してストアドプロシージャを開始します。ストアドプロシージャはこのドキュメントファイルをサーバマシンに保存し、ドキュメントをローカルに 読み込みます。したがって、ネットワークリクエストの大部分が必要なくなるため、データ読み込みはシングルユーザ版並の速度でローカルに実行されます。次 にCLIENT IMPORTプロジェクトメソッドを示します。このメソッドはクライアントマシン上で実行され、後のSERVER IMPORTストアドプロシジャを開始します。 ` CLIENT IMPORT プロジェクトメソッド 次に、ストアドプロシージャとして実行されるSERVER IMPORTプロジェクトメソッドを示します: ` SERVER IMPORT プロジェクトメソッド データベースにこの2つのプロジェクトメソッドを作成したら、例えば以下のようにストアドプロシージャベースのデータ読み込みを実行できます: CLIENT IMPORT(->[Table1];"Import") ベンチマークテストによると、このメソッドを使用してレコード読み込みを実行すると通常の読み込みよりも60倍高速に処理されました。 |
プロパティ
プロダクト: 4D
履歴
変更: 4D 2004.3 参照 ARTICLE USAGE
ランゲージリファレンス ( 4D v14 R3) Inherited from : Execute on server ( 4D v12.4) |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||