特定の問題をエレガントまたは異常な方法で解決するためのInterSystems テクノロジーの一連の経験。
これは InterSystems FAQ サイトの記事です。
Question:
InterSystems IRIS は 2フェーズコミットをサポートしていますか?
Answer:
サポートしていません。
2フェーズコミットはデータベースシステムがサポートしているだけでは十分ではなく、アプリケーションサーバ等の各実装が定めている2フェーズコミットのプロトコルを駆使して、アプリケーションを構築する必要があります。
また関連するシステムの全てのコンポーネントが対応している必要がある、ロングトランザクションには向いていないなど、現実に実装する局面では様々な制約事項があります。
2フェーズコミットは、技術面、設計および実装面、コスト面、性能面などハードルが非常に高いため、実際には限られた領域での利用に留まっています。
SQL ゲートウェイ接続を使用した、外部データベースへのアクセス方法についてご説明します。
手順は以下になります。
1. 外部ソースへの SQL ゲートウェイ接続の作成を行います
※こちらの例では、IRISの別インスタンスへの接続を試しています。
※ODBCを使用される場合は、事前にシステムDSN(64bit)の準備が必要です。
管理ポータルより
[システム管理] > [構成] > [接続性] > [SQLゲートウェイ接続] の 新規接続作成 ボタンをクリックします。
接続の種類を選択し、必要項目を設定します。以下のサンプルは、ODBC接続(別IRISインスタンスのDSN設定)を行っています。
※ODBC/JDBC 各接続定義の作成の詳細は、以下のドキュメントをご覧ください。
JDBC 経由での SQL ゲートウェイへの接続
ODBC 経由での SQL ゲートウェイへの接続
2. リンクテーブルウィザードを使用して、1で作成したSQLゲートウェイ接続に対してリンクテーブルを作成します
管理ポータルより
[システムエクスプローラ] > [SQL] ページより、
[ウィザード] > [リンクテーブル] をクリックしリンクテーブルウィザードを開きます。
手順に従ってリンクテーブルを作成します。
VSCode から直接 Web ターミナルにアクセスしたいと思いませんか?
.png)
これは InterSystems FAQ サイトの記事です。
外部バックアップ機能と、SANソリューションが提供するスナップショット(スナップクローン、ミラークローンなど呼び方はベンダ毎に異なります)などのテクノロジを利用することで、バックアップ時のインスタンス停止時間を最短にすることができます。
操作手順概要は以下の通りです。
- 外部バックアップ用ユーティリティを利用して、データベースファイルへの書き込みを一時中断します(%SYSネームスペースで実行します)。
%SYS>set status=##class(Backup.General).ExternalFreeze() - 外部のスナップショットユーティリティを使用して、ファイルシステムのスナップショットを作成します。
- データベースファイルへの書き込みを再開するため、外部バックアップ用ユーティリティを使用します。
%SYS>set status=##class(Backup.General).ExternalThaw() - バックアップメディアにスナップショットをコピーします。
【ご参考】
ExternalFreeze() の処理は以下のようになります。
1. ジャーナルファイルの切り替え
2. データベースバッファ上の書き込み待ちバッファをすべてデータベースファイルに書き出す
3.
これは InterSystems FAQ サイトの記事です。
Web 経由でのイメージファイルのアップロード/ダウンロードを行うサンプルをご紹介します。
サンプルでは、以下の手順でファイルの「アップロード/ダウンロード」を行っています。
- Stream型のプロパティをもったクラスを用意する
- upload ボタン押下でイメージファイルをIRISサーバにアップロードする
- アップロードされたデータを %request.MimeData で受け取り CopyFromAndSave メソッドを使ってコピー&1 のクラスに保存する
- アップロードされたファイルを画面に表示する
- download ボタンを押下し、1 のクラスに保存したファイルをローカルにダウンロードする。
サンプルプログラムの使い方は次のとおりです。
- User.test.xmlをUSERネームスペースにインポート
- test1.csp, test2.cspをC:\InterSystems\IRIS\csp\user にコピー
- http://localhost/csp/user/test1.csp を実行
最初のページでファイルを選択し go ボタンをクリックすると、次のページにアップロードされた画像が表示されます。
アップロードしたファイルをダウンロードしたい場合は、download ボタンをクリックしてください。
これは InterSystems FAQ サイトの記事です。
InterSystems IRIS Data Platform(以下IRISと表記)ではマルチモデルのサポートにより、データに対して様々なアクセス手法を使用することができます。
主だったアクセス手法としてダイレクトアクセス、SQLアクセス、オブジェクトアクセスがあります。
ダイレクトアクセス は、IRISのネイティブ構造であるグローバルと呼ばれるキーバリュー型のデータに直接アクセスする方法です。
SQLアクセス は、リレーショナルデータベースシステムにアクセスするための標準言語であるSQLを使用してデータにアクセスする方法です。
オブジェクトアクセス は、オブジェクト指向言語でオブジェクトを操作するための表記法として幅広く利用されるドット記法を使用してデータにアクセスする方法です。
ダイレクトアクセスとSQLアクセスおよびオブジェクトアクセスでは、処理の抽象度が異なります。
抽象度が高くなるに伴い、内部的な処理のオーバヘッドが増加するため、単純な1スレッド単位でのアクセススピードの速さについては、ダイレクトアクセスが、SQLアクセスとオブジェクトアクセスに比較して速い場合が多いです。
しかしながら、今後SQLアクセスに関してより高速に処理できるよう様々な開発が進行中です。
これは InterSystems FAQ サイトの記事です。
メモ:xxx にはネームスペース名が入ります。
xxxENSTEMPは、プロダクション実行中に作成される一時データが保存されるデータベースです。
^IRIS.Temp.Ens* のグローバルがこのデータベースにマッピングされています。なお、xxxENSTEMPはジャーナルにかかれない設定のデータベースです。
xxxSECONDARYは、プロダクションで使用される資格情報を保存するデータベースです。
^Ens.SecondaryData* のグローバルがこのデータベースにマッピングされています。
注意:InterSystems IRIS for Health、HealthShare ではこれらデータベースは作成されません
詳細は以下ドキュメントをご覧下さい。
InterSystems IRIS の一時プロダクション・データの格納場所
InterSystems IRIS のパスワード資格情報の格納場所
関連する記事もご参照ください。
これは InterSystems FAQ サイトの記事です。
クライアントからターミナルにログイン(接続)できない時、ターミナル接続を可能にするサービスが有効になっていないことが原因として考えられます。
ターミナル接続を可能にするサービスが有効になっていないことが原因として考えられます。
管理ポータル :[ホーム] > [システム管理] > [サービス]
有効になっていない場合は、リンクをクリックしてサービス定義編集画面を開き、"サービス有効"にチェックを入れて保存します。
.png)
もう一つの原因としてはOSのファイアウォールによりターミナル接続が遮断されている場合が考えられます。
リモートでターミナル接続される場合はファイアウォールの設定を無効にしてお使い下さい。
Studio では、クラスを直接その名前で開くことができます。何度もクリックしながら目的のクラスに到達するまでパッケージツリー内を移動する必要はありません。
Ctrl + O(またはファイル -> 開く)を押せば、以下のようにクラス名を入力するだけです。
.png)
Enter を押すと、クラスが開きます。
VSCode ではこれをどのようにして行えるでしょうか?
これは InterSystems FAQ サイトの記事です。
テーブル(クラス) のデータを削除する際に %KillExtent() というメソッドを使用すると、レコードを1ずつ削除するのではなく、データを格納しているデータグローバル、インデックス定義のグローバル(ノード) をまとめて 削除することができます。
kill ^ISJ.xxxD
kill ^ISJ.xxxIのようにデータグローバルやインデックスグローバルをまとめて削除するのと同じような動作となります。
そのため、ジャーナルレコードへの出力は最小限になります。
使用例:
write ##class(ISJ.xxx).%KillExtent()
ただし、トランザクション下で実行すると一括 Kill の場合でも保存されているレコードに応じたジャーナルレコードが生成されるのでご注意ください。
また、以下のドキュメントの注意書きにあるように、他クラス(テーブル)への参照などが含まれているクラスで実施されると整合性に問題が発生する場合がありますのでご注意ください。
こちらを必要なだけ記述したタスククラスを作成すると、タスクスケジューラから定期的に実行できます。
タスククラスの作成方法は、以下のトピックをご覧ください。
【ご参考】
IRIS 2021.
これは InterSystems FAQ サイトの記事です。
TRYブロック内で任意のカスタムエラーを発生させたい場合、以下のように throw で例外を渡すことが可能です。
以下のサンプルでは、Stcount が 1 より小さい場合にカスタムエラーを発生させています。
Class User.Test
{
ClassMethod ExceptionTest()
{
try
{
// : some codes
if (Stcount<1) {
throw ##class(%Exception.General).%New(" ユーザ定義エラー","5001","ロケーション","エラー時のデータ")
// ユーザ作成エラーは5001以降
}
}
catch ex
{
write "エラー #", ex.Code, ": ", ex.Name, " : ", ex.Location, " ", ex.Data
return
}
}
}
上の例では、Stcount が 1 より小さい場合、以下のようなエラーが出力されます。
USER>do ##class(User.Test).Embedded Python で Excel のデータを IRIS グローバルに格納する方法 では Excel データを pandas.DataFrame に取り込んで、それを InterSystems IRIS グローバルに保存する方法をご紹介しました。
今回は「lxml を使用し Web スクレイピングした表(テーブル)のデータを InterSystems IRIS グローバルに格納する」方法をご紹介します。
※以下は Windows 上の IRIS でのインストール方法になります。
UNIX ベースのシステムでは、pip3 コマンドを使用してインストールします。詳細は ドキュメント をご覧ください。
最初に、irispip コマンドで必要なライブラリをインストールします。
今回は、pandas、lxml の2つのライブラリをインストールします。
これは InterSystems FAQ サイトの記事です。
管理ポータルメニュー [Interoperability] > [構成] > [システムのデフォルト設定] で設定したデータを移行する場合、設定値が格納されているグローバル変数をエクスポートし、移行先システムでインポートします。
画面で登録した以下のような情報は、
.png)
グローバル変数 ^Ens.Config.DefaultSettingsD に格納されています。
.png)
認証情報については、グローバル変数 ^Ens.SecondaryData.Password に格納されます。
InterSystems IRIS をご利用の場合は、このグローバルは xxxSECONDARY(xxx はネームスペース名)のデータベースに格納されます。
InterSystems IRIS for Health をご利用の場合は、このグローバルはネームスペースのデフォルトデータベースに格納されます。
xxxSECONDARYデータベースについて詳細は、以下ドキュメントをご参照ください。
InterSystems IRIS のパスワード資格情報の格納場所
【関連トピックのご紹介】
IRIS 2022.1では Embedded Python が導入されました。Embedde Python によって、IRISの独自言語である ObjectScript と Python の親和性の良さをぜひ実感いただけると嬉しいです。今回の記事では、日本語PDFをPythonライブラリを利用して作成し、さらに ObjectScript と融合するところまで見ていただこうと思います。
開発者の皆さん、こんにちは!
PythonでExcelからPDFへ変換を行うには、pywinを使うとできるらしいので、IRISにあるデータをDataframeに設定した後Excelに出力し、ExcelからPDFに変換する流れを、Embedded Pythonで試してみました。
メモ:pywinはWindows環境下で動くモジュールのようです。
Excelに出力するデータですが、例では、SELECTの結果をDataframeに格納する方法を利用しています。グローバル変数の情報をDataframeに格納する方法については、以下の記事で詳しくご紹介しています。ぜひご参照ください。
Embedded Python で IRIS グローバル($LB) を Pandas Dataframe に変換する方法
まずは、必要なモジュールをインストールする必要があるので、pywin32 モジュールを irispipを使ってインストールします。
以下の例では、IRIS for Health が c:\InterSystems\IRISHealth にインストールされている状態で実行しています。
Embedded Pythonは、IRIS/IRIS for Health どちらでも利用できます。
これは InterSystems FAQ サイトの記事です。
Question:
IRIS Data Platformは大量のトラフィック処理に耐えられますか?
Answer:
IRIS Data Platformは他のデータベースシステムに比較してデータの処理スピードおよび処理能力の面で優れています。
ESGという外部機関が実際に他社データベース製品とのベンチマークテストを実施した結果に関するレポートを公表しています。
またウルシステムズ社による検証結果も公開されています。
ご参考いただければ幸いです。
これは InterSystems FAQ サイトの記事です。
バージョン2015.2以降から、Windows上のインストール環境では、サービス・アカウントを
「Windowsコントロールパネル > 管理ツール > サービス > InterSystems IRIS/Cache Controller for XX」
の「ローカル・システムアカウント」から Windows の任意の管理者アカウントに変更した場合に <NOTOPEN> エラー または -1 が返ります。
この状況を回復するためには、以下2つの設定をする必要があります。
1. 「Windowsコントロールパネル > 管理ツール > サービス > InterSystems IRIS/Cache Controller for XX」 のログオン設定を、「ローカルシステムアカウント」に戻す 2. irisinstall/cinstall コマンドを使用してInterSystems IRIS サービス・アカウントを変更する
2 の手順は以下になります。
Windowsコマンドプロンプトを管理者権限で起動し、以下コマンドを使用して変更します。
この設定を有効するためには、インスタンスの再起動が必要です。
これは InterSystems FAQ サイトの記事です。
デフォルトではテーブルのカラムの順番はシステムが自動的に決定します。
順番を変更するにはクラス定義を行う際にプロパティ・キーワード SqlColumnNumber でプロパティ毎に明示的に順番を設定してください。
例:
ドキュメントは以下をご参照ください。
なお、SQLテーブル名を変えたい場合は SqlTableName 、カラム名(フィールド名)を変えたい場合は SqlFieldName を指定します。
ともに、永続クラスのみに適用されます。
これは InterSystems FAQ サイトの記事です。
InterSystems IRIS/Caché の管理ポータルメニュー:SQLデータインポートウィザードの処理で行うようなCSVファイルをテーブルへインポート、テーブルからファイルにエクスポートする方法をプログラムで実行することができます。
※ サンプルはバージョン 2017.1以降で動作確認しています。
※ バージョン 2016.2.3以前でお試しいただく場合は、SQL.Utilsクラス の20行目をコメント化してからご利用ください。
//Set mgr.IQN=$$$BuildIQN(SchemaName,TableName)
サンプルの使用手順
サンプルはこちらにあります👉https://github.com/Intersystems-jp/DataImportExport
CSVファイルをテーブルへインポート、テーブルからファイルへエクスポートの処理は、SQL.Utilsクラスを使用しています。
1) サンプルのインポート
実行したいネームスペースに SQL.Utilsクラスをインポートします。
スタジオをご利用の場合は、ファイルをドラッグ&ドロップするとインポートできます。
これは、InterSystems FAQサイトの記事です。
%SYS.Namespace クラスの List クエリで取得することができます。
次のようなルーチンを作成し、ターミナルで実行してください。
1. サンプルの作成
getnsp
// ネームスペース一覧を取得する write "nsp:glo:rtn",!,!
set statement=##class(%SQL.Statement).%New()
set status=statement.%PrepareClassQuery("%SYS.Namespace","List")
set resultset=statement.%Execute()
while resultset.%Next() {
write resultset.%Get("Nsp"),!
}
quit
2. ターミナルから実行
%SYS
DOCBOOK
SAMPLES
USER
こちらの記事でご紹介しているクラスクエリを実行する方法は、様々なケースで応用できます。
クラスリファレンスをご覧いただくと、様々なクラスクエリをご覧いただけます。
例えば、
%SYS.DatabaseQuery:GetFreeSpace() データベースの空き容量
%SYS.
最近、LOAD DATA という素晴らしい新機能を使用することがありました。この記事では、初めて使用した際の体験についてお話しします。 以下の箇条書きには優先順がなく、他の評価も含まれません。 これらは、LOAD DATA コマンドを使用したときに私が気付いたことを記したものです。 また、プレビューリリースである IRIS バージョン 2021.2.0.617 を使用していることも記しておきたいと思います。 そのため、ここに記録されたことは、それ以降の IRIS バージョンに適用しない可能性があります。 それでも誰かのお役に立てるかもしれません。
1)ファイルパスはサーバー側
JDBC 経由で最初のテストを行いました。 最初に躓いたのは、ファイルとファイルパスが、当然 (^-)_ サーバー側でなければならないということです! JDBC ドライバーはクライアント側でこれを処理しません。 おそらく明確なことかもしれませんが、最初にこのことを考慮していませんでした。
2)ファイル接尾辞は関係なし
ドキュメントには、以下のように書かれています。
「ファイル名には .txt または .csv(カンマ区切り値)の接尾辞が含まれていること。」
私の観察では、この動作は書かれていることと異なりました。 接尾辞は無関係です。
3)ドキュメントを読もう! エラー行はどこへ?
これは、InterSystems FAQサイトの記事です。
InterSystems製品では、永続データは後で高速にランダムアクセスできるように、ある一定の規則に沿ってキー順にソートされて格納されます。
新しいノードが追加された場合、ノードが削除された場合、データの長さが変更された場合など、データの構造変化が起こる度に、その並び順を維持できるよう、また無駄な領域が発生しないように動的なデータの配置変えを実施します。
従って、常にデータはきれいに整理された状態で格納されるため、無駄な空き領域が発生しません。
これらの並べ替えの作業は、書き換えのコストのかかる処理ですが、InterSystems製品では、これらの処理はなるべくメモリ(キャッシュ)上で実行し、ディスクI/Oを軽減することにより、性能の劣化を抑えています。
これは、InterSystems FAQサイトの記事です。
InterSystems IRIS Data Platform(以下IRISと表記)はSQLのサポートをはじめ、リレーショナルデータベースとの高い互換性を有します。
さらに、IRISは多次元データエンジンをベースにしており、通常のリレーショナルデータベースシステムに比べて柔軟なデータ構造を持つことができ、一般的にパフォーマンス、スケーラビリティ、データ保守性に優れています。
また完全なオブジェクト指向をサポートしており、Javaなどのオブジェクト指向開発環境との親和性という点でも優れています。
開発者の皆さん、こんにちは!
2022年3月9日開催「InterSystems Japan Virtual Summit 2022」技術セッションのアーカイブをYouTubeに順次公開していきます!
このお知らせでは、公開スケジュールと、過去のイベント・コンテスト記事の素早い💨探し方をご紹介します!
まずはスケジュールから:「毎週月曜日公開」
4/25 FHIR SQL Bulder
5/2 ストレージの節約方法
5/9 ミラーリングを使用した HA および DR の構成例
5/16 VSCode、Jenkinsを使用したCICD環境の構築
5/23 オープンソースだけでIRIS on Kubeernetesを動かそう
5/30 SQLでどこまでできる?~データロードから機械学習まで~
6/6 Embedded Pythonで広がるInterSystems IRISの世界
続いて、過去のイベントやコンテスト記事の素早い探し方についてご紹介します。
コミュニティページ画面上に、「イベント」のメニューがあります。
.png)
「イベント」をクリックし、「イベントカレンダー」をクリックします。
.png)
イベント情報が表示されるので、参照したいイベントをクリックします。
.png)
各お知らせ記事内にアーカイブのお知らせや関連記事へのリンクが下の絵のように付いていますので、こちらから辿っていただくと、情報が追いやすいです。
.png)
ぜひご利用ください!
InterSystems IRIS 2021.2 のバージョンより、Embedded Python を使用できるようになりました。
Embedded Python については、「Embedded Pythonを簡単にご紹介します」の記事をぜひご覧ください。
こちらでは、Embedded Python を使用して Excel のデータを IRIS グローバルに出力する方法をご紹介します。
最初に、irispip コマンドで必要なライブラリをインストールします。
今回は、pandas、xlrd、openpyxl の3つのライブラリをインストールします。
>cd C:\InterSystems\IRIS\bin
C:\InterSystems\IRIS\bin>irispip install --target C:\InterSystems\IRIS\mgr\python pandas
C:\InterSystems\IRIS\bin>irispip install --target C:\InterSystems\IRIS\mgr\python xlrd
C:\InterSystems\IRIS\bin>irispip install --target C:\InterSystems\IRIS\mgr\python openpyxl
Excel ファイルは次のような test.
これは、InterSystems FAQサイトの記事です。
アプリケーションモニタが提供する %Monitor.System.Diskspace(ディスク容量メトリック)を利用して指定サイズを下回る場合にメール通知を行うように設定を追加することができます。
アプリケーション・モニタのメトリック【IRIS】
アプリケーション・モニタのメトリック
システム提供のアプリケーションモニタは、デフォルトでは全て無効化されています。使用を開始するためには、対象のモニタを有効化し、システムモニタを再起動します。
アプリケーションモニタの有効/無効やシステムモニタの停止/開始は、システムルーチン ^%SYSMONMGR を利用します。
以下の例では、ディスクの空き容量が 100MB を下回る場合にメール通知を行う設定手順について説明します。
手順は以下の通りです。
1) ^%SYSMONMGR を起動し、アプリケーションモニタから %Monitor.System.Diskspace を有効化する
2) アラート対象とする閾値を変更する(例では、通知は最初の1回のみとしています)
3) Email通知設定を行う
4) システムモニタを再起動する
1) ^%SYSMONMGR を起動し、アプリケーションモニタから %Monitor.System.Diskspace を有効化する
これは、InterSystems FAQサイトの記事です。
システムユーティリティクラス:SYS.Database のクエリ:FreeSpace を利用してディスクの空き容量を任意のタイミングで確認することができます。
IRIS ターミナルで試す方法は以下の通りです(%SYSネームスペースに移動してから実行します)。
zn "%SYS"
set stmt=##class(%SQL.Statement).%New()
set st=stmt.%PrepareClassQuery("SYS.Database","FreeSpace")
set rset=stmt.%Execute()
//全件一括表示
do rset.%Display()出力結果例は以下の通りです。
※コマンド実行例では、全データベースが同じディスクに置かれているので、ディスクの空き容量(DiskFreeSpace)はすべて同じ値が返っています。
これは、InterSystems FAQサイトの記事です。
Windowsでは、変更することはできませんが、Unix系プラットフォームでは、iris rename コマンドを使用することで変更できます。
iris rename instname(現インスタンス名) newname(新インスタンス名)
iris rename コマンドの詳細は、以下ドキュメントをご参照ください
iris コマンドについて
これは、InterSystems FAQサイトの記事です。
メール送付のコードを記述する前に、管理ポータルで SSL/TLS 構成を作成します。
管理ポータル > システム管理 > セキュリティ > SSL/TLS 構成

.png)
メール送付までの流れは以下の通りです。
- メールメッセージ用クラス:%Net.MailMessage のインスタンスを作成し、送信元メールアドレス、宛先メールアドレス、件名、本文を設定します。
- 認証情報設定用クラス:%Net.Authenticator のインスタンスを作成し、メール送付時に使用する認証情報を設定します。
- SMTP用クラス:%Net.SMTP のインスタンスを作成し、SMTP サーバの設定、管理ポータルで作成した SSL/TLS 構成名の指定、2で作成した認証情報と 1で作成したメールメッセージを使用して、メールを送信します。
ターミナルからの実行例は以下の通りです(Gmail を利用しています)。
《メモ》
現在(2022年5月30日以降)、Gmailを利用したメール送付を行う場合 OAuth2.0 の利用が必須となりました。Gmailを利用する場合の手順ついては、「OAuth 2.0 を利用して IRIS から Gmail を送信する」をご参照ください。
.png)