InterSystems は自社が提供する InterSystems IRIS の Dockerイメージについて、Linux 環境での使用のみをサポートしています。 Docker for Windows は Linux プラットフォームのようにコンテナをネイティブプロセスとして実行するのではなく、Windows の仮想化機能である Hyper-V で実行される Linux VM を作成してコンテナをホストします。 このような追加レイヤーによって複雑度が増しているため、InterSystems は現時点で Docker for Windows をサポートすることができません。
皆さんこんにちは。
IRIS 2020.1からMQTTアダプタが新たに追加されました。MQTTはPublish/Subscribe型のシンプルで軽量なメッセージングプロトコルです。帯域が低いネットワーク環境やArduinoやRaspberry PIといったワンボードマイコンやシングルボードコンピュータなどでも動作できます。
今回はクラウド上のUbuntuサーバにIRISをインストールし、MQTTアダプタを使いEsp8266というマイコンで取得した温度、湿度、気圧データをIRIS上のデータベースに登録する方法について説明したいと思います。
アーキテクチャ
今回のアーキテクチャは以下の通りです。
データを送受信するマイコンやアプリケーションにMQTTクライアントを組み込み、MQTTクライアントがMQTTブローカーというメッセージを転送するソフトウェアに接続します。
同じMQTTブローカーにつながっているMQTTクライアントにてメッセージを送信したい場合はPublishメッセージを使用し、メッセージと共にトピックと呼ばれるメッセージの種類を表す文字列を送信します。情報を受信したい場合はSubscribeメソッドを使用し、受信したいトピックを指定します。
IRISのインストール
新しい動的 SQL クラス(%SQL.Statement および %StatementResult)のパフォーマンスは %ResultSet より優れてはいますが、%ResultSet の使用方法をせっかく学習したので、しばらくの間新しい方を使用せずにいましたが、 やっとチートシートを作ったので、新しいコードを書いたり古いコードを書き直す際に役立てています。 皆さんのお役に立てればいいなと思っています。
次に示すのは、私のチートシートの詳細版です。
HealthShare の理想的な Apache HTTPD Web サーバー構成に関するお問い合わせをよくいただいています。 この記事では、真っ先に推奨される HealthShare 製品の Web サーバー構成について概要を説明します。
何よりもまず第一に、Apache HTTPD バージョン 2.4.x(64ビット)を使用することをお勧めします。 2.2.x のような旧バージョンも使用できますが、HealthShare のパフォーマンスとスケーラビリティを確保するにはバージョン 2.2 はお勧めできません。
$LIST のフォーマットと%DynamicArray、%DynamicObject クラス
IRIS には、様々なデータ値を含むシーケンスを作成する方法がいくつかあります (以前は Cache にもありました)。 長年に渡り使用されているデータシーケンスの 1 つに $LIST の文字列があります。 より最近のデータシーケンスには %DynamicArray クラスと %DynamicObject クラスがあり、両者ともに JSON の文字列表現に対応する IRIS サポートの一部となっています。 これら 2 つのシーケンスにはそれぞれ非常に異なるトレードオフがあります。
$LIST の文字列形式
$LIST 形式は、かつてメモリアドレスのスペースが小さいだけでなく、ディスクドライブも小さく、読み取り速度が遅かった時代に考案されました。 $LIST の形式は、複数の異なるデータ型で構成されるシーケンスをバイト数を可能な限り抑えながら 8 ビットの一般的な文字列にパッキングするためにデザインされました。
$LIST のシーケンスは、ObjectScript の $LISTBUILD 関数を使って作成します。
開発者の皆さん、こんにちは。
2020年最後の IRIS プログラミングコンテストの投票が始まりました!
🔥 これだ!と思う一押し作品に投票お願いします! 🔥
投票方法は?
今回から投票方法が新しくなりました!
Expert Nomination または Community Nomination を選択いただき、どの作品がどの順位になるかを指定しながら投票します。
Community Leaderboard:
| 順位 | ポイト |
|---|---|
| 1位 | 3点 |
| 2位 | 2点 |
| 3位 | 1点 |
そして、エキスパートノミネーションからの投票は以下の通りとなりました。
Experts Leaderboard:
|
エキスパートレベル |
順位 | ||
| 1位 | 2位 | 3位 | |
| GM、モデレーター、プロダクトマネージャーのVIPレベル | 9点 | 6点 | 3点 |
| グローバルマスターズのエキスパートレベル | 6点 | 4点 | 2点 |
| グローバルマスターズのスペシャリストレベル | 3点 | 2点 | 1点 |
エキスパートリーダーボードの投票はコミュニティリーダーボードにもポイント(1位3点、2位2点、3位1点)が加算されます。
投票方法について
投票は Open Exchange コンテストページで行われ、Open Exchange にサインインする必要があります。
コミュニティの皆さん、こんにちは!
グローバルマスターズにビジネスサービスリワードを導入したことにより、お客様のアプリケーション、ソリューション、サービスの概要を開発者コミュニティや当社のソーシャルメディアに掲載していただけるようになったほか、OEX アプリケーションの宣伝に Google AdWords のキャンペーンをご利用いただけるようになりました!
コミュニティの皆さん、こんにちは!
この記事では、開発者コミュニティと InterSystems Global Mastersアドボケート・ハブのレベルに関する情報を掲載しています。
お知らせ:現在、これらのバッジの多くは変更中です。この表も近日中に更新される予定です。
すべての Global Masters メンバー(アドボケイト)は、開発者コミュニティへの貢献と Global Masters での活動に応じてさまざまなレベルのアドボカシーを達成できます。
新しいレベルに移行するたびに、新しいタイプのチャレンジ/タスクと新しいタイプの報酬が開始されます。
レベルアップするには、次のレベルからいくつかのバッジを獲得する必要があります。 バッジは Global Master でさまざまなチャレンジを完了すると獲得できます。
現在は 6 つのレベルがあります。
1. インサイダー
2. アドボケイト
3. スペシャリスト
4. エキスパート
5. アンバサダー
6. VIP
➡ バッジの上にマウスカーソルを移動すると、獲得方法を確認できます。
これは InterSystems FAQ サイトの記事です
ミラーリングが同期の対象とするのはデータベースファイルのみです。
アプリケーションに必要なその他のファイル(CSPファイル、画像ファイル、ドキュメントファイルなど)をミラーセットを構成する二台のサーバー間で同期させるには、
- NASなどを導入して共有ディスク上にそれらのファイルを配置する方法
- または同期ソフトを導入して二台のサーバー間のファイルを同期させる方法
などの方法が考えられます。 また、2の方法では Windows 上では RoboCopy、Linuxの場合には rsync という同期ソフトを使った実例があります。
これは InterSystems FAQ サイトの記事です
揮発性テーブル(多数のINSERT、DELETEが行われるテーブル)では、ビットマップ・インデックス用ストレージは徐々に効率が低下する可能性があります。
例えば、以下の定義からなるデータが数千件あり、一定期間保持した後 TRUNCATE TABLE で一括削除を行うオペレーションが繰り返し行われているとします。
Class MyWork.MonthData Extends (%Persistent, %Populate)
{
/// 満足度
Property Satisfaction As %String(VALUELIST = ",満足,やや満足,やや不満,不満,");
/// 年齢
Property Age As %Integer(MAXVAL = 70, MINVAL = 20);
Index AgeIdx On Age [ Type = bitmap ];
}
INSERT によってできたビットマップ・インデックスのストレージのイメージ(一部)は以下の通りです。
これはInterSystems FAQ サイトの記事です。
選択性(または Selectivity)の数値とは、カラムに対するユニークデータの割合を示す数値です。
例) Person テーブルの個別値である PID カラム、住所のうち都道府県名が入る Pref カラム
Pref カラムの選択性 = 約 2%
PID カラム(ユニーク属性のカラム)の選択性 = 1
InterSystems製品のクエリオプティマイザは、クエリ実行経路(プラン)とインデックスの選択を決定するため、エクステントサイズ(テーブル内のレコード数)と選択性の数値を使用します。
詳細は下記ドキュメントページをご参照ください。
なお、選択性の数値は、テーブル単位に計算するまで設定されていません。
計算方法については関連トピックをご参照ください。
【関連情報】(コミュニティ/FAQトピックをリンクしています)
みなさん、こんにちは。 昨日、Apache Spark、Apache Zeppelin、そして InterSystems IRIS を接続しようとしたときに問題が発生したのですが、有用なガイドが見つからなかったので、自分で書くことにしました。
はじめに
Apache Spark と Apache Zeppelin とは何か、そしてどのように連携するのかを理解しましょう。
Apache Spark はオープンソースのクラスタコンピューティングフレームワークです。暗黙的なデータ並列化と耐障害性を備えるようにクラスタ全体をプログラミングするためのインターフェースを提供しています。そのため、ビッグデータを扱う必要のある場合に非常に役立ちます。 一方の Apache Zeppelin はノートブックです。分析や機械学習に役立つ UI を提供しています。組み合わせて使う場合、IRIS がデータを提供し、提供されたデータを Spark が読み取って、ノートブックでデータを処理する、というように機能します。
注意: 以下の内容は、Windows 10 で行っています。
Apache Zeppelin
では、必要なすべてのプログラムをインストールしましょう。
Windows と Mac で InterSystems IRIS 2019.1 (および 2018.1.2) の SSL/TLS 設定に認証局 (CA) の証明書を簡単に追加する新しい方法ができました。 IRIS にオペレーティングシステムの証明書ストアを使用することを要求するために、
%OSCertificateStore
を "信頼された証明書機関 X.509 証明書を含むファイル" のフィールドに入力します。 以下はポータルでそれを実行する方法を示した画像です。
また、これについて説明したドキュメントへのリンクはこちらです。 "信頼された証明書機関の証明書を含むファイル" のオプションの中を探してください。
必要な操作はこれだけです! これで、OS 証明書ストアに載っているすべての CA の証明書をこの設定に使用することができます。
Prometheus は時系列データの収集に適した監視システムです。
このシステムのインストールと初期構成は比較的簡単です。 このシステムにはデータ視覚化用の PromDashと呼ばれる画像サブシステムが組み込まれていますが、開発者は Grafana と呼ばれる無料のサードパーティ製品を使用することを推奨しています。 Prometheus は多くの要素(ハードウェア、コンテナ、さまざまな DBMS の構成要素)を監視できますが、この記事では Caché インスタンス(正確に言えば Ensemble インスタンスですが、メトリックは Caché からのものになります)の監視に注目したいと思います。 ご興味があれば、このまま読み進めてください。
非常に単純なケースでは、Prometheus と Caché は単一のマシン(Fedora Workstation 24 x86_64)上に存在します。 Caché のバージョンは以下のとおりです。
%SYS>write $zv
Cache for UNIX (Red Hat Enterprise Linux for x86-64) 2016.1 (Build 656U) Fri Mar 11 2016 17:58:47 EST
インストールと構成
今回は、InterSystems IRIS に特有のことではなく、職場で Windows 10 Pro または Enterprise を搭載した PC またはノートパソコンがサーバーとして使用されている環境で Docker を使用する場合に重要と思われる点について触れたいと思います。
ご存知かと思いますが、コンテナテクノロジーは基本的に Linux の世界で生まれ、最近では Linux のホストで使用されており、その最大のポテンシャルを伺わせています。 Windows を普段から使用するユーザーの間では、Microsoft と Docker 両社によるここ数年の重大な試みにより、Windows のシステムで Linux イメージを基にコンテナを実行することがとても簡単になったと理解されています。しかし、生産システムでの使用がサポートされておらず、それが大きな問題となっています。特に、Windows と Linux のファイルシステムに大きな違いがあるため、安心してホストシステム内でコンテナの外に持続データを保管するということができないのです。 ついには、コンテナを実行するために、_Docker for Windows _自体で Linux の小さな仮想マシン (MobiLinux) が使用されるようになり、Windows ユーザーに対しては透過的に実行されます。また、先ほど述べたように、データベースの存続がコンテナよりも短くて構わないのであれば、パーフェクトに動作します。
では、何が言いたいかというと、問題を回避して処理を単純化するには、完全な Linux システムが必要になるが、Windows ベースのサーバーを使用していると、仮想マシンを使用する以外に方法がない場合が多い、ということです。 少なくとも、Windows の WSL2 がリリースされるまでの話ですが、それはまた別の機会に触れたいと思います。もちろん、十分堅牢に動作するまでは時間がかかるでしょう。
この記事では、必要に応じて、Windows サーバーの Ubuntu システムで Docker コンテナを使用できる環境をインストールする方法について分かりやすく説明します。 それでは、始めましょう。
この文書では、インターシステムズの製品の中で、InterSystems CachéおよびIRIS data platformに関するライセンスポリシーを説明します。
インターシステムズのライセンスポリシーは、パートナー(ソリューションおよびインプリメンテーション)契約の際の契約書一式あるいはエンドユーザーに直接販売する際の契約書一式に含まれる製品に関する条件(この文書は製品別に存在します)という文書で規定されています。
なおこの文書は一般には公開していません。
ここでは、CachéおよびIRIS data platformのライセンスポリシーについてこの文書に書かれていることを要約および補足して説明します。
まずCachéシステムおよびIRIS data platformはこの文書で規定されているライセンスポリシーにでき得る限り忠実にそうようにライセンスチェック機構を実装しています。
しかしながら様々な技術的な制約によりライセンスポリシーとこれら製品のライセンスシステムを完全に一致させることはできません。
そしてもしシステム上のライセンスチェック機構の動作とライセンスポリシー上に不一致が発生した場合には、いかなる場合でもライセンスポリシーが優先されます。
これはInterSystems FAQ サイトの記事です。
SQLインジェクションに関しては、様々なWebサイトで対策等が公開されていますが、InterSystems SQLを使ったアプリケーションでも、他のRDBMSと同様にそれらの対策を適切に実施することで、SQLインジェクションは防げると考えられます。
さらに、InterSystems Data Platform(以下IRIS)の場合、一般的なRDBMSに比較して、SQLインジェクションを実行しづらい、幾つかの施策が組み込まれています。
これはInterSystems FAQ サイトの記事です。
InterSystems OpenExchangeのVS Code用のプラグインを利用することでVS Code上でクラス定義の編集が可能です。
(今後は、AtelierではなくVS Codeの使用を推奨しています。)
詳細は、以下ページをご参照ください。
また、逆にテーブル定義からクラス定義を生成することも可能です。
方法①として、他社RDBMS用に作成したDDL文をインターシステムズ製品上で実行、またはインポートする方法があります。
詳細は、以下ドキュメントをご参照ください。
方法②として、クラス定義クラス・%Dictionary.ClassDefinitionで定義されているAPIを利用し、プログラミングにより操作する方法があります。
クラス定義クラスは、システムクラスであり、スタジオや他のエディターで作成されたクラスは全てこのシステムクラスを使いクラスディクショナリに定義情報が格納されています。
このクラス詳細については、以下ドキュメントをご参照ください。
これはInterSystems FAQ サイトの記事です。
%SYSTEM.SQL クラスの Purge* メソッドを使用して削除することが可能です。
※各メソッドの詳細は、以下ドキュメントをご参照ください。
①システム内のすべてのクエリキャッシュを削除する場合
Do $SYSTEM.SQL.PurgeAllNamespaces()
②ネームスペース内のクエリキャッシュを削除する場合
// ネームスペース内のすべてのクエリキャッシュを削除する
Do $SYSTEM.SQL.Purge()
// 日付指定してクエリキャッシュを削除する場合
// 以下は、過去30日間に使用されていないクエリキャッシュを削除
Do $SYSTEM.SQL.Purge(30)
③クエリキャッシュを指定して削除する場合
Do $SYSTEM.SQL.PurgeCQClass("%sqlcq.USER.cls13")
④特定テーブルのクエリキャッシュを削除する場合
Do $SYSTEM.SQL.PurgeForTable("MedLab.Patient")
これはInterSystems FAQ サイトの記事です。
REST のベース URL を /rest とした場合の IIS と Webゲートウェイの設定内容は以下の通りです。
IIS の設定内容
アプリケーション /rest を作成し、ハンドラーマッピングで * = CSPms を定義します。
ハンドラーマッピングの設定手順は以下の通りです。
IIS > Default Website > アプリケーション /rest > "ハンドラーマッピング" をダブルクリック > モジュールマップの追加
- 要求パス : *
- モジュール: CSPms
- 名前 : CSPGW (任意の名前)
要求の制限 > [要求のマップ先が次の場合のみハンドラーを呼び出す] のチェックはオフにします。
※こちらの設定はデフォルトでは「チェックあり」になっていますのでご注意ください。
この構成により、IIS は /rest アプリケーションを Web ゲートウェイに転送します。
Webゲートウェイの構成
Web Gateway のアプリケーションアクセス から /rest を追加します。
→既存アプリケーションをクリックしてコピーし、アプリケーションパスを /rest に設定しIRISサーバを指定します。
この構成により、Webゲートウェイは /rest アプリケーションをIRISサーバに転送します。
これはInterSystems FAQ サイトの記事です。
デフォルトでは、セキュリティ脆弱性対応の観点でウェブサービス用テストページの実行を許可していません。
テスト目的等で利用する場合は、テストページへのアクセスを有効にする必要があり、以下グローバル変数のセットを %SYS ネームスペースで実行する必要があります。
set ^SYS("Security","CSP","AllowClass",0,"%SOAP.WebServiceInvoke")=1
set ^SYS("Security","CSP","AllowClass",0,"%SOAP.WebServiceInfo")=1※この設定はウェブサービス用テストページのために必要な設定です。SOAPクライアントから通常のリクエストを実行する場合は設定不要です。
詳細については、以下のドキュメントもご参照下さい。
優れた執筆者は、題名で読者を引き込み、答えを記事のどこかに隠すべきだと考えられています。 だとすると、私は出来の悪い執筆者ということになってしまいます。私の自尊心は見知らぬインターネットユーザーの皆さんのご意見にかかっていますので、お手柔らかにお願いします。
コミュニティの皆さん、こんにちは!
InterSystems のグローバルマスターズ・ゲーミフィケーションプラットフォームにすべての DC メンバーを招待いたします。最新情報を把握し、DC への貢献によるポイントや賞品をゲットしていただけます! 本記事を読んで参加方法と概要をご確認ください!
▶️ グローバルマスターズとは?
グローバルマスターズはゲーミフィケ―ションプラットフォームで、ISC テクノロジーに関するチャレンジ (タスク) を完了させたり、バッジやポイントを獲得したり、そのポイントを様々な賞品に交換したりすることができます。
これはInterSystems FAQ サイトの記事です
%ZSTARTルーチンを インスタンス開始時に起動しないように構成設定用ファイルを手動で変更します。
【注意】
インスタンスの起動環境の変更は、通常管理ポータルで行うものなので、以下に説明する方法は、%ZSTART の SYSTEM ラベルの動作を無効化する方法以外では利用しないようにしてください(別のパラメータを誤って修正してしまった場合、起動できなくなる可能性がありますのでご注意ください)。
1. インスタンス のインストールディレクトリ以下にある構成設定用ファイル(cache.cpf/iris.cpf)をテキストエディタで開きます。
※構成ファイルは、事前にバックアップ(コピー)していただくことを推奨します。
2. [Startup]セクションにあるSystemStartの値を0に変更し、保存します。
3. ファイル変更後、一旦 インスタンスを通常の方法で停止し、再度開始してください。
SystemStart パラメータの詳細については、下記ドキュメントについてもご参照ください。
パラメータ・ファイル・リファレンス_SystemStart【IRIS】
この記事は、GitHub Actions を使って GKE に InterSystems IRIS Solution をデプロイするの継続記事で、そこではGitHub Actions パイプラインを使って、 Terraform で作成された Google Kubernetes クラスタにzpm-registry をデプロイしています。 繰り返しにならないよう、次の項目を満たしたものを開始点とします。
訳者注) 上記の記事を読まれてから、本記事に進まれることをお勧めしますが、GKE上のサービスにドメイン名を紐づける方法を解説した単独記事としてもお読みいただけます。
以前紹介した記事 (お読みいただいたでしょうか) では、GitHub とパーフェクトに統合する CircleCI のデプロイシステムについてカバーしました。 なのにどうしてさらに掘り下げる必要があるのか? それは、GitHub には GitHub Actions という独自の CI/CD プラットフォームがあり、詳しく見ておく価値があるからです。 GitHub Actions を使えば、外部のサービスを使用する必要はありません。
この記事では、GitHub Actions を使って InterSystems Package Manager のサーバー部分である ZPM-registry を Google Kubernetes Engine (GKE) にデプロイする、ということを試したいと思います。
インスタンスのデータに基づくビジネスインテリジェンスを実装しようと計画中です。 DeepSee を使うには、データベースと環境をどのようにセットアップするのがベストですか?

これはInterSystems FAQ サイトの記事です。
連番を生成する関数($INCREMENT)を使用してユニークな番号を自動付番することができます。
SQLのSELECT文で使用する場合には OracleのSequence相当の機能を実装したクラスを利用する方法があります。
サンプルを以下のGitHubリポジトリより取得することができます。
これは、InterSystems FAQサイトの記事です。
$SYSTEM.Process.TerminalPrompt() を使用してターミナルのプロンプトを変更できます。
プロンプトの表示形式は、以下情報の組み合わせで指定できます。
- ホスト名
- 現在のネームスペース
- 構成名
- 現在の時刻
- PID: オペレーティングシステム上でのプロセスID
- ユーザーネーム
- 最後のコマンドを実行してからの経過時間
例えば、Do $SYSTEM.Process.TerminalPrompt(1,3) ではホスト名と構成名をターミナルのプロンプトとして表示します。
*実行例は、ホスト名="HOST1"、構成名="IRIS"*
USER>Do $SYSTEM.Process.TerminalPrompt(1,3) HOST1:IRIS>
これは、InterSystems FAQサイトの記事です。
SELECT ... FOR UPDATE は明示的な行ロック取得の方法として多くの RDBMS で実装されているため、この機能を使われているケースも多いと思います。
このシンタックスは InterSystems 製品ではエラーにはなりませんが、期待されるような行ロックの取得は行われません。
この記事では同等の機能を実現する方法をご紹介します。
DECLARE CURSOR C1 IS SELECT Name FROM Person WHERE Name LIKE 'A%' FOR UPDATE OPEN C1 LOOP FETCH C1 INTO name ... name を表示 ... 終了ならLOOPをEXIT END LOOP CLOSE C1
上記のようなSQL文は、下記のSQL文で代替可能です。
※下記2行目のUPDATE文の実行により対象行に対して排他ロックがかかるため、他DBの動作と異なる点ご注意ください。


