リクエストロギングによるORDAコードの最適化

Deeplからの自動翻訳

クライアントと4Dサーバー間のORDAリクエストのトラフィックを分析する必要があることはありませんか?時々、サーバーから応答を受け取るのに時間がかかることがあり、それがネットワークトラフィックのせいなのか、それともあなたが書いた最適化されていないリクエストのせいなのか、疑問に思うことがあるかもしれません。ありがたいことに、4D v17 R6 では、この遅延の原因を、新しい ORDA メソッドで判断することができます。 dsオブジェクトで利用できる新しいORDAメソッドで、この遅延の原因と思われるものを特定することができます。これらはデバッグ機能だけでなく、送信されたリクエストをよりよく理解することで、ORDAコードを最適化することができます。

ORDAリクエストのログを有効にする

この startRequestLog()メンバーメソッドは非常に柔軟で、ORDA リクエストをファイルまたはメモリにログ記録することができます。

ファイルにログを記録する

ファイルにログを記録するには、単に startRequestLog()を呼び出します。 Fileオブジェクトを使用して呼び出すだけで、 ORDA リクエストがどこに記録されるかがわかります。以下の例では、インデックスがないフィールドに対してクエリを実行していますが、これには時間がかかる可能性があります。この新しい機能のおかげで、リクエストの持続時間をチェックすることができます。

C_OBJECT
($employees;$file)
$file :=File("/PACKAGE/Logs/ORDARequests.txt")
$file .delete()
ds .startRequestLog($file)$employees:=ds.Employee.query("firstname = :1"; "abcd")//firstname is not indexed

ds .stopRequestLog()

各リクエストは、オブジェクトのJSON表現としてログに記録されます。

以下は、ORDARequests.txtファイルの内容である。

[
{
...
"startTime": "2019-07-02T12:33:25.922Z",
"endTime": "2019-07-02T12:33:27.681Z",
"duration":4200,
"response":{ ...}
….
}
]
となります。

ログからメモリへ

各リクエストはコレクション内のオブジェクトとして記録され、 それを getRequestLog()member メソッドで取得できます。

コレクションを返すので、利用可能なすべてのコレクションメソッドを使用することができます。

C_OBJECT($first;$e)
C_COLLECTION (
$log)

ds .startRequestLog(10)// Only the last 10 requests will be kept in memory
$first :=ds.Persons.all().first()
$e :=ds.Persons.query("name=:1"; "Brown")
$log :=ds.getRequestLog()
ALERT ("The longest request lasted: "+String($log.max("duration"))+" ms")
ds最長リクエスト時間)。stopRequestLog()

ORDAリクエストのロギングを無効にする

ORDA リクエストのログを停止するには、上記の例のように stopRequestLog()member メソッドを呼び出すだけです。

Avatar
- プロダクトオーナー - Marie-Sophie Landrieu-Yvertは、2017年にプロダクトオーナーとして4Dプロダクトチームに参加しました。プロダクトオーナーとして、彼女はユーザーストーリー(ユーザーが期待する新機能とその使用法)を書き、それを具体的な機能仕様に変換する役割を担っています。また彼女の役割は、実装された機能が顧客のニーズを満たしているかどうかを確認することでもあります。彼女は1995年にESIGELEC Engineering Schoolを卒業し、IBMでエンジニアとしてのキャリアをスタートさせました。様々なプロジェクト(保守や新規のプロジェクト)に参加し、Cobolのデベロッパーとして働きました。その後、UMLデザイナーおよびJavaデベロッパーとして勤務。最近は、機能要件の分析・記述、ビジネスチームと開発チームの調整などを主に担当しています。