クリアフィルター
記事
Toshihiko Minamoto · 2025年5月22日
しばらくの間、私はワークフロー機能について何らかの概念実証を行おうと計画していましたが、これは IRIS に存在する他の多くの機能と同様に、お客様にほとんど気付かれないまま終わってしまう傾向があります(その点については申し訳ありません)。 そこで数日前、この機能を構成して、Angular で開発したユーザーインターフェースに接続して使用するための例を作成することに決めました。
記事が非常に長くならなずに読みやすくするために、3 部に分けて説明しようと思います。 この最初の記事では、Workflow の機能とこれから解決する例について説明します。 2 つ目の記事では、Workflow の管理を担うプロファクションの構成と実装について詳しく説明します。 最後に、ウェブアプリケーションを通じて Workflow にある情報にアクセスする方法を説明します。
InterSystems IRIS Workflow Engine
この Workflow 機能を説明するには、IRIS ドキュメントに記載の説明をコピーするのが一番でしょう。
ワークフロー管理システムは、ユーザーへのタスクの分配を自動化します。 事前定義済みの戦略に従ってタスクの分配を自動化することによって、より効率的にタスクを割り当て、タスクの実行に対する責任感を高めることができます。 一般的な例は、顧客から問題に関する報告を受け取り、適切に対応できる組織のメンバーにその報告を送信し、問題が解決したら結果を顧客に報告するヘルプデスクアプリケーションです。
InterSystems IRIS Workflow Engine は、従来のスタンドアロン型のワークフロー管理システムよりもはるかに高レベルの機能を提供しています。
この Workflow 機能は IRIS のどこにあるのでしょうか? 非常に簡単です。管理ポータルからアクセスできます。
サンプルプロジェクトを詳しく見る前に、使用できる各オプションを簡単に説明します。
ワークフローロール
このオプションは、機能を使用するユーザーのロールを分類します。 ロールの定義に混乱するかもしれませんが、プロダクションから作成できるタスクのタイプとして考えています。 これらのロールに割り当てられる名前は、後でプロファクションで宣言し、そのロールに関連するタスクを作成するビジネスオペレーションの名前に一致する必要があります。
ワークフローユーザー
様々なタスクに割り当てられる IRIS ユーザーは、1 つ以上のロールに関連付けられます。 ユーザーは IRIS に登録されている必要があります。
ワークフロータスク
関連情報と共にシステムで作成されるタスクのリスト。 このウィンドウから、タスクのロールに応じた様々なユーザーにタスクを割り当てられます。
タスクは何でしょうか? 非常に簡単です。タスクは、EnsLib.Workflow.TaskRequest クラスのインスタンスであり、このタイプのオブジェクトは、生成されたビジネスプロセスから、クラス EnsLib.Workflow.Operation のビジネスオペレーションに、以前に作成したロールの名前とともに送信されます。 このアクションによって、EnsLib.Workflow.TaskResponse クラスのインスタンスが作成されます。 ビジネスオペレーションは、TaskResponse クラスインスタンスの CompleteTask メソッドが実行されるまで、レスポンスを返しません。
ワークフロー作業リスト
前の機能と同様に、関連する情報と共にタスクのリストも表示されます。
ワークフローの例
この記事に関連するプロジェクトには、慢性患者の治療など、医療組織の一般的な問題に対するソリューションを単純化した例が含まれます。 こういったタイプの患者には、継続的な管理と厳格なモニタリングが必要で、多くの場合、治療に関わる医療専門家にはそれらを行うための最適な手段がありません。
この例では、高血圧症の患者をモニタリングする方法を確認したいと思います。 患者は毎日、血圧計で血圧を測り、その血圧計から InterSystems IRIS がインストールされたサーバーにその読み取り値が送信されることを前提とします。 血圧測定値の収縮期血圧が 140、拡張期血圧が 90 を超える場合、その患者には特定の期間が過ぎてからもう一度血圧を測るように通知されます。2 回目の測定値がもう一度制限を超えた場合、患者と医師の両方にその状況が通知され、処置を決定することができます。
これを行うには、このタスクフローを 2 つのステージに分割します。
ステージ 1: 血圧測定値を毎日受信する。
HL7 メッセージと血圧測定値をプロダクションで受信します。
システムでユーザーの存在をチェックし(存在しない場合は作成)、その後で、ワークフローに関わるロールにユーザーを登録します。
血圧データを抽出し、アラート基準と比較します。
データがアラート基準を超える場合:
状況を説明し、血圧をもう一度測定するように要求するための、患者向けのタスクを作成します。
2 回目の血圧測定値を管理するための自動タスクを作成します。
データがアラート基準を超えない場合、このプロセスは次回の読み取りが翌日受信されるまで閉じられます。
ステージ 2: 最初の測定値がアラート値を超えた後の 2 回目の測定値を受信します。
HL7 メッセージと 2 回目のデータ測定値を受信します。
自動タスクの復旧が保留されます。
血圧レベルがアラート基準を超える場合:
自動タスクは警告ステータスを示して中止されます。
患者の状況を報告する医師の手動タスクが作成されます。
状況と、医師に報告されたことを警告する患者の手動タスクが作成されます。
レベルがアラート基準を超えない場合:
自動タスクは危険がないことを示して中止されます。
次の記事では、上記で説明した内容を反映するフローチャートのデザインについてより詳しく説明します。
ユーザーインターフェース
添付されたスクリーンショットからわかるように、InterSystems IRIS がタスク管理用に提供するユーザーインターフェースは控えめに言っても質素ではありますが、IRIS で得られるメリットの 1 つは、非常に簡単な方法でタスクフローを管理するための API REST を独自に作成できることです。この点については、最後の記事で説明します。
ユーザーに使いやすいインターフェースを提供するために、Angular Material を使用して、Angular で小さなウェブアプリケーションを開発しました。モバイルアプリケーションをシミュレーションするインターフェースを作成できます。
このモバイルアプリケーションは JSON Web Tokens を使って InterSystems IRIS に接続し、IRIS に公開された特定のウェブアプリケーションに HTTP リクエストを送信します。これにより、タスクに対してさまざまなアクターが実行したアクションが、定義されたタスクフローに反映されます。
次回の記事では...
この記事では Workflow の機能に関する紹介を終えたため、次の記事では、BPL を使って提供した例を解決するために必要なタスクフローを実装する方法を説明します。プロダクション全体を構成し、Workflow に関わるメインのクラス(EnsLib.Workflow.TaskRequest や EnsLib.Workflow.TaskResponse など)を確認します。
お読みいただきありがとうございました!
記事
Toshihiko Minamoto · 2025年5月22日
前回の記事では、一般的な概念と、InterSystems IRIS に統合されたタスクエンジンを使用して解決する問題を紹介しました。今回の記事では、相互運用性プロダクションを構成してソリューションを提供する方法を確認します。
Workflow Engine の構成
First we are going to define the roles of the tasks that we are going to manage, in our example we are going to define two types:
AutomaticBloodPressureRole: ユーザーの介入が不要な自動タスクを作成します。
ManualBloodPressureRole: ユーザーが手動で検証する必要のあるタスクを作成します。
後で様々な患者から HL7 メッセージを受信するたびにロールをユーザーに割り当てるため、ここでは割り当てる必要はありません。
また、IRIS ユーザーを Workflow に追加する必要もありません。これはプロダクションからコードで実行します。
プロダクションのセットアップ
この例では、アドホックで作成した「WORKFLOW」というネームスペース内にプロダクションを作成します。 このプロダクションに、必要とするビジネスコンポーネントを含めます。
最も単純なコンポーネントから説明し始めましょう。
ビジネスサービス
HL7_File_IN: 医療装置からのメッセージの受信をシミュレーションする特定のサーバーパスから HL7 ファイルを収集します。
ビジネスオペレーション
AutomaticBloodPressureRole: クラス EnsLib.Workflow.Operation のコンポーネント。Workflow で生成するために使用する、定義済みのロールの 1 つの名前を使用します。ユーザーとの直接的な対話を伴わないタスクです。
ManualBloodPressureRole: 前のビジネスオペレーションに似ていますが、この場合、生成するタスクには、それらをクローンするための直接的なユーザーの介入が必要です。
では、情報のフロー、およびサイクルに関連するタスクの作成と管理を管理するビジネスプロセスを詳しく見てみましょう。
Workflow.BP.BloodPressurePlan
このビジネスプロセスは BPL タイプで、患者のケアに関わるタスクの作成と、患者と血圧レベルに関連する情報を送信する医療装置からのレスポンスの取得を行います。
プロセスの開始:
この部分のフローは以下を行います。
ユーザーのチェック: 受信した ADT^A08 メッセージのユーザーをチェックします。存在する場合はフローを続行し、存在しない場合は IRIS にユーザーを作成して、ワークフローに定義されたロールに割り当てます。 ユーザーをロールに割り当てるには、以下のコマンドを実行します。
/// Workflow user creation
set sc = ##class(EnsLib.Workflow.UserDefinition).CreateUser(username)
/// Assigning Workflow user to the role
set sc = ##class(EnsLib.Workflow.RoleDefinition).AddUserToRole(role, username)
自動タスクの取得: このフローでは、自動タスクと手動タスクの両方を管理するため、受信した患者のユーザーに保留中の自動タスクがないかをチェックする必要があります。 保留中の自動タスクがある場合は、ノーマルレベルを超える値を持つ前の測定値があることを意味するため、重要です。 このチェックは、すべての作成されたタスクが保存されている TaskResponse テーブルで直接行います。クエリは以下のとおりです。
&sql(SELECT ID INTO :taskId FROM EnsLib_Workflow.TaskResponse WHERE TaskStatus_AssignedTo = :username AND TaskStatus_IsComplete = 0 AND %RoleName = :role)
OBX 数の取得: HL7 メッセージから OBX セグメントの数を取得します。
OBX 値の確認: OBX セグメントを確認し、血圧に関連するデータのみを抽出します。
保留中のタスクの有無: 2 番目のポイントで述べたように、保留中のタスクがあるかどうかを確認します。
1 回目の血圧測定:
この部分のフローでは、定義された最大血圧レベルを超える 1 回目の測定によって生成されていないメッセージを処理します。
血圧の確認: 血圧レベルが既定の制限を超えていないかをチェックします。超えていない場合は、プロセスは他の作業を行わずに終了します。 超えている場合は、櫃湯尾なタスクを作成する必要があります。
手動タスクの作成: 血圧が定義された安全レベルを超過している場合は、患者に状況を報告し、2 回目の測定が必要であることを示す手動タスクを作成する必要があります。 このアクティビティの構成を確認しましょう。
ビジネスオペレーション ManualBloodPressureRole を呼び出します。これにより、EnsLib.Workflow.TaskRequest タイプのメッセージを渡してタスクが生成されます。
callrequest.%Actions に患者が実行できるアクションをカンマ区切りで定義します。ここでは、"Accept" アクションのみを定義しています。
患者に示すメッセージを callrequest.%Message に構成します。
callrequest.%UserName でユーザー名を定義することで、作成したタスクに患者を割り当てます。
最後に、callequest.%Subject に題名またはタイトルを指定し、callrequest.%Priority に優先度(1~3)を指定します。
自動タスクの作成: 前のアクティビティの構成に似ていますが、ここではビジネスオペレーション AutomaticBloodPressureRole に送信します。 このタスクは、患者の 2 回目の血圧測定を待機するタスクで、保留中のタスクの有無のアクティビティで false を取得することによって、その患者に対してプロダクションで受信した新しいメッセージが新しいタスクを生成しないようにするタスクです。
タスクの待機: このアクティビティは、タスクと手動操作が完了するまで、つまり、患者が ManualBloodPressureRole で作成されたアラームを閉じて IRIS プロダクションが医療装置から 2 回目のメッセージを受け取るまでタスクフローを停止します。
警告の有無のチェック: 前の保留中のタスクがクローズされたら、このアクティビティに進みます。 この時点では、自動タスクのクローズにおいて、構成された最大血圧値を超えるレベルの新しい測定を受信(タスクは警告アクションによってクローズされます)したかどうかを確認します。 測定値が最大値未満である場合、このプロセスは終了します。 測定値が最大値を超える場合は、次のアクティビティに進みます。
医師の警告タスク: 患者に割り当てられた医師に対し、患者が危険な状態にある可能性があることを報告する手動タスクが作成されます。
患者の警告タスク: 患者に対し、医師が状況が報告されたことを示す新しい手動タスクが作成されます。
2 回目の血圧測定:
この部分のフローは、前に作成された自動タスクが完了しなかった場合にのみ実行されます。
血圧のチェック: もう一度、血圧値が制限を超えるかどうかについて受信したメッセージを検証します。
通常タスクの終了: レベルが最大値を超えていない場合、タスクがインスタンス化する EnsLib.Workflow.TaskResponse クラスが提供する CompleteTask メソッドで保留中のタスクをクローズします。 使用されるパラメーターは対応処置を示しますが、この場合、FalseAlarm 値を渡して語法であることを示します。必要に応じて他の内容を定義することも可能です。
警告タスクの終了: 前の場合と同じですが、この場合に Workflow エンジンに渡すアクションは Warning であり、前の「警告の有無のチェック」アクティビティでチェックされる値です。
以下のダイアグラムで確認できるように(文字通りではありませんが、仕組みを把握することはできます)、タスクフローは 2 つの「スレッド」または「プロセス」で機能するようになっています。
最初のスレッド/プロセスは、2 回目の測定を待機する必要がある場合に備えてオープン状態のままとなり、2 回目の測定を受信したときに最初のオープンスレッドの再開を引き起こす、つまり定義されたタスクフローを終了するのは、2 つ目のスレッド/プロセスです。
まとめ
ご覧のように、BPL でタスクを構成するのは非常に単純です。それほど複雑な作業を行わずに、自動タスクと手動タスクをシミュレーションできます。 次の記事がこのシリーズの最後となりますが、ユーザーが外部アプリケーションからタスクを操作する方法を確認しましょう。
お読みいただきありがとうございました!
お知らせ
Seisuke Nakahashi · 2025年3月11日
InterSystems IRIS での OpenEHR を利用について
InterSystems IRIS で OpenEHR を利用することについてご質問をいただくことがあります。それに対する回答は一般的に、組織がアプリ構築において OpenEHR をなぜどのように実装したいのかに大きく左右されます。簡単なガイドはこちらになります。
InterSystems は相互運用性に注力しています: InterSystems はHL7、IHE、DICOM、ISO などの標準規格による相互運用性を優先しています。これまでの私たちの経験から、ひとつの標準規格だけで複雑なヘルスケアデータのあらゆるニーズを満たせるとは考えていません。そのため OpenEHR の実装に際しては、これら標準規格と組み合わせて評価いただき、どのシナリオが最もうまく各標準規格によって対応できるか分析いただくことをお勧めします。
InterSystems 製品と OpenEHR: OpenEHR モデルを使用してアプリケーションやデータを構築する組織にとって、InterSystems IRIS は理想的なプラットフォームです。InterSystems IRIS はマルチモデル機能、スケーラビリティ、高性能、信頼性といった機能を提供します。それに加えて、InterSystems IRIS for Health は、ひとつのアプリケーションで HL7 FHIR を含む多くのヘルスケア標準規格を利用できる柔軟性も兼ね備えています。
OpenEHR と相互運用性: OpenEHR は HL7 FHIR より前に発祥しましたが、今や FHIR は OpenEHR の多くのユースケースをカバーしています。FHIR は主要な EHR システムを含めて幅広く実装されており、そのため現在、OpenEHR ベースのシステムとそれ以外のシステムを接続する必要性が高まっています。InterSystems のテクノロジーは、OpenEHR と他 EHR とのデータマッピングに優れています。
結論: OpenEHR をお使いの予定であれば、プラットフォームとして InterSystems IRIS for Health をぜひご検討ください。OpenEHR がどこに最もフィットするか見るために、まずシナリオをきちんと明確にされることをお勧めします。
お知らせ
Mihoko Iijima · 2025年6月2日
開発者の皆さん、こんにちは!
InterSystems FHIR とデジタルヘルスの相互運用性コンテスト 2025 の勝者が発表されました!
今回のコンテストには、11 の素晴らしいアプリケーション 🔥 が投稿されました。
ご応募いただきました参加者の皆さん、素敵な作品をありがとうございました!
それでは受賞者を発表します!
Experts Nomination
🥇 1位 - $5,000 は、FHIRInsight を開発された @José.Pereira さん、 @henry さん、 @Henrique さんに贈られました。
🥈 2位 - $2,500 は、iris-fhir-bridge を開発された @Muhammad.Waseem さんに贈られました。
🥉 3位 - $1,000 は、health-gforms を開発された @Yuri.Gomes さんに贈られました。
🏅 4位 - $500 は、fhir-craft を開発された @Laura.BlázquezGarcía さんに贈られました。
🏅 5位 - $300 は、CCD Data Profiler を開発された @Landon.Minor さんに贈られました。
🌟 $100 - IRIS Interop DevTools を開発された @Chi.Nguyen-Rettig さんに贈られました。
🌟 $100 - hc-export-editor を開発された @Eric.Fortenberry さんに贈られました。
🌟 $100 - iris-medbot-guide を開発された @shan.yue さんに贈られました。
🌟 $100 - Langchain4jFhir を開発された @ErickKamii さんに贈られました。
🌟 $100 - ollama-ai-iris を開発された @Oliver.Wilms さんに贈られました。
Community Nomination
🥇 1位 - $1,000 は、iris-medbot-guide を開発された @shan.yue さんに贈られました。
🥈 2位 - $600 は、FHIRInsight を開発された @José.Pereira さん、 @henry さん、 @Henrique さんに贈られました。
🥉 3位 - $300 は、FhirReportGeneration を開発された @XININGMA さんに贈られました。
🏅 4位 - $200 は、iris-fhir-bridge を開発された @Muhammad.Waseem さんに贈られました。
🏅 5位 - $100 は、fhir-craft を開発された @Laura.BlázquezGarcía さんに贈られました。
受賞された皆さん、おめでとうございます!また、コンテストにご興味お持ちいただきありがとうございました!
次回のコンテストもご期待ください!
お知らせ
Seisuke Nakahashi · 2025年5月22日
インターシステムズは、InterSystems IRIS、InterSystems IRIS for Health、HealthShare Health Connect のポイントリリース 2025.1 をリリースしました。新しいバージョン番号は 2025.1.0.225.1 となります。本リリースは、SDS対応ビジネスホストを利用するユーザに影響を与える、深刻な相互運用性の問題に対応するために行われました。
問題の詳細SDS対応に設定された特定のビジネスホスト構成において、UIから新しい設定を適用すると、必要な再起動が行われていないにもかかわらず、変更が適用されたと誤って表示されることがありました。その結果、本番環境で設定が有効にならず、ユーザを混乱させたり予期しない動作を招く可能性があります。
ポイントリリースの理由影響を受ける構成では誤動作を引き起こす可能性があります。そこで、特にプロダクション要素の正確かつ即時の更新を必要とするユーザのみなさまのことを考え、広く情報を伝えるとともに素早く修正をお届けするため、ポイントリリースとして本リリースを優先しました。
修正が含まれるリリース本ポイントリリースによって、以下のすべてのキットおよびコンテナが更新されます。
InterSystems IRIS 2025.1.0
IRIS for Health 2025.1.0
HealthShare Health Connect 2025.1.0
本リリースは、WebGateway、Arbiter、ICM、ロックダウンされた各種コンテナの更新も含まれています。
お知らせ
Mihoko Iijima · 2025年6月9日
開発者の皆さん、こんにちは!
次のアイデアコンテストの開催が決定しました!(InterSystems 社員も含め、すべての開発者コミュニティメンバーの皆さんが参加できます!)
💡 第 4 回 InterSystems アイデアコンテスト 💡
InterSystems IRISおよび関連製品・サービスを強化するための革新的なアイデアを募集しています。 あなたのアイデアが他のユーザにもたらす具体的なメリットや、開発者のインターシステムズの技術体験をどのように向上させるかを強調し、実際のユースケースに基づいたご提案をお待ちしています。
📅 期間: 2025年6月9日~7月6日
🏆 最優秀アイデアには賞品があります!+ランダム抽選も予定しています!
🎁 参加賞:コンテストに採用されたアイデアの投稿者には素敵な参加賞をご用意しています。
>> アイデアの登録はこちら! <<
応募要件:
InterSystems のアイデアポータル に登録されたユーザ(InterSystems SSOでログインします)により、アイデアコンテスト期間中に作成されたものであること
他の既存のアイデアの一部でないこと(新しいアイデアに限ります)
InterSystems IRIS および関連製品・サービスの既存の機能を説明するものでないこと
英語で投稿されたものであること
AI により生成されたものではなく、個人により書かれたものであること
InterSystems の専門家により有意義であると認められたものであること
❗以下の構成で記述してください:
1️⃣ アイデアの説明を記述。
2️⃣ 対象者は誰であるのか。
3️⃣どのような問題を解決できるアイデアであるか。
4️⃣アイデアが製品の効率性、安定性、信頼性などにどのような影響を与えるものであるか。
5️⃣アイデアが実際にどのように使用できるかを示す具体的なユースケースやシナリオの提示
すべてのアイデアはモデレーションの対象となります。 応募されたアイデアの明確化をお願いする場合があります。 条件を満たしたアイデアには、特別に"アイデアコンテスト" ステータスが与えられます。
参加資格:
インターシステムズの社員・非社員を問わず、どなたでもご参加いただけます。
賞品:
1. 参加賞 - コンテストに採用されたアイデアの投稿者全員
🎁 Aluminum Media Stand
2. Expert award - InterSystems の審査員が優秀なアイデアを選出します。
🥇 1位 - TBD
🥈 2位 - TBD
🥉 3位 - TBD
3. ランダム抽選 - ランダムに選出された作品に贈られます。
🎁 TBD
メモ:InterSystems 従業員は参加賞のみ獲得できます。Expertやランダムアワードは、InterSystems社員以外の全開発者コミュニティメンバーが対象です。
開催スケジュール:
⚠️ アイデア応募期間: 6月9日~29日
✅ 投票期間:6月30日~7月6日
🎉 勝者発表: 7月7日
Good luck! 🍀
注:すべての賞品は、在庫状況や発送方法によって異なります。 商品によっては、特定の国への海外発送ができない場合があります。 賞品がご利用いただけない場合は、その旨をお知らせし、代替品をご用意いたします。 クリミア、ロシア、ベラルーシ、イラン、北朝鮮、シリア、その他米国が禁輸措置をとっている国にお住まいの方には賞品をお届けできません。
お知らせ
Mihoko Iijima · 2025年7月9日
開発者の皆さん、こんにちは!
開発者の方々の業務を効率化する有用なツールの開発を目的とした、InterSystems のオンラインプログラミングコンテストの開催が決定しました!📣
🏆 InterSystems Developer Tools コンテスト 🏆
期間:2025年7月14日~8月3日
賞金総額: $12,000
テーマ:
コンテストのテーマは、InterSystems IRIS を使用して、開発を加速させ、より高品質なコードに貢献し、ソリューションのテスト、デプロイ、サポート、または監視を支援する、開発者の体験を向上させるアプリケーションの開発です。
応募要件:
アプリケーションやライブラリは完全に機能するものでなければなりません。他の言語ですでに存在するライブラリのインポートや直接のインターフェイスであってはなりません(C++を除きます)。既存のアプリケーションやライブラリのコピーペーストでの応募もできません。
応募可能なアプリケーション
Open Exchange アプリケーションの新規作成、または既存アプリケーションであっても大幅に改善されているものであればご応募いただけます。
コミュニティの担当チームは、コンテストへの応募を承認する前に申請された全アプリケーションをレビューします。
全てのアプリケーションは、IRIS Community Edition 、IRIS for Health Community Editionで動作する必要があります。MacやWindowsのホスト版をご利用いただく場合は、インストールキットをダウンロードしてください。コンテナを利用する場合は InterSystems Container Registryから pull、または、最新バージョンのイメージ(intersystemsdc/iris-community:latest または intersystemsdc/irishealth-community:latest)をご利用ください。
コミュニティエディションのインストールキット入手方法については、「InterSystems IRIS/InterSystems IRIS for Health コミュニティエディションのダウンロード方法」をご参照ください。
コンテナ版IRISの利用方法については、「InterSystemsコンテナレジストリの使い方とコンテナ開始までの流れ(解説ビデオ付き)」をご参照ください。
アプリケーションはオープンソースであり、GitHub または GitLab で公開されている必要があります。
アプリケーションの README ファイルは、英語で記述してください(日本語で記述したものがあればそのまま掲載いただき、英文の追記をお願いします。翻訳アプリを使用しますが翻訳をお手伝いすることもできますのでお気軽にお知らせください!)。また、インストール手順や、アプリケーションがどのように動作するかの説明、またはビデオデモを含めてください。
1人の開発者は最大3つのアプリケーションを応募できます。
記事はUSコミュニティに投稿してください。
注意:インターシステムズの審査員は、複雑さと有用性の基準に基づきコンテストに応募が承認されるかどうかの最終決定権を持ちます。その決定は最終的なものであり、不服申し立ての対象にはなりません。
賞品:
1. Experts Nomination - 審査員から多く票を集めたアプリケーションには、以下の賞金が贈られます。
🥇 1位 - $5,000
🥈 2位 - $2,500
🥉 3位 - $1,000
🏅 4位 - $500
🏅 5位 - $300
🌟 6-10位 - $100
2. Community winners - 開発者コミュニティで多く票を集めたソリューションには、以下の賞金が贈られます。
🥇 1位 - $1,000
🥈 2位 - $600
🥉 3位 - $300
🏅 4位 - $200
🏅 5位 - $100
❗複数の参加者が同数の票を獲得した場合、全参加者が勝者となり賞金は勝者間で分配されます。❗賞金は、本人確認ができた人にのみ授与されます。疑わしい場合は、主催者が連絡を取り、参加者についての追加情報を求める場合があります
参加資格:
どなたでもご参加いただけます!(InterSystems 開発者コミュニティのアカウントを作成するだけでご応募いただけます)
開発者がチームを組んで共同でアプリケーションを作成し、応募することもできます! 1チーム 2~5名 までご参加いただけます。
チームでご応募いただく場合は、アプリケーションの README にチームメンバー名の記載をお忘れなく!!(開発者コミュニティのプロファイルのリンクもお願いします)
スケジュール:
🛠 アプリケーション開発と応募期間:
2025年7月14日 (00:00 EST): コンテスト開始!
2025年7月27日 (23:59 EST):応募締め切り日.
✅ 投票期間:
2025年7月28日 (00:00 EST):投票開始日!
2025年8月3日 (23:59 EST):投票終了日
応募、投票期間中、アップロードしたアプリケーションは改良できます。
Helpful Resources:
✓ アプリケーション例
webterminal - IRIS ターミナルのウェブアプリケーションとしてのエミューレーション
git-source-control - @Timothy Leavitt さんが開発された共同開発環境と IRIS UI 開発エディタの変更管理用 Git ツール
iris-rad-studio - UI 用 RAD ツール
cmPurgeBackup - バックアップツール
errors-global-analytics - エラー可視化ツール
objectscript-openapi-definition - open API 生成
Test Coverage Tool - テストカバレッジ支援ツール
iris-bi-utils - IRIS BI用ツールセット
and many more.
✓ 開発を開始するのに最適なテンプレート
iris-dev-template
Interoperability-python
rest-api-contest-template
native-api-contest-template
iris-fhir-template
iris-fullstack-template
iris-interoperability-template
iris-analytics-template
✓ For beginners with IRIS:
Build a Server-Side Application with InterSystems IRIS
Learning Path for beginners
InterSystems 製品を初めて使用する方向け学習コンテンツなど
ラーニングパス
✓ For beginners with ObjectScript Package Manager (IPM):
How to Build, Test and Publish IPM Package with REST Application for InterSystems IRIS
Package First Development Approach with InterSystems IRIS and IPM
✓ コンテストへの応募方法
Need Help?
ご質問がある場合は、この投稿へコメントいただくか、InterSystems の Discord server チャンネルにご参加ください!
皆様からのアプリケーションのご応募、お待ちしております!👍
❗️ コンテストに参加された場合、こちらに記載されているコンテスト規約に同意したものとみなされます。ご応募の際、ご一読いただきますよう、お願い申し上げます❗️
記事
Toshihiko Minamoto · 2025年7月22日
OMOP Odyssey - InterSystems OMOP、クラウドサービス(トロイ編)
InterSystems OMOP クラウドサービスの期限切れ間近のトライアル版を通じた OHDSI(「オデッセイ」と読む)コミュニティに対する実装者のアプローチInterSystems OMOP とは?
InterSystems OMOP は、InterSystems クラウドサービスポータルを介して HealtheShare サービスとして提供されており、HL7® FHIR® データを Observational Medical Outcomes Partnership(OMOP)共通データモデル(CDM)に変換します。 InterSystems OMOP は S3 バケットに格納されている FHIR データを参照し、自動的に変換処理を行って、そのデータを OMOP CDM 形式でクラウドホスト型リポジトリに送信します。 するとユーザーは、ATLAS や HADES などの外部の Observational Health Data Sciences and Informatics(OHDSI)ツールと新しいタブに開く JDBC などのデータベースドライバーを併用して、データの分析タスクを実行できるようになります。
要約: S3 にホストされた FHIR Bulk Export データを OMOP CDM に変換し、クラウドホスト型の IRIS または postgres 構成の任意のデータベースに変換します。
ここでは、上記の「フルコース」を試して、最新の強力なツールと OHDSI コミュニティのアプリケーションの驚くべきエコシステムに囲まれた実装を最初から最後まで実行します。あちらこちらでドキュメントを使いまわさないようにし、その過程で地雷 👣 🔫 を紹介します。
素敵なものはバケットから生まれる
初めてサービスをプロビジョニングし、作成ダイアログにアクセスして入り口でS3の情報を尋ねられると、すぐに鶏と卵の状況にあるように感じられるかもしれません。これをできる限りうまく偽装して後で更新することも、変換用に Amazon S3 バケットをどのようにプロビジョニングするかを理解した上で、落ち着いたアプローチをとることも可能です。これは、データを共有するためにほとんどのクラウド型データソリューションに実装されている最新のアプローチです。ソースの場所を自分でプロビジョニングして、サービスにその場所と対話するためのアクセスを許可します。
バケットと初期ポリシースタックのプロビジョニング
サービスのデプロイメントの作成
デプロイメントに制約されたバケットポリシーの更新
コンソールをクリックして終了するか、サンプルスタックでこれを行うことができます。
s3-omop-fhir-stack.yaml
---
AWSTemplateFormatVersion: '2010-09-09'
Description: AWS Cloudformation Stack that will create the S3 Bucket and Policy for the OMOP Server
Parameters:
BucketName:
Description: The name of the bucket to use to upload FHIR Bundles for Transformation.
Type: String
AllowedPattern: "^[a-z0-9][a-z0-9-]{1,61}[a-z0-9]$"
PolicyfromOMOPConfiguration:
Description: The name of the bucket to use to upload FHIR Bundles for Transformation.
Default: "arn:aws:iam::1234567890:role/skipper-deployment-*-Role"
Type: String
Resources:
OMOPFHIRTransactionBucket:
Type: AWS::S3::Bucket
Properties:
BucketName: !Sub ${BucketName}
PublicAccessBlockConfiguration:
BlockPublicAcls: true
BlockPublicPolicy: true
IgnorePublicAcls: true
RestrictPublicBuckets: true
OMOPBucketPolicy:
Type: AWS::S3::BucketPolicy
Properties:
Bucket: !Ref OMOPFHIRTransactionBucket
PolicyDocument:
Version: "2012-10-17"
Statement:
- Effect: Allow
Principal:
AWS:
- !Sub ${PolicyfromOMOPConfiguration}
Action:
- "s3:GetObject"
- "s3:GetBucketLocation"
- "s3:ListBucket"
Resource:
- !Sub "arn:aws:s3:::${BucketName}" # Bucket itself
- !Sub "arn:aws:s3:::${BucketName}/*" # FHIR Objects within the bucket
スタックは任意の方法で作成できます。1 つの方法として AWS CLI を使用できます。
aws cloudformation create-stack --stack-name omopfhir --template-body s3-omop-fhir-bucket.yaml --parameters ParameterKey=BucketName,ParameterValue=omop-fhir
バケットに、プロビジョニングと FHIR 取り込み用のソースフォルダで使用する初期キーを作成します。
aws s3api put-object --bucket omop-fhir --key Transactions/in --profile pidtoo
aws s3api put-object --bucket omop-fhir --key termz --profile pidtoo
これで、次のようにしてサービスをプロビジョニングするように設定できるはずです。arn を要求するフィールドに注意してください。説明では名前を要求しているにもかかわらず、実際にはバケットの arn を要求しています... 小さな 👣🔫 がここにあります。デプロイメントが作成されたら、「FHIR から OMOP へのパイプライン」内にある「構成」ナビゲーション項目に移動し、ポリシーをクリップボードにコピーします。そこにある指示に従って、これを現在のポリシーに組み込むか、ロールの値を取得してスタックを更新します。
aws cloudformation update-stack --stack-name omopfhir --template-body s3-omop-fhir-bucket.yaml --parameters ParameterKey=PolicyfromOMOPConfiguration,ParameterValue="arn:aws:iam::1234567890:role/skipper-deployment-4a358965ec38ba179ebeeeeeeeeeee-Role"
いずれにしても、ソースバケットのアクセス許可には、このようなポリシーが表示されるはずです... (アカウント番号、ロールは不明瞭です)
推奨ポリシー
{
"Version": "2012-10-17",
"Statement": [
{
"Principal": {
"AWS": "arn:aws:iam::123456789099:role/skipper-deployment-33e46da9bf8464bbe5d1411111-Role"
},
"Effect": "Allow",
"Action": [
"s3:GetObject",
"s3:ListBucket",
"s3:GetBucketLocation"
],
"Resource": [
"arn:aws:s3:::omop-fhir",
"arn:aws:s3:::omop-fhir/*"
],
"Sid": "IRIS Cloud Bucket Access"
}
]
}
私は、ルートアカウントを開くことを許可しながらもバケットを制限する、よりオープンなポリシーを使用しました。こうすることで、1 つのバケット(または複数のバケット)で複数のデプロイメントをサポートできます。あまりお勧めできませんが、IAC の目的で単一のポリシーで複数の環境をサポートするための参考としての 2 番目の例です。
ルートアカウント
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"AWS": [
"arn:aws:iam::111:root", ### Entire accounts(3)
"arn:aws:iam::222:root",
"arn:aws:iam::333:root"
]
},
"Action": [
"s3:GetObject",
"s3:ListBucket",
"s3:GetBucketLocation"
],
"Resource": [
"arn:aws:s3:::omop-fhir",
"arn:aws:s3:::omop-fhir/*",
"arn:aws:s3:::omop-fhir2",
"arn:aws:s3:::omop-fhir2/*"
],
"Condition": {
"StringLike": {
"aws:PrincipalArn": [
"arn:aws:iam::111:role/skipper-deployment-*-Role",
"arn:aws:iam::222:role/skipper-deployment-*-Role",
"arn:aws:iam::333:role/skipper-deployment-*-Role"
]
}
}
}
]
}
これが変換のソースです。では、ターゲットである OMOP データベースに移りましょう。
OMOP の紹介
もう 1 つのデプロイメントである「IRIS 上の OMOP」を簡単に見ながら共通データモデルをご紹介します。
OMOP(Observational Medical Outcomes Partnership)データベースは、複数のソースをサポートするために途方もない複雑さを、CDM と呼ばれる共通データモデルにまとめる方法を示す記念碑的なものです。コミュニティ外部のさらに詳しい説明は、コピペコンテンツ(またはさらに酷い生成コンテンツ)になりますが、このコミュニティのドキュメントは本当によくできています。
「SQL クエリツール」ナビゲーションに移動すると、InterSystems の共通データモデルの実装を確認できます。これは、OHDSI コミュニティのよく知られた OMOP スキーマの図の横に表示されます。
この作業はここまでです。変換目的のみでサービスを使用するためのもう 1 つのオプションを調べてみましょう。
BYODB(所有データベースの持ち込み)
前回プロビジョニングした際に、データベースを無料で入手しましたが、別のデータベースをターゲットにする場合は、この記事を書いた時点でサービスが Postgres 構成への変換もサポートしたため、確実に行えます。このために、Amazon RDS を介して外部データベースを操作し、サービスに接続する方法を説明します。
計算
ここにフラグを立てて、もう 1 つの 👣🔫 に注意を喚起しようと思います。独自のデータベースを持ち込む場合、サービスに合わせてデータベースのサイズを決定する際に「Biggie Smalls」と呼んでいます。InterSystems は、データベース側に対する変換側のサイズ設定を非常に適切に行うため、変換パフォーマンスの速度は書き込み先の SQL インスタンスに依存するという事実を考慮し、それに応じて行う必要があります。一部の人にとっては当たり前のことかもしれませんが、RDS、Google Cloud SQL などを安く利用したため、OMOP データベースへの FHIR バンドルの永続時間に影響が出ました。これを目撃したときに、指摘しておこうと思いました。
そうは言っても、私はまったく逆のことをしています。Jeff Bezos に可能な限り最小限の金額を渡し、db.t4g.micro postgres RDS インスタンスを使用しています。
これを公開して、データベースに対応するリージョンの証明書バンドルのダウンロードに移ります。 .pem 形式であることを確認してください。次に、データベースとの対話方法に関係なく、データベースインスタンスに接続し、DATABASE と SCHEMA を作成します。
OMOP CDM 5.4 のロード
では、OHDSI コミュニティの友人たちの協力を得て、OHDSI ツールを使用して、OMOP 共通データ モデル スキーマを含む RStudio バージョン 5.4 でサポートされているスキーマをプロビジョニングしましょう。
install.packages("devtools")
devtools::install_github("OHDSI/CommonDataModel")
install.packages("DatabaseConnector")
install.packages("SqlRender")
Sys.setenv("DATABASECONNECTOR_JAR_FOLDER" = "/home/sween/Desktop/OMOP/iris-omop-extdb/jars")
library(DatabaseConnector)
downloadJdbcDrivers("postgresql")
必要なものが揃ったので、postgres インスタンスに接続し、上記でプロビジョニングした OMOPCDM54 にテーブルを作成しました。接続
cd <- DatabaseConnector::createConnectionDetails(dbms = "postgresql",
server = "extrdp-ops.biggie-smalls.us-east-2.rds.amazonaws.com/OMOPCDM54",
user = "postgres",
password = "REDACTED",
pathToDriver = "./jars"
)
作成
CommonDataModel::executeDdl(connectionDetails = cd,
cdmVersion = "5.4",
cdmDatabaseSchema = "omopcdm54"
)
「赤い海」を除けば、正しく実行できたことでしょう。では、作業内容を確認しましょう。サービスとの使用に適した外部の postgres OMOP データベースがあるはずです。
OMOP Cloud Service の構成
ソースもあり、ターゲットもあります。では、サービスを構成したこれらを繋ぎ合わせ、FHIR から外部データベースへの変換パイプラインを完成させましょう。InterSystems OMOP Cloud Service の準備が完了しました!OMOP の旅はまだまだ続きます...
お知らせ
Ayumu Tanaka · 2024年11月26日
2024年12月4日に InterSystems System Alerting and Monitoring (SAM) を InterSystemsダウンロードサイト、コンテナレジストリ、ドキュメントサイトから削除します。
InterSystemsは SAM の開発中止と、非推奨になることを昨年ご案内しました。現在この技術をお使いのお客様については、ミニマムサポートバージョンを過ぎた製品バージョンのサポートと同様にサポートを継続します。
これは、SAM が提供するオブザーバビリティに関心をもつようなお客様はほとんど、既存の運用プラットフォームのビューをより優れたものにするために、すでにInterSystems IRIS の Metric API と構造化ログ(英語ドキュメント)を、組織のオブザーバビリティ・プラットフォームに接続済みだと判明したことによります。
現在ご利用中または利用を予定されていた SAM に関するご質問は、弊社担当アカウントチームにお問合せいただくか、 dbpprodmgrs@intersystems.com までご連絡ください。
記事
Megumi Kakechi · 2025年1月29日
インターシステムズは、InterSystems IRIS、InterSystems IRIS for Health、HealthShare Health Connect のメンテナンスバージョン 2024.1.3 をリリースしました。
✅ 2024.1.3
2024.1.3 は、最近発行された以下の警告の修正を含む、以前のリリース2024.1.x のバグフィックスを提供します。警告:特定の $List 操作でデータベースとジャーナルファイルに不正なデータが作成される
詳細な情報は、以下のページをご参照ください(すべて英語版です):
InterSystems IRIS
InterSystems IRIS for Health
HealthShare Health Connect
キットの取得方法
本製品は、従来からのインストーラパッケージ形式と、コンテナイメージ形式をご用意しています。その一覧は、以下のサポートプラットフォームページ(英語)をご覧ください。Supported Platforms webpage
インストーラパッケージは WRC Direct から入手できます。InterSystems IRIS、IRIS for Health は IRIS ダウンロードページから、HealthShare Health Connect は HealthShare ダウンロードページから、それぞれ入手してください。
コンテナイメージは InterSystems Container Registry から入手できます。
各製品のバージョン番号は 2024.1.3.456.0 です。
お知らせ
Masahito Miura · 2025年3月27日
インターシステムズは、InterSystems IRIS®data platform、InterSystems IRIS® for HealthTM、および HealthShare® Health Connect の 2025.1 リリースを一般提供 (GA) したことを発表しました。2025.1 は、拡張メンテナンス(EM)リリースです。リリースハイライト今回のリリースには、以下のような数々の興味深いアップデートが含まれます:
高度なベクトル検索機能
新しいディスクベースの近似最近傍探索 (ANN) インデックスにより、ベクトル検索クエリが大幅に高速化され、数百万のベクトルに対して秒以下の応答が得られます。詳しくは、次の演習 - Vectorizing and Searching Text with InterSystems SQL をご覧ください。
ビジネス・インテリジェンスの強化
IRIS BI キューブの構築と同期における自動依存関係分析により、複雑なキューブの依存関係における一貫性と整合性が保証されます。
SQL とデータ管理の向上
標準 SQL ページネーション構文 (LIMIT...、OFFSET...、OFFSET...、FETCH...) の導入
DDL文の一括インポートを簡素化する新しいLOAD SQLコマンド
行ストレージと列指向ストレージのレイアウトをシームレスに変換するALTER TABLEコマンドの強化
データベース操作の最適化
ジャーナル・レコード・サイズの縮小による効率の向上
データベースの圧縮が高速化されました。特に長い文字列を多くむデータベースで期待できます。
新しいデータベースをミラーに追加する際の自動化が強化されました。
ECP 管理タスク用の新しいコマンドラインユーティリティ
セキュリティコンプライアンスの強化
FIPS 140-3 標準に準拠した暗号ライブラリをサポート
最新化された相互運用性 UI
ソース・コントロールの統合、VS Code との互換性、フィルタリングの強化、スプリット・パネル・ビューなど、改良されたプロダクション構成と DTL エディター エクスペリエンスが選択可能となりました。 オプトインの方法とフィードバックの提供方法については、 このデベロッパー・コミュニティの記事 をご覧ください。
ヘルスケア機能の拡張
整合性チェックとリソース管理を含む、効率的なFHIR一括取り込みとスケジューリング
強化されたFHIR一括アクセスと改善されたFHIR検索操作
新しいデベロッパー エクスペリエンス機能
DTL エディタに Python サポートが組み込まれ、Python のスキルを持つ開発者が InterSystems プラットフォームをより効果的に活用できるようになりました。詳細は以下のビデオをご覧ください - Using Embedded Python in the BPL and DTL Editors
OpenTelemetryによる観測性の向上
IRISにトレース機能を導入し、Webリクエストとアプリケーション・パフォーマンスを詳細に観察できるようになりました。
ドキュメント注目機能の詳細は、以下のリンクからご覧いただけます。(英語)
InterSystems IRIS 2025.1 ドキュメント、リリースノート
InterSystems IRIS for Health 2025.1 ドキュメント、リリースノート
Health Connect 2025.1 ドキュメント、リリースノート
さらに、アップグレードの影響に関するチェックリスト では、このリリースにアップグレードする際に注意する必要があるすべての変更点の概要を簡単に確認できます。
特に、InterSystems IRIS 2025.1 では、新しいジャーナル・ファイル・フォーマット・バージョンが導入され、以前のリリースと互換性がないため、混合バージョンのミラー・セットアップに一定の制限が課されることに注意してください。詳細については、対応するドキュメント を参照してください。
早期アクセス・プログラム (EAP)現在、多くのEAPが用意されています。このページ より興味のあるものに登録してください。
ソフトウェアの入手方法通常通り、拡張メンテナンス(EM)リリースには、サポートされているすべてのプラットフォーム用のクラシックインストールパッケージと、Docker コンテナ形式のコンテナイメージが付属しています。詳細については、ドキュメント を参照してください。インストール・パッケージとプレビュー・キーは、WRCの InterSystems IRIS Data Platform フルキットのページ から入手できます。さらに、キットは評価サービスのウェブサイトでも提供しています。IRIS: https://wrc.intersystems.com/wrc/coDistIRIS.csp評価サービス: https://evaluation.intersystems.com/コンポーネント: https://wrc.intersystems.com/wrc/coDistGen.cspInterSystems IRIS のコンテナイメージと、対応するすべてのコンポーネントは、InterSystems Container Registry(ICR) から入手できます。※コンテナには "2025.1"または"latest-em"の両方のタグが付けられています。 docker コマンドに関する追加情報については、以下の投稿をご覧ください。https://jp.community.intersystems.com/node/533171このリリースのビルド番号は、 2025.1.0.223.0 です。
お知らせ
Toshihiko Minamoto · 2023年4月19日
インターシステムズは、InterSystems IRIS Data Platform、InterSystems IRIS for Health、HealthShare Health Connect、InterSystems IRIS Studio の 2023.1 リリースを一般提供開始(GA)したことを発表しました。
2023.1 は、拡張メンテナンス(EM)リリースです。2023.1では、多くのアップデートと機能拡張が追加されました。
また、Columnar Storageの本番対応、Bulk FHIR、MacOS 13 Venturaへの対応など、まったく新しい機能が追加されています。さらに、 Foreign Table を使用する機能を提供する新機能は「実験的」としてリリースされ、早期アクセスプログラム(EAP)を通じてアクセスできるようになる予定です。
リリースハイライト
プラットフォームのアップデート
InterSystems IRIS Data Platform 2023.1では、本番用に以下の新しいオペレーティングシステムをサポートします。
MacOS 13 Ventura.
アナリティクスとAIのエンハンス
Columnar Storage: SQLテーブルの新しいストレージオプションとして、IRISの従来の行ストレージと比べ、分析クエリを桁違いに高速化するColumnar Storageを、特定のユースケース向けに本番対応でサポートするようになりました。
インターオペラビリティと FHIR
Bulk FHIR サポート: InterSystems Bulk FHIR エクスポートは、FHIRサーバーの新機能で、市場で急速に支持を集めている機能です。
スピード、スケール、セキュリティのエンハンス
Foreign Table: このリリースでは、InterSystems IRIS で外部データを活用するための新しい (実験的) 機能が導入されました。外部テーブルは、SQL で作成したクエリに対して通常のテーブルとして表示されますが、そのデータは IRIS に物理的に格納されていません。データは、リモートファイル、サードパーティーのデータベース(オンプレまたはDBaaS)、またはECP接続が実用的でない別のIRISサーバーにある可能性があります。つまり、これらのテーブルのデータは IRIS によって管理されているわけではありませんが、IRIS に投影されています。この機能は「エクスペリメンタル」としてリリースされ、早期アクセスプログラム(EAP)を通じて利用できます。
メモリ設定: InterSystems IRIS の新規インストールでは、共有メモリやロックテーブルサイズの設定に、よりスマートなデフォルト値が使用されるようになりました。この新しいデフォルト値は、設定されたグローバル・バッファ・サイズ (ユーザが設定しない場合は、利用可能なシステム・メモリを考慮します) に基づいてベスト・プラクティスな設定を適用し、ほとんどの環境でうまく機能します。ユーザーは、従来通り、特定の値でこれらのデフォルト値を変更することができます。既存の設定には影響はありません。
プラットホームのスケーラビリティ: このリリースでは、大規模な本番環境において、最も要求の厳しい負荷に対応できるよう、スケーラビリティの強化が行われています。これには、デジャーナル時のジャーナルファイルの非同期読み取りや、非常に高い負荷の下でリソースの利用を最適化し、競合を制限する、Enterprise Cache Protocol(ECP)の最適化が含まれます。
ソフトウェアの入手方法
通常通り、Extended Maintenance (EM)リリースには、サポートされているすべてのプラットフォーム用のクラシックインストールパッケージと、Dockerコンテナ形式のコンテナイメージが付属しています。 詳細については、サポートされるプラットフォームを参照してください。
インストール・パッケージとプレビュー・キーは、WRCの InterSystems IRIS Data Platform または HealthShare のフルキットのページから入手できます。さらに、キットは評価サービスのウェブサイトでも提供しています。
InterSystems IRIS スタジオ は、Componentsの配布ページから入手できます。
InterSystems IRIS および IRIS for Health の Enterprise Edition と Community Edition の両方のコンテナイメージと、対応するすべてのコンポーネントは、Webインターフェースが新しくなった InterSystems Container Registry から入手できます。docker コマンドに関する追加情報については、以下の投稿をご覧ください。
InterSystems Container Registry の Web ユーザー・インターフェイスを発表
このリリースのビルド番号は、 2023.1.0.229.0 です。
ドキュメント
注目機能の詳細は、以下のリンクからご覧いただけます。
InterSystems IRIS 2023.1 documentation and release notes
InterSystems IRIS for Health 2023.1 documentation and release notes
HealthShare Health Connect 2023.1 documentation and release notes
また、本リリースに関連するアップグレード情報については、こちらのリンクをご確認ください。
記事
Toshihiko Minamoto · 2021年5月11日
1. ブロックチェーン
この記事を書いている時点(2019年2月)で、ビットコインの価値はそれが絶頂期だったころの 5 分の 1 未満に下落しています。 そのため、ブロックチェーンの私の体験について誰かに話すときに最初に耳にするのは、「今頃ブロックチェーンを欲しがる人がいるのか」という偽りなく懐疑的な言葉です。
その通り。ブロックチェーンの盛り上がりは衰退しています。 ところが、それが基づいているテクノロジーはここにとどまり、特定の分野で使用され続けるでしょう。一般的にインターネットではこのテクノロジーの使用方法が記述された資料でいっぱいです。
(たとえば[medium](https://medium.com/@matteozago/50-examples-of-how-blockchains-are-taking-over-the-world-4276bf488a4b) と [forbes](https://www.forbes.com/sites/bernardmarr/2018/05/14/30-real-examples-of-blockchain-technology-in-practice/#23a4daed740d) に掲載されています)。
ご存知のように、ブロックチェーンは分散レジストリ、すなわち、レジストリの完全なコピーを格納している複数のノードに分散されたデータベースです。 レコード(トランザクション)がブロックを形成し、ブロックがブロックのチェーンを形成するところに、ブロックチェーンの鍵となる機能があります。 ブロックチェーンはアペンド演算のみをサポートしているため、 ブロックチェーンにすでに保存されたトランザクションに変更を加えることは、ほぼ不可能ということになります。
ブロックチェーンに関するチュートリアルはインターネット上にたくさんあります(ブロックチェーンについて聞いたことがない方は、[こちらの簡単な動画](https://www.youtube.com/watch?v=SSo_EIwHSd4)をまずご覧ください)。
ブロックチェーンが順調な成果を見せていた時、文字通りどこにでも、そのテクノロジーを使用するための呼び出しが複数ありました。 ただし、ブロックチェーンが必要となる可能性のあるプロジェクトやタスクには、明確な特性があります。
まず第一に、一貫性と信頼性のある大量のデータを書き込むプレーヤー/ユーザーがたくさん存在する必要がある点です。
そうであれば、誰もが信頼するサードパーティは存在しないはずです。
公開データ検証の仕組みが必要となります。
こういった条件のすべてを満たす場合、ブロックチェーンの使用を検討するのも良いかもしれません。
こういったタスクは、どの業界にも見られます。 [www.101blockchains.com](http://www.101blockchains.com/) プロジェクトでは、潜在的および既存のブロックチェーンプロジェクトに関する情報と、様々な業界でブロックチェーンテクノロジーを使用するニュアンスを集約しています。
たとえば、ブロックチェーンは、ヘルスケアの分野で次のタスクに使用することができます。
患者記録の安全なリモート管理
サプライチェーン全体で変更不可能なトランザクションによる、偽造医薬品への対策
詐欺やデータ改ざんの可能性の排除による、臨床試験の監視と有効性の改善
企業部門は通常、プライベート許可型ブロックチェーンと呼ばれる特殊なブロックチェーンを使用しています。 このようなネットワークには、トランザクションを検証するための特別なノードセットがあります。
しかし、最初の InterSystems IRIS ブロックチェーンアダプターを開発する際、非許可型ブロックチェーンに区分されるイーサリアムという種類のブロックチェーンを選択しました。イーサリアムは、単一のコントロールセンターを持たないオープンプラットフォームです。 これは、このブロックチェーンエンジンの人気と、多くのツールやライブラリを備え、十分に成熟したインフラストラクチャであることを基に採用しました。 イーサリアムのツールを使えば、誰でもプライベートブロックチェーンを作成することができます。
2. アダプター
では、アダプターの話に戻りましょう。
InterSystems IRIS のアダプターは(Ensemble でも同様に)、外部システムと対話可能にする InterSystems IRIS クラスのクラスまたはパッケージです。 InterSystems IRIS アダプターは、インバウンド(外部システムが対話を開始した場合に外部システムからデータを受信)とアウトバウンド(InterSystems IRIS が対話を開始した場合に外部システムと連携)に分けられます。
IRIS Ethereum アダプターはアウトバウンドアダプターであり、ほかのほとんどの InterSystems IRIS アダプターとはわずかに異なります。 このアダプターには、小さな NodeJS モジュールも含まれています。 図 1 はこのアーキテクチャを示しています。
図 1.
アダプターの NodeJS モジュールではイーサリアムと連携するための NodeJS ライブラリを使用します。
アダプターは次のことを行います。
スマートコントラクトをイーサリアムにデプロイする(スマートコントラクト、開発ツール、および例を網羅した記事を別途掲載する予定です)。
スマートコントラクトのメソッド(ブロックチェーンの状態を変更するメソッドと変更しないメソッド)を呼び出す。
トランザクションを保存する(ウォレット間で資金を送金する)。
ブロックチェーンの状態を取得するほかのメソッドを呼び出す。
すべてのリクエストをログに記録する(NodeJS モジュールによって行われ、デバッグに有効)。
OpenExchange上のアダプターのソースコード。
3. 簡単な例
アダプターには「Hello World」サンプルが付属しています。
イーサリアムを使用するには(このサンプルを実行するには)以下の作業を行います。
使用するネットワークを選択します。 Ropsten などのテストネットワークは通常、開発目的で使用できます。
このネットワークにウォレットを作成して、資金を追加します。
ローカルイーサリアムクライアント( Geth など)をインストールするか、クラウドプロバイダー( Infura など)と連携するための鍵を取得します。
ビジネスオペレーションを構成する際は、次の項目を設定する必要があります(図 2)。
NodeJS モジュールが動作するサーバーとポート(デフォルトポートは 3000 )
プロバイダーの設定(この場合、Infura へのアクセス)
ログイン情報(ユーザー名にウォレット番号、パスワードに秘密鍵を指定します。 InterSystems IRIS はログイン情報を別のデータベースに保存します。このデータベースは、暗号化を有効にする必要があります。)
図 2.
スマートコントラクトを使用するには、ファイルシステム内に(使用するスマートコントラクトごとに)フォルダを作成し、次の 2 つのファイルを配置する必要があります。*abi.txt*bytecode.txt
これらのファイルには、スマートコントラクトの ABI とそのバイトコードが含まれている必要があります。 スマートコントラクトの ABI は、JSON 形式によるインターフェースの正式な記述です。 ABI とバイトコードは、スマートコントラクトのコンパイル時に作成されます。
バイトコードは、コントラクトのデプロイに必要です。
InterSystems IRIS 相互運用性テストサービスを使用して、ビジネスオペレーションをテストできます。
図 3 では、テストサービスを使用してどのようにスマートコントラクトがデプロイされるのかを示しています。 このビジネスオペレーションを呼び出すと、トランザクションのハッシュを含むメッセージが結果として返されます。
図 3.
ropsten.etherscan.io(https://etherscan.io/)ブラウザを使用してこのトランザクションを見つけ、デプロイされたスマートコントラクトのアドレスを取得できます。
アダプターを使用してスマートコントラクトのメソッドを呼び出すには、運用構成の ContractFolder と ContractAddress フィールドに入力する必要があります。
スマートコントラクトの実行コードは非常に単純です。
set ..ContractABI = [].%FromJSON(..ContractFolder_"abi.txt")
set contract = ..Adapter.GetContract(##class(Ethereum.Address).%New(..ContractAddress),..ContractABI)
set result = contract.hello()
set pResponse = ##class(Ens.StringContainer).%New(result.args)
スマートコントラクトのアドレスと ABI をアダプターの GetContract メソッドに渡し、メソッドを呼び出すために使用するスマートコントラクトオブジェクトを作成します。 この場合、文字列を返す hello() メソッドはスマートコントラクトで定義されている必要があります。
この例では、hello() メソッドはブロックチェーンの状態を変更しないため、同期的に呼び出すことができますが、 ブロックチェーンの状態を変更するメソッドの実行時間は非常に長くなることがあります(トランザクションの検証を待つ必要があるため)。
このようなメソッドを呼び出すには、InterSystems IRIS が提供する遅延応答の仕組みを使用します。 アダプターは遅延応答トークンを送信する必要があり、トランザクションが承認されると、NodeJS モジュールはその実行結果を InterSystems IRIS に渡します。 これを行うには、Web アプリケーションを構成し、受信した応答を処理する追加のビジネスサービスを運用に追加する必要があります。
以下は、ブロックチェーンの状態を変更するメソッドを呼び出すためのコードです。
// EthereumAccount(ウォレット)と privateKey の取得
do ##class(Ens.Config.Credentials).GetCredentialsObj(.cred, "Ethereum.Demo.EthereumOperation", "Ens.Config.Credentials", ..Credentials)
set account = ##class(Ethereum.Address).%New(cred.Username)
set privateKey = cred.Password
//コントラクト ABI の読み取り
set ..ContractABI = [].%FromJSON(..ContractFolder_"abi.txt")
// コントラクトオブジェクトの取得
set contract = ..Adapter.GetContract(##class(Ethereum.Address).%New(..ContractAddress),..ContractABI)
$$$ThrowOnError(..DeferResponse(.deferred))
// gas の推定
do contract.SetOptions(account)
set gasJSON = contract.EstimateGas("setName",pRequest.Name)
$$$TRACE(gasJSON.gas)
do contract.SetOptions(account, privateKey, ##class(Ethereum.Wei).%New(1000000000), ##class(Ethereum.Wei).%New(100*gasJSON.gas),,deferred)
set result = contract.setName(pRequest.Name)
この場合、スマートコントラクトの setName() メソッドを呼び出す前に、遅延応答トークンを含む多数のパラメーターを指定する必要があります。
次の記事では、スマートコントラクトについて詳しく説明し、InterSystems IRIS Ethereum アダプターを使って実際の問題を解決する例を示します。
記事
Tomohiro Iwamoto · 2020年6月3日
アプリケーションがデプロイされ、すべてが問題なく動作しています。 素晴らしいですね! しかし、その後突然電話が鳴り止まなくなりました。アプリケーションが時々「遅くなる」というユーザーからの苦情の電話です。 これは一体どういうことなのでしょうか? なぜ時々遅くなるのでしょうか? このような速度低下を検出し、解決するにはどのようなツールと統計情報に注目すべきなのでしょうか? お使いのシステムのインフラはユーザーの負荷に対応できていますか? 本番環境を調べる前に、どのようなインフラ設計上の問題を問うべきなのでしょうか? 新しいハードウェアのキャパシティプランニングを、必要以上の設備投資を行うことなく自信を持って行うにはどうすればよいのでしょうか? どうすれば電話がかかってこなくなるのでしょうか? そもそも電話がかかってこないようにするには、どうすればよかったのでしょうか?
このシリーズの他の記事のリストはこちら
長い道のりの始まり
これは、システムパフォーマンスの監視、確認、トラブルシューティングに使用できるツールとメトリック、およびパフォーマンスに影響を与えるシステムとアーキテクチャの設計上の考慮事項について説明する連載の最初の投稿です。 途中、Caché、オペレーティングシステム、ハードウェア、仮想化、およびコメントのフィードバックで話題になっているその他の領域のパフォーマンスを理解するため、本題からそれる場面がかなりあります。
フィードバックグループに従い、パフォーマンスデータからデプロイ済みのアプリケーションとインフラのメリットと制限を詳しく確認し、その後に選りすぐれた設計とキャパシティプランニングに戻ります。
言うまでもなく、常にパフォーマンスメトリックを確認する必要があります。データに目を向けてさえいれば、ずっと前から分かっていたはずのパフォーマンスの問題に顧客が驚いているのは残念なことです。 しかし、当然ながらここではどのデータが原因なのかということが問題です。 まずは現在のシステムの健全性を感じ取れるよう、いくつかの基本的なCachéとシステムのメトリックを収集することから始めましょう。 後の投稿では、主なメトリックの意味について詳しく説明します。
システム監視には、Cachéの内外から利用できる多くのオプションがあります。この連載では、それらの多くについて説明します。
まずは、すべてのCachéシステムに最初からインストールされている継続的データ収集ツールである、^pButtonsを見てみましょう。
次の投稿を確認し、pButtonsの最新コピーがあることを確認してください。
https://community.intersystems.com/post/intersystems-data-platforms-and-performance-%E2%80%93-how-update-pbuttons
システムパフォーマンスメトリックの収集 - ^pButtons
Caché pButtonsユーティリティは、作成したログファイルから読み取り可能なHTMLパフォーマンスレポートを生成します。 pButtonsから出力されるパフォーマンスメトリックは、簡単に抽出、グラフ化、確認できます。
pButtons のhtmlファイルに収集されるデータには、次のものがあります。
Caché の設定:構成、ドライブの割り当てなど。
mgstat:Cachéのパフォーマンスメトリック - ほとんどの値は1秒あたりの平均です。
Unix:vmstatとiostat:オペレーティングシステムのリソースとパフォーマンスに関するメトリック。
Windows:パフォーマンスモニター:Windowsのリソースとパフォーマンスに関するメトリック。
その他の有用なメトリック。
pButtons によるデータ収集はシステムのパフォーマンスにほとんど影響を与えません。メトリックはすでにシステムによって収集されており、pButtonsは単にこれらをパッケージ化し、整理して転送しやすくするだけです。
ベースラインを維持し、傾向分析と問題解決に役立てるため、業務サイクル全体を通して毎日pButtonで24時間(午前0時から午前0時)のデータを収集することをお勧めします。 例えば、月末処理からデータを取得する場合など、業務サイクルが1カ月以上になる場合もあります。 他に外部パフォーマンス監視システムや収集システムを使用していない場合は、年間を通じてpButtonsを実行できます。
次の重要な点を考慮する必要があります。
ディスク容量がいっぱいにならないようにするため、ログディレクトリを本番データとは異なる場所に変更し、蓄積した出力ファイルをそちらに保管するようにしてください!
オペレーティングシステムのスクリプトを実行するか、定期的にpButtonsのファイルを圧縮してアーカイブしてください。このファイルは肥大化する可能性があるため、これはWindowsでは特に重要です。
定期的にデータを確認してください!
すぐに分析が必要な問題が発生した場合は、pButtonsのデータをプレビューすることができます(データはすぐに収集されます)が、メトリックは引き続き継続的に保存され、1日の終わりに収集されます。
プレビュー、実行の停止、独自のデータ収集の追加など、pButtonの詳細については、最新のCachéドキュメントの「Cachéモニタリングガイド」を参照してください。
http://docs.intersystems.com
pButtonsのHTMLファイルデータは(CVSファイルなどに)分離・抽出可能で、スクリプトを作成したり、単にカットアンドペーストしたりして、グラフの描画やその他の分析に利用することができます。 次の投稿の後半では、出力例をグラフで確認します。
もちろん、パフォーマンスに緊急の問題がある場合は、WRCにご連絡ください。
pButtonsによる24時間のデータ収集をスケジュールする
^pButtonsはターミナルプロンプトから手動で開始するか、スケジュールすることができます。 毎日24時間の収集をスケジュールするには、以下の手順に従ってください。
1. pButtonsのファイル構造を準備するため、Cachéターミナルを起動して%SYSネームスペースに切り替え、pButtonsを手動で1回実行します。
%SYS>d ^pButtons
Current log directory: /db/backup/benchout/pButtonsOut/
Available profiles:
1 12hours - 12 hour run sampling every 10 seconds
2 24hours - 24 hour run sampling every 10 seconds
3 30mins - 30 minute run sampling every 1 second
4 4hours - 4 hour run sampling every 5 seconds
5 8hours - 8 hour run sampling every 10 seconds
6 test - A 5 minute TEST run sampling every 30 seconds
テストを行うには6番のオプションを選択してください。 30秒ごとにサンプリングする5分間のテスト実行です。 この番号は異なる場合がありますが、"test"というわかりやすい項目名になっています。
テスト中にCollect^pButtonsを実行すると(以下に例を示します)、runidを含む情報が表示されます。 この場合は、「20160303_1851_test」です。
%SYS>d Collect^pButtons
Current Performance runs:
20160303_1851_test ready in 6 minutes 48 seconds nothing available to collect at the moment.
%SYS>
この5分間の実行が終わるまで、6分48秒かかることに注意してください。 ログを収集してhtml形式にまとめる時間を確保するため、pButtonsでは実行のたびに2分の猶予期間が追加されます。
2. 重要! pButtonsのログ出力ディレクトリを変更してください。デフォルトの出力先は <cache install path>/mgr フォルダーです。 UNIXの場合、ログディレクトリのパスは例えば次のようになります。
do setlogdir^pButtons("/somewhere_with_lots_of_space/perflogs/")
Cachéにディレクトリへの書き込み権限があり、出力ファイルの蓄積に必要なディスク容量が確保されていることを確認してください。
3. 次のコマンドを実行し、30秒間隔で新しい24時間プロファイルを作成します。
write $$addprofile^pButtons("My_24hours_30sec","24 hours 30 sec interval",30,2880)
pButtonsにプロファイルが追加されたことを確認してください。
%SYS>d ^pButtons
Current log directory: /db/backup/benchout/pButtonsOut/
Available profiles:
1 12hours - 12 hour run sampling every 10 seconds
2 24hours - 24 hour run sampling every 10 seconds
3 30mins - 30 minute run sampling every 1 second
4 4hours - 4 hour run sampling every 5 seconds
5 8hours - 8 hour run sampling every 10 seconds
6 My_24hours_30sec- 24 hours 30 sec interval
7 test - A 5 minute TEST run sampling every 30 seconds
select profile number to run:
注意:収集間隔は変更できます。通常の監視では30秒で十分です。 pButtonsは間隔ごとにデータを収集するため、出力ファイルが非常に大きくなる可能性があります。そのため、24時間定期的に実行する場合は5秒(…”,5,17280)未満の間隔を指定しないことをお勧めします。 特定の時刻を対象に問題を解決しようとしており、より詳細なデータが必要な場合は、デフォルトプロファイルのいずれかを使用するか、5秒間隔で1時間(…”,5,720)といったより短い期間で新しいカスタムプロファイルを作成してください。 pButtonsは複数同時に実行できるため、24時間のpButtonsと同時に5秒間隔の短いpButtonsを実行することができます。
4. ヒント UNIXサイトの場合は、diskコマンドを確認してください。 「iostat」コマンドで使用されるデフォルトのパラメーターには、ディスクの応答時間が含まれていない場合があります。 最初に、現在設定されているディスクコマンドを表示します。
%SYS>zw ^pButtons("cmds","disk")
^pButtons("cmds","disk")=2
^pButtons("cmds","disk",1)=$lb("iostat","iostat ","interval"," ","count"," > ")
^pButtons("cmds","disk",2)=$lb("sar -d","sar -d ","interval"," ","count"," > ")
ディスク統計を収集するには、適切なコマンドを使用し、運用中のUNIXに合わせて構文を編集してください。 末尾のスペースに注意してください。 以下にいくつかの例を示します。
LINUX: set $li(^pButtons("cmds","disk",1),2)="iostat -xt "
AIX: set $li(^pButtons("cmds","disk",1),2)="iostat -sadD "
VxFS: set ^pButtons("cmds","disk",3)=$lb("vxstat","vxstat -g DISKGROUP -i ","interval"," -c ","count"," > ")
iostatコマンドとsarコマンドの両方を実行すると、非常に大きなpButton htmlファイルを作成できます。 筆者の場合、通常のパフォーマンスレビューではiostatのみを使用しています。 コマンドを1つだけ設定するには、以下のように記述します。
set ^pButtons("cmds","disk")=1
pButtonsの設定に関する詳細は、オンラインドキュメントを参照してください。
5. Management Portal > System Operation > Task Managerで、pButtonsを真夜中に起動するようにスケジュールします。
Namespace: %SYS
Task Type: RunLegacyTask
ExecuteCode: Do run^pButtons("My_24hours_30sec")
Task Priority: Normal
User: superuser
How often: Once daily at 00:00:01
pButtonsデータの収集
InterSystemsデータプラットフォームのより新しいバージョンのpButtonsには、自動収集機能があります。 データを手動で収集してhtmlファイルにまとめるには、%SYSネームスペースで次のコマンドを実行し、未処理のpButtons html出力ファイルを生成します。
do Collect^pButtons
htmlファイルは、手順2で設定したlogdirにあります(設定していない場合は、今すぐ設定してください!)。 設定していない場合、デフォルトの場所は <Caché install dir/mgr> になります。
ファイル名は <hostname_instance_Name_date_time_profileName.html> になります(例:vsan-tc-db1_H2015_20160218_0255_test.html)。
Windowsパフォーマンスモニターの考慮事項
オペレーティングシステムがWindowsの場合、Windowsパフォーマンスモニター(perfmon)を使用して、収集対象の他のメトリックと同期してデータを収集できます。 pButtonsの古いCachéディストリビューションでは、Windowsパフォーマンスモニターを手動で構成する必要があります。 この投稿のコメントで要望があれば、パフォーマンスカウンターを定義してpButtonsと同じ期間と間隔で監視とスケジュール実行を行うためのパフォーマンスモニター用のテンプレートを作成する方法について記事を書きます。
概要
この投稿により、考察すべきデータの収集が始まりました。 週の後半には、サンプルデータとその意味を見ていきます。 皆さんは自分のシステムで収集したデータを追跡できます。 それではまた。
http://docs.intersystems.com
記事
Tomohiro Iwamoto · 2020年6月4日
前回の投稿では、pButtonsを使用してパフォーマンスメトリックを24時間収集する処理をスケジュールしました。 この投稿では、収集対象の主なメトリックのいくつかと、それらの土台となるシステムハードウェアがどのように関連しているかを見ていきます。 また、Caché(または任意のInterSystemsデータプラットフォーム)メトリックとシステムメトリックの関係についても調べます。 さらに、これらのメトリックを使用してシステムの毎日の健全性を把握し、パフォーマンスの問題を診断する方法もご紹介します。
このシリーズの他の記事のリストはこちら
2016年10月に編集...
pButtonsデータを .csv ファイルに抽出するスクリプトの例はこちらで確認できます。
2018年3月に編集...
画像が消えていましたが、元に戻しました。
ハードウェア食品グループ
この連載を読み進めていくと、パフォーマンスに影響を与えるサーバーコンポーネントを次のように分類できることが分かってきます。
- CPU
- メモリ
- ストレージIO
- ネットワークIO
これらのコンポーネントのいずれかに負荷がかかっている場合、システムのパフォーマンスとユーザーエクスペリエンスが低下する可能性があります。 これらのコンポーネントはすべて相互に関連しているため、1つのコンポーネントに対する変更が別のコンポーネントに影響する可能性があり、予期しない結果が生じることがあります。 私はストレージアレイのIOボトルネックを解消するとCPU使用率が100%に跳ね上がり、ユーザーエクスペリエンスがさらに悪化した例を見たことがあります。これは、システムが突然自由に作業量を増やせるようになったものの、ユーザー活動とスループットの増加に対応するためのCPUリソースがなかったために発生したものです。
また、Cachéシステムの動作がサーバーコンポーネントにどのように直接影響を与えるかも説明します。 ストレージのIOリソースが限られている場合はシステムメモリを増やし、Cachéグローバルのバッファーに割り当てるメモリを増やすことで、好ましい変化をもたらすことが可能になります。これにより、システムストレージの読み取りIOを減らすことができます(ただし、CPU負荷が上がる可能性があります!)。
定期的に、あるいはユーザーが問題を報告したときに確認すべき最も分かりやすいシステムメトリックの1つにCPUの使用率が挙げられます。 top や nmon(LinuxやAIXの場合)、またはWindowsパフォーマンスモニターを見てみましょう。 ほとんどのシステム管理者はCPUデータを定期的に確認しているため、特にそのデータがグラフィカルに表示されている場合などは一目でシステムの現在の状態を把握できます。要はそのシステムが正常であるか、潜在的な異常動作によって突発的に負荷が上がっているか、あるいは問題が発生しているかということです。 この投稿ではCPUメトリックをざっと確認しますが、Cachéメトリックを集中して取り上げます。まずは mgstat のデータを参照し、グラフィカルに表示したデータからシステムの正常性を一目で把握できることを確認します。
mgstatの概要
mgstatはpButtonsに含まれ、その中で実行されるCachéコマンドの1つです。 mgstatは、システムの正常性を把握するのに役立つ基本的なパフォーマンスメトリックを収集するのに最適なツールです。 この記事ではpButtonsを24時間実行して収集したmgstatのデータを確認しますが、pButtonの外部でデータを取り込みたい場合は、mgstatを必要に応じて対話形式で実行するか、Cachéターミナルからバックグラウンドジョブとして実行することができます。
オンデマンドで、%SYS名前空間からmgstatを実行するには、一般的に次の形式を使用します。
do mgstat(sample_time,number_of_samples,"/file_path/file.csv",page_length)
例えば、5秒のサンプル期間で1時間実行するバックグラウンドジョブを実行し、csvファイルに出力する場合は次のようになります。
job ^mgstat(5,720,"/data/mgstat_todays_date_and_time.csv")
一部のカラムを省略して結果を画面に表示する場合は、次のようにdsp132エントリを使用します。 出力の違いについては、実際に皆さんで確かめてみてください。
do dsp132^mgstat(5,720,"",60)
mgstat の出力結果のカラムに関する詳細は、次のCachéの最新ドキュメントの「Caché監視ガイド」をご確認ください:
InterSystemsオンラインドキュメント
mgstatデータの参照
pButtonsは目的のデータを探しやすくし、パフォーマンスの問題を診断するWRCのサポート担当者に送信するためのパッケージ化を行うため、収集したデータを単一のHTMLファイルにまとめます。 ただし、pButtonsを手動で実行してデータをグラフィカルに表示したい場合は、コマンドラインスクリプトや単純なカットアンドペーストを駆使してデータをcsvファイルに再分割し、Excelなどでグラフ化することができます。
この投稿では、mgstatメトリックのいくつかを掘り下げ、データを一目見ただけでシステムのパフォーマンスが優れているか、ユーザーエクスペリエンスに影響を与える発生中の問題や潜在的な問題が存在するかどうかを確認できることをご説明します。
GlorefsとCPU
次のグラフは、病院向けアプリケーションを高い処理頻度で実行しているサイトのデータベースサーバーのCPU使用率を示しています。 多くの外来診療所では朝に活動のピークが訪れ、使用率は昼休みに急激に下がり、その後午後から夕方にかけて次第に低下していることが分かります。 この例では、Windowsパフォーマンスモニターの「(_Total)\% Processor Time」(グラフの形状が稼働日の分布測定に適しています)からデータを取得しました。異常な山や谷が見つからないため、このサイトではこのデータは正常であると考えられます。 皆さんもご自身のサイトに対して同じことを行えば、「正常時」のベースラインを取得することができます。 大幅な急上昇、特に異常な急上昇は問題が存在することを示している可能性があります。今後の投稿では、CPUに注目します。
参考までに、このデータベースサーバーは2つのE5-2670 8コアプロセッサーを搭載したDell R720であり、サーバーには128 GBのメモリが搭載され、48 GBのグローバルバッファーが割り当てられています。
次のグラフでは、CPUのグラフと同じ日のmgstat — Glorefs(グローバル参照)またはデータベースアクセス数のデータをより詳細に示しています。 Glorefsはその時点の負荷を代表するものとして、発生している作業量を示します。グローバルが参照されるとCPU時間が消費されますが、Cachéはグローバルメモリバッファプールを使用しているため、物理的な読み取り操作などの、他のシステムリソースが消費されるとは限りません。
一般的なCachéアプリケーションでは、GlorefとCPU使用率の間に非常に強い相関があります。
このCPUとglorefのデータを別の視点から見た場合、glorefsを減らすとCPU使用率が減り、コア数の少ないサーバーにデプロイしたり、既存システムをさらに拡張したりできるようになるということが分かります。 アプリケーションをさらに効率化することで、グローバル参照を削減する方法もありそうです。この考えは後の投稿で再検討します。
PhyRdsとRdratio
mgstatのデータをグラフ化したPhyRds(物理的読み込み)とRdratio(読み込み比率)はシステムパフォーマンスから予想される詳細な情報を把握し、キャパシティプランニングを立てるのに役立ちます。 今後の投稿では、CachéのストレージIOについて詳しく説明します。
PhyRdsはディスクからCachéデータベースへの単純な物理読み取りIOPS(I/O毎秒)で、論理ディスクと物理ディスクに対応するオペレーティングシステムのメトリックに反映されているものと同じ値が表示されます。 ただし、オペレーティングシステムのIOPSにはCaché以外のアプリケーションに起因するIOPSも表示されている可能性があります。 予想されるIOPSを考慮せずにストレージのサイジングを行うと確実に失敗することになります。適切なキャパシティプランニングを行うには、システムがピークに達している状態でのIOPSを知る必要があります。 次のグラフは、午前0:00から15:30までのPhyRdsを示しています。
05:30から10:00の間に物理的読み込みが大幅に増加していることに注目してください。 その他には11:00と14:00になる直前に短めのピークが発生しています。 これらの原因は何だと思いますか? 皆さんのサーバーではこのようなピークが見られますか?
Rdratioからは、より興味深い結果を得ることができます。このグラフは物理ブロックの読み取りに対する論理ブロックの読み取りの比率を表しています。 つまり、メモリからのグローバルバッファ(論理ブロック)からの読み取り回数と、桁違いに遅いディスクからの読み取り回数の比率を表しています。 Rdratioが高いほうが望ましく、長時間にわたってほぼゼロ近くまで低下するのは望ましくありません。
読み込みが多い時間帯に合わせてRdratioがゼロ近くに低下していることが分かります。 私はこのサイトについて、システムが長時間にわたって重くなっているとの電話連絡がユーザーからIT部門に入り始めたため、調査するように依頼されました。 私がシステムの調査を依頼された最初の数週間は、この現象はランダムに発生しているように思われました。
しかし、私は比較的簡単にこのような高いPhyRdsと低いRdratioのパターンとサポートへの問い合わせ回数に相関関係があることを発見しました。pButtonsが毎日24時間実行されるようにスケジュールされていたおかげで、数週間前のデータに遡って調査することができたからです。
さらなる分析を続けた結果、新しいシフト勤務者が適切なインデックスを使用しない劣悪なクエリと「不正な」パラメーターを組み合わせて入力するレポートをいくつか実行し、データベースの読み込みを増やしていたことを突き止めました。 それが、一見ランダムに見える遅延の原因だったのです。 これらの実行時間の長いレポートはデータをグローバルバッファに読み込んでいるため、対話ユーザーのデータはメモリではなく物理ストレージから取得されています。その結果、読み取りを処理するストレージに負荷がかかっています。
PhyRdsとRdratioを監視すれば、システムの健全性に関する情報を取得できます。また、劣悪なレポートやクエリの存在を突き止めることもできるかもしれません。 高いPhyRdsには妥当な原因があると思われます。そのような場合は、レポートを決まった時間に実行する必要があるでしょう。 物理メモリ容量が大きい最新の64ビットオペレーティングシステムとサーバーを使えば、本番システムのPhyRdsを最小化できるはずです。
お使いのシステムでPhyRdsが高い値を示している場合は、次のようないくつかの対策を検討することができます。
- データベースの(グローバル)バッファ数(およびシステムメモリ)を増やしてパフォーマンスを向上させる。
- 実行時間の長いレポートや抽出処理を営業時間外に実行するようにする。
- 実行時間の長い読み取り専用レポート、バッチジョブ、データ抽出処理を別のシャドウサーバーか非同期ミラーで実行し、対話ユーザーへの影響を最小限に抑え、CPUやIOPSなどのシステムリソースの利用負荷をオフロードする。
一般的に低いPhyRdsは望ましく、それはシステムをサイジングする際の目標でもあります。 ただし、PhyRdsが低くてもユーザーがパフォーマンスに不満を抱いている場合は、ストレージがボトルネックではないことを確かめるため、他にもチェックできることがあります。システムが必要なサービスを提供できなくなっていることが原因で、読み取りが少なくなっている可能性があります。 ストレージについては、今後の記事で詳しく見ていきます。
概要
この投稿では、pButtonsで収集されたメトリックをグラフ化し、システムの健全性を一目で確認する方法について説明しました。 今後の投稿では、システムメトリックとCachéメトリックの関係に加えて、これらを使用して将来の計画を立てる方法について詳しく説明します。