記事 Hiroshi Sato · 2021年2月24日 3m read ECPはどのように使うのが正しい? 以下のドキュメントでご紹介しています通り、ECPは分散キャッシュ用のアプリケーションサーバーを並列に増設することで、処理量に応じてスケールアウトすることを主目的として設計されています。 ECP機能紹介 従ってインターシステムズデータプラットフォーム上で稼働する複数のアプリケーション間の簡便なデータ交換手段としてECPをご使用いただくことは推奨していません。 以下その理由についてご説明します。 データ量の増加、処理量の増加に伴いスケーラビリティに関する要件も今後益々厳しくなる中、将来にわたってより良いスケーラビリティ性能を得られるようインターシステムズの開発部門は、より良いアルゴリズムの開発や処理のチューニングをECPに対して継続的に行っております。 その成果は順次最新バージョンに反映していきます。 #Caché #InterSystems IRIS #InterSystems IRIS for Health 0 0 0 466
記事 Megumi Kakechi · 2020年9月16日 4m read HTMLからRESTを使って画像ファイルをアップロードする方法 これはInterSystems FAQ サイトの記事です。 HTMLからRESTを使って画像ファイルをアップロードする方法をご紹介します。 1.はじめに、以下のようなhtmlとクラスを作成してください。 *UploadTest.html #CSP #REST API #Caché #Ensemble #InterSystems IRIS #InterSystems IRIS for Health 2 3 1 3.3K
記事 Mihoko Iijima · 2021年2月19日 4m read VSCode:プロセスにアタッチしてデバッグする方法 開発者の皆さん、こんにちは! VSCode の ObjectScript エクステンションで、プロセスにアタッチしてデバッグする方法についてご紹介します。 ObjectScript エクステンションの基本的な操作方法については、こちらの記事をぜひご参照ください。 解説ビデオ(4分ちょっと)もあります。ぜひご参照ください。 https://www.youtube.com/embed/NBITqPlMf1M[これは埋め込みリンクですが、あなたはサイト上の埋め込みコンテンツへのアクセスに必要な Cookie を拒否しているため、それを直接表示することはできません。埋め込みコンテンツを表示するには、Cookie 設定ですべての Cookie を受け入れる必要があります。] #ObjectScript #VSCode #デバッグ #ビデオ #Caché #Ensemble #InterSystems IRIS #InterSystems IRIS for Health 2 2 0 14K
記事 Mihoko Iijima · 2021年2月19日 2m read InterSystems のガベージコレクション機能について(Java のガベージコレクションとの違い) これは InterSystems FAQ サイトの記事です。 Java のガベージコレクションは、使用しなくなったメモリ上のオブジェクトを自動開放するしくみですが、InterSystems data platform(以下IRISと表記)のガベージコレクションは、意味が異なります。 IRIS では、ディスク上の大量のデータノードを 1 コマンド(killコマンド)で削除する機能があります。 通常、データ容量が増えれば、それに伴い、削除に必要な時間が増加しますが、そうすると、そのkillコマンドを発行したプロセスが、削除が終わるのを待つ時間が増加することになってしまいます。 その様な事象の発生を避けるため、IRIS では、ユーザプロセスが大量のデータを削除する kill コマンドを発行した際に、その場で削除に必要な全ての処理を行うのではなく、削除が必要な開始の場所だけを示して、次の処理に進むようになっています。 #Java #システム管理 #Caché #Ensemble #HealthShare #InterSystems IRIS #InterSystems IRIS for Health 0 0 0 114
記事 Mihoko Iijima · 2021年2月19日 1m read 仮想化ソフトのサポートについて これは InterSystems FAQ サイトの記事です。 インターシステムズは、個々の仮想化ソフトウェアに対して、弊社製品の動作検証は行なっておりません。 インターシステムズでは、弊社製品がサポートするプラットフォームをサーバプラットフォームという単位で定義しています。 サーバプラットフォームは、オペレーティングシステムとそのバージョン、およびそのオペレーティングシステムが動作するプロセッサタイプの 3 つの要素で定義されます。 従いまして、ある仮想ソフト上で InterSystems 製品がサポートしているサーバプラットフォームが稼動し、その上で InterSystems 製品が動作している限りにおいて、製品のサポートを提供します。 #Caché #Ensemble #HealthShare #InterSystems IRIS #InterSystems IRIS for Health 0 0 0 91
記事 Toshihiko Minamoto · 2021年2月18日 9m read グローバルをクラスにマッピングする技術 (2/3) 古くなった MUMPS アプリケーションの新たな生命を吹き込みたいとお考えでしたら、以下にご紹介するステップを実行すれば、グローバルをクラスにマッピングし、美しいデータを Object や SQL に公開できます。 今回ご紹介する例には、パート 1 ではカバーしなかった内容を 4 つないし 5 つ程度盛り込んでいます。 その後は親子マッピングの例を紹介して完結となります。それを修得したらマッピングはもう完璧でしょう。 前回と同じ免責事項: これらの記事を読んでもグローバルがよく理解できないという方は、WRC (Support@InterSystems.com) までメールでお問い合わせください。喜んでサポートさせていただきます。 グローバルをクラスにマッピングするステップ。 #マッピング #SQL #グローバル #Caché 1 0 0 260
記事 Megumi Kakechi · 2021年2月15日 7m read データベースキャッシュおよびルーチンキャッシュの最適値の設定方法 これは InterSystems FAQ サイトの記事です。 データベースキャッシュおよびルーチンキャッシュをモニターし、最適値を調べる方法をご紹介します。 (1) データベースキャッシュ 現状の設定値で問題ないかは、^GLOSTAT ユーティリティ のCache Efficency値(キャッシュ効率)でモニターします。 Cache Efficiency 値は大きければ大きいほど良いですが、目安として100 以上であれば、設定サイズは問題ありません。 実行例) #システム管理 #パフォーマンス #ヒントとコツ #Caché #Ensemble #InterSystems IRIS #InterSystems IRIS for Health 0 0 0 479
記事 Megumi Kakechi · 2021年2月15日 4m read ルーチン・クラスメソッド内の特定処理でデータベースの特権を変更する方法 これは InterSystems FAQ サイトの記事です。 「特権ルーチンアプリケーション」を使用し、コード中に $system.Security.AddRoles()メソッドを使用してロールを付与する仕組みを利用します。 ※ロールベースで必要な特権を付与するため、予め特定の特権を持ったロールを作成する必要があります。 #システム管理 #ヒントとコツ #Caché #Ensemble #InterSystems IRIS #InterSystems IRIS for Health 0 0 0 158
記事 Mihoko Iijima · 2021年2月12日 3m read SQL から ObjectScript で記述したプログラムを実行して値を返す方法 これは InterSystems FAQ サイトの記事です。 以下例のクラスメソッド getLatestID() のように ObjectScript のクラスメソッドを用意します。返したい値を戻り値に指定し、SQLストアドプロシージャ(SqlProc)キーワードを指定するだけで値が返せます。 ClassMethod getLatestID() As %Integer [ SqlName = getLatestID, SqlProc ] { set latestID=$Order(^ISJ.TestClass1D(""),-1) quit latestID } 操作を試す場合は、以下のクラス定義をご準備ください。 #ObjectScript #SQL #ヒントとコツ #Caché #Ensemble #InterSystems IRIS #InterSystems IRIS for Health 0 0 0 351
記事 Mihoko Iijima · 2021年2月12日 5m read XMLファイルの内容をデータベースに登録する方法 これは InterSystems FAQ サイトの記事です。 XMLファイルの内容を格納する永続クラス定義を作成し、%XML.Adaptor を追加で継承します。 例は以下の通りです(右端の %XML.Adaptorクラスを追加で継承します)。 Class ISJ.Class1 Extends (%Persistent, %Populate, %XML.Adaptor) #ObjectScript #XML #オブジェクトデータモデル #ヒントとコツ #Caché #Ensemble #InterSystems IRIS #InterSystems IRIS for Health 2 0 0 2K
記事 Toshihiko Minamoto · 2021年2月8日 10m read Caché データベースブロックの内部構造、パート 3。 これで 3 記事目になります (パート 1 と パート 2 をご覧ください) が、引き続き Caché データベースの内部構造をご紹介いたします。 今回は、興味深い内容をいくつかご紹介し、私の Caché Blocks Explorer プロジェクトを使って作業の生産性をアップさせる方法について説明します。 #システム管理 #データベース #Caché 1 0 1 155
記事 Megumi Kakechi · 2021年2月8日 1m read 平常時のシステムパフォーマンスを収集する方法 これは InterSystems FAQ サイトの記事です。 システムのパフォーマンスが低下した場合、OSやインターシステムズ製品の様々なツールを使用して情報収集を行い ”通常時と比較して、どこがどの程度変わっているか”を確認することで、問題のある箇所を特定できます。(逆に、通常時の状況が不明な場合、パフォーマンス問題点の切り分けが非常に困難となる場合もあります。) いざ という時に備え、通常時のパフォーマンスを確認することは、大変重要な情報となります。 収集情報詳細は、以下のドキュメントをご参照ください。 #システム管理 #パフォーマンス #ヒントとコツ #Caché #Ensemble #InterSystems IRIS #InterSystems IRIS for Health 0 0 0 154
記事 Megumi Kakechi · 2021年2月2日 2m read 2つのデータベースにある複数のグローバルやルーチンを比較する方法 これは InterSystems FAQ サイトの記事です。 ※こちらの方法は、ミラーリング、シャドウイング、またはその他のメカニズムを使用して複製したデーターベースを比較したい場合に利用します。 グローバル変数の比較には、DATACHECKユーティリティを利用できます。以下ドキュメントをご参照ください。DataCheckの概要【IRIS】 DATACHECK ユーティリティの実行サンプルは、添付のPDFをご覧ください。 *** ルーチンの比較は、システムルーチン %RCMP か、管理ポータルを使用します。 以下は、管理ポータルでの使用方法になります。 #システム管理 #ヒントとコツ #Caché #InterSystems IRIS #InterSystems IRIS for Health 0 0 0 373
記事 Toshihiko Minamoto · 2021年2月2日 9m read Caché データベースブロックの内部構造、パート 2 この記事は Caché データベースの内部構造を説明したこちらの記事の続編です。 そちらの記事では、様々なブロックタイプ、それぞれのつながりやグローバルとの関係について説明しました。 純粋に理論を述べた記事でした。 ブロックツリーを視覚化するのに役立つプロジェクトを作成しましたので、この記事ではその仕組みを詳しく説明します。 #システム管理 #データベース #Caché 0 0 0 274
記事 Hiroshi Sato · 2021年2月1日 1m read ローカル変数の値がOREFであるかどうかの判定法 これは InterSystems FAQ サイトの記事です。 $IsObject()を使用して判別できます。 調べたい変数をvとすると、 $IsObject(v)=1 // vはOREF$IsObject(v)=0 // vはOREFではない$IsObject(v)=-1 // vはOREFだが、有効なオブジェクトを指していない となります。 vが未定義の場合は、$IsObject(v)はUNDEFINEDエラーとなりますので、ご注意ください。 UNDEFINEDエラーを防止するには、次のように$Getを使用することをお勧めします。 #ObjectScript #Caché #Ensemble #InterSystems IRIS #InterSystems IRIS for Health 0 0 0 238
記事 Hiroshi Sato · 2021年2月1日 1m read スタジオでグローバルをインポート/エクスポートする方法 これは InterSystems FAQ サイトの記事です。 ドキュメント上は明確に記述されていませんが、エクスポートの追加ボタンを押した時に表示されるファイルダイアログのファイル名にグローバル名 + .GBLと入力することでグローバルをエクスポートの対象にすることができます。(例: ^aaaの場合、^aaa.gblと指定) この機能はクラス、ルーチン等と一緒にグローバルデータを一括してエクスポート/インポートする際に、便利な機能ですが、XMLで表現されるため、データ容量は実データに比較し大きくなりますので、大量データを処理する場合には必要な容量に注意が必要です。 #スタジオ #Caché #Ensemble #InterSystems IRIS #InterSystems IRIS for Health 0 0 0 310
記事 Mihoko Iijima · 2021年1月29日 4m read コマンドでジャーナルファイルにある特定のグローバル変数を検索する方法 これは InterSystems FAQ サイトの記事です。 #グローバル #システム管理 #ヒントとコツ #Caché #Ensemble #InterSystems IRIS #InterSystems IRIS for Health 0 0 0 433
記事 Mihoko Iijima · 2021年1月29日 2m read グローバルのサイズをプログラミングで取得する方法 これは InterSystems FAQ サイトの記事です。 システム提供の %SYS.GlobalQueryクラス の Size クエリーを使用することで取得できます。 使用例は、以下のサンプルコードをご参照ください。※カラムやパラメータの指定はクラスリファレンスをご確認ください。 #グローバル #ヒントとコツ #Caché #Ensemble #InterSystems IRIS #InterSystems IRIS for Health 0 0 0 367
記事 Hiroshi Sato · 2021年1月27日 1m read ObjectScriptにはメソッドのオーバーロードはありません これは InterSystems FAQ サイトの記事です。 InterSystems ObjectScript言語では引数の異なる同名のメソッドを定義することはできません。 InterSystems ObjectScript言語は一般的に動的言語と呼ばれるプログラミング言語に分類されます。 ObjectScriptではメソッド実行時にどの引数を使用するかどうかは自由に制御可能ですので、動的プログラミング言語ではないJava等の言語と異なり、コンパイルの段階で厳密に引数の数でメソッドを区別する必要がありません。 従って ObjectScript言語は、オーバーロードと一般に呼ばれる言語仕様を含んでいません。 Java等で記述されたプログラムを移植する際にオーバーロード相当の機能を実現するには、 ClassMethod test(args... as %String) のように引数の後ろに ... を付加します。 #ObjectScript #Caché #Ensemble #InterSystems IRIS #InterSystems IRIS for Health 0 0 0 241
記事 Hiroshi Sato · 2021年1月27日 4m read クラス定義のプロパティ表示順と、プロパティに対応したグローバル変数の格納順 これは InterSystems FAQ サイトの記事です。 クラス定義のプロパティの表示順は、スタジオのプロパティウィザードを利用して登録した場合は、末尾に追記されます。 また、エディタ上の任意の場所でプロパティ定義文を記述する場合は、その場所に追記され、クラス定義が登録されます。 つまり、定義者が記述した順番に登録されます。 (スタジオが並び換えを行ったりはしません。) 作成したクラス定義が、PersistentやSerialのようにデータベースに格納する属性を持ったクラス定義である場合、”初回のコンパイル”で クラス定義に対応するグローバル変数の定義情報=ストレージ定義を作成します。 初回コンパイル以降に、プロパティ定義の追加が行われれば、そのプロパティに対応するグローバル変数のスロット番号を、末尾に追加し、ストレージ定義を更新します。 以下の例は、クラス定義に対応するストレージ定義の例です。 (初回コンパイル時の状態) #スタジオ #Caché #Ensemble #InterSystems IRIS #InterSystems IRIS for Health 0 0 0 167
記事 Hiroshi Sato · 2021年1月27日 1m read 文字列の置換方法 これは InterSystems FAQ サイトの記事です。 文字列の置換には$REPLACE関数を使います。 ドキュメントはこちら #ObjectScript #Caché #Ensemble #InterSystems IRIS #InterSystems IRIS for Health 0 0 0 358
記事 Hiroshi Sato · 2021年1月27日 1m read スタジオで一括で選択範囲をコメントにする方法 これは InterSystems FAQ サイトの記事です。 一括コメントを付与したい行全体を選択後、Ctrl + / を入力することで、選択範囲を一括でコメントにすることができます。 コメントの一括解除には、コメントを解除したい行全体を選択後 Ctrl + Shift + / を入力します。 #スタジオ #Caché #Ensemble #InterSystems IRIS #InterSystems IRIS for Health 0 0 0 364
記事 Hiroshi Sato · 2021年1月27日 1m read JDBC対応状況 これは InterSystems FAQ サイトの記事です。 バージョン2009.1以降で、JDBC 4.0API に対応しています。 詳細は、以下のドキュメントをご参照ください。 JDBCサポートについて #Java #JDBC #Caché #Ensemble #InterSystems IRIS #InterSystems IRIS for Health 0 0 0 154
記事 Toshihiko Minamoto · 2021年1月21日 9m read Caché データベースブロックの内部構造、パート 1 InterSystems Caché のグローバルは、デベロッパーにとって非常に便利な機能を提供します。 しかし、グローバルが高速な上に効率が良いのはなぜでしょう? 理論 基本的に、Caché データベースとは、データベースと同じ名前を持ち、CACHE.DAT ファイルを含んだカタログのことです。 Unix システムでは、このデータベースを普通のディスクパーティションにすることもできます。 #システム管理 #データベース #Caché 1 0 1 452
記事 Toshihiko Minamoto · 2021年1月19日 7m read バグ退治を促進する開発を行うためのヒント デバッガーは使わないという人はいますか? 最後に使ったのはいつだったか、記憶にないですね。 それは、嫌いだからではなくて、単に必要ないからなんです。 その一番の理由は、ある種の開発手法を使っているおかげで、バグの発生を少なく抑えたり、単体テストのレベルで発見したり、バグをとても簡単に追跡できたりするからです。 以下にいくつかヒントを紹介します... 1. 独自の COS チートシートを作成する。 これは主に COS の初心者が対象になります。 バグを引き起こす大きな原因の一つとして、特定のコマンドや関数の動作を理解していないということがあります。 時間をかけて言語を学び、そのすべてのバリエーションを試すことをおすすめします。 それから独自のチートシートを作成することで、知識が固まり、さっと使えるレビューツールも出来上がります。 生産性アップにつながるほか、避けられるはずのバグをうっかり書いてしまう頻度を確実に減らすことができます。 2. スタジオで「変数の追跡」をオンにする #ヒントとコツ #Caché 0 0 0 157
記事 Mihoko Iijima · 2021年1月15日 2m read 文字列の前後の半角スペース及び全角スペースを取り除く方法 これは InterSystems FAQ サイトの記事です。 $ZSTRIP() 関数を使用します。 この関数を使用すると、指定文字列から、文字のタイプと文字を削除できます。 下記の例のように、第2引数で、"<"、">"、"<>"を指定することにより、SQLのLTRIM、RTRIM、TRIM関数と同等の処理が可能になります。 #ObjectScript #ヒントとコツ #Caché #Ensemble #HealthShare #InterSystems IRIS #InterSystems IRIS for Health 0 0 0 910
記事 Mihoko Iijima · 2021年1月15日 1m read TPCによるベンチマーク結果や、他DBと高速性について比較したベンチマーク結果の公表についての InterSystems の考え これは InterSystems FAQ サイトの記事です。 InterSystemsでは、既存のお客様および見込みのお客様と実施した他DBMS製品との比較を行った様々なベンチマーク結果を持っています。 しかし、それらの結果に関して、ほとんどのRDBMSベンダのライセンス条項に当該RDBMSベンダの承諾なしにベンチマーク結果を公表してはならないという条項があるため、現実問題として一般的な公表は、難しい状況です。 一方、TPC等の公共の機関等がベンチマーク条件を策定、公開しているベンチマークに関しては、必要な実施コストに対して得られるものが少ないと考えており、過去にも実施しておりませんし、将来も実施する予定はありません。 InterSystemsは、TPCの様な現実のシナリオからかけ離れたベンチマークを実施するのではなく、実際のアプリケーションを模したベンチマークシナリオを構築し、それに基づき、各ハードウェアベンダ、パートナ企業、エンドユーザとの協力の基、ベンチマークを実施しております。 #Caché #Ensemble #HealthShare #InterSystems IRIS #InterSystems IRIS for Health 0 0 0 269
記事 Toshihiko Minamoto · 2021年1月11日 4m read データ変更の追跡 - 監査ログ - (2/2) 前回の記事では、データの変更を簡単に記録できる方法をお見せしました。 今回は、監査ログが記録されるデータ構造と監査データを記録する「Audit Abstract クラス」を変更しました。 また、データ構造は親構造と子構造に変更し、それぞれに「トランザクション」とそのトランザクションで「その値によって変更されたフィールド」を記録するテーブルが 2 つ設けられます。 新しいデータモデルをご覧ください。 「監査クラス」から変更したコードをご覧ください。 #ObjectScript #オブジェクトデータモデル #Caché 0 0 0 144
記事 Megumi Kakechi · 2021年1月6日 1m read Webサービスでエラー発生時にエラー詳細情報を取得する方法 これは InterSystems FAQ サイトの記事です Web サービス(SOAP)またはREST で IIS を経由してクライアントにエラー応答する際、既定では IISが生成するデフォルトのエラーページ( HTTP 500 エラー )が返されます。 SoapFaultなど、サーバ側で出力したエラーの詳細情報は返されません。 IIS7 以降、WebクライアントがWeb サービスの障害の詳細情報を取得するための設定オプションが追加されました。 HTTP ステータスコードがエラーの場合に、既存の応答をどうするかを existingResponse 属性で指定することができます。 こちらの値を、既定の Auto から PassThrough に変更することで、エラーの詳細情報が返されるように変更できます。※設定変更後、IISの再起動が必要です。 #REST API #SOAP #ヒントとコツ #Caché #Ensemble #InterSystems IRIS #InterSystems IRIS for Health 0 0 0 1.6K
記事 Toshihiko Minamoto · 2021年1月5日 9m read データ変更の追跡 - 監査ログ(1/2) はじめに 多くのアプリケーションに共通する要件は、データベース内のデータ変更のログ記録です。どのデータが変更されたか、誰がいつ変更したかをログに記録する必要があります(監査ログ)。 このような質問について書かれた記事は多く存在し、Caché で行う方法の切り口もさまざまです。 そこで、データ変更を追跡して記録するためのフレームワークを実装しやすくする仕組みを説明することにします。 これは、永続クラスが「監査抽象クラス」(Sample.AuditBase)から継承すると「objectgenarator」メソッドを介してトリガーを作成する仕組みです。 永続クラスは Sample.AuditBase から継承されるため、永続クラスをコンパイルすると、変更を監査するためのトリガーが自動的に生成されます。 監査クラス 次は、変更が記録されるクラスです。 #ObjectScript #オブジェクトデータモデル #ベストプラクティス #Caché 0 0 0 219