REST/JSONを使ってデータを交換することが増えてきていると思いますが、POSTでIRISにデータを渡す場合に日本語が含まれる場合に皆さんどう処理していますか?

わざわざ自分でコード変換する処理を追加していませんか?

実は、あまり知られていないのですが、自動で変換する方法がありますので、紹介します。

CSPのメカニズムを使ってクライアントからデータをPOSTすると、それはCSPのRequestオブジェクトのContentプロパティに渡されます。

ContentプロパティのTypeは%CSP.Streamになっていて、このTypeのクラスリファレンスを読むと、Content-TypeがText/のときには、CharSetに基づいてコード変換が行われると示唆されています。

つまりContent-TypeがJSONの場合には、自動的な変換がされないということになります。

本当は、Content-TypeがJSONの時も変換してくれるのが一番良い(わかりやすい)のですが、残念ながらそうなっていません。

その代わりにパラメータが用意されています。

RESTのディスパッチクラスの定義に以下のパラメータを追加することで、自動コード変換を行なってくれます。

0 0
1 13

Embedded Pythonの導入に伴い、1つ嬉しいことは、直接エクセルファイルの読み書きができるようになったことです。

それでこの機能を使って、ミニ業務改革をちょこちょこ行なっているのですが、そこでちょっとハマったことを共有します。

実際この内容は実はIRISとは全く関係ないのですが、このDCコミュニティの皆さんが同じことでハマった場合に少しでも早く問題解決できるように情報共有します。

エクセルの計算式の入ったセルの値を読み取るときには、そのファイルのオープンの際にdata_only=Trueというフラグをつけないといけないのですが、そのファイルがopenpyxlで読み書きしたファイルの場合に、その計算式のセルの値(Noneとなる)がうまく読めないことがあります。

その場合には、そのファイルをエクセルで開いて再保存することで、正しく読むことができます。

以下にそのあたりの内容を説明したページがあります。

元ネタ

1 0
0 12

これは、InterSystems FAQサイトの記事です。

これは、MS-ACCESSの制限事項です。

MS-ACCESSは、インデックスが32個より多いテーブルにはリンクできません。

この問題を回避する方法として、直接テーブル(クラス)をリンクするのではなく、VIEWを使用する方法があります。

0 0
0 17

これは InterSystems FAQ サイトの記事です。

ロックテーブルの1エントリは管理領域の固定512 bytesとロック文字列情報などの可変領域から構成されます。

可変領域はロック対象のグローバルノード名に関連する情報に必要な長さ(bytes)になります。

1つのLockコマンドにつき、上記で示した長さのデータが必要です。

そしてその可変領域に必要なデータ長は、ロック対象のグローバルノード名(^xxx(xxx,xxx)) の長さに見合う16,32,64,128,256,…bytesのバケットの長さになります。

例えばロック対象のグローバルノード名が^xxx(123,"data")とすると、 ^xxx(123,"data")にデータのロケーション等のデータが付加されたものがその可変領域となり、32byteまたは64bytes(データロケーションが相応に長い場合)のバケットを使用しますので、

1 0
0 41

これは InterSystems FAQ サイトの記事です。

IRIS2023.1から導入されたgmheapとlocksizの新しいデフォルト値について紹介します。

gmheap=0は、特別な設定の必要性がないほとんどのシステム(実運用システムを含む)に適切なように設計された新しいデフォルト値です。

0に設定することで、システムがシステム全体のサイズを推測し、妥当な値を算出してくれます。

gmheap=0 に設定した場合、システムは、グローバルバッファ用に設定されたメモリの合計に3%を乗じた値を基準に、300MBの下限と2GBの上限の範囲内でgmheap値を設定します。

0以外の値はそれをそのまま使用し、2GBよりはるかに大きく、あるいは300MBよりはるかに小さく設定することができます。

0 0
0 36

これは InterSystems FAQ サイトの記事です。

PythonからObjectScriptのルーチンを直接呼び出すことはできませんが、クラスメソッドを経由して間接的に呼び出すことができます。

しかし、Pythonの変数とObjectScriptのローカル変数は内部構造が異なるため、情報の交換には少し工夫が必要です。

簡単なサンプルでその方法について説明します。

まず、2つの変数を足し算する簡単なルーチン ^testを作ります。

1 0
0 71

これは InterSystems FAQ サイトの記事です。

messages.logまたはcconsole.log内に記録されるCSPGatewayLatencyのメッセージは、サーバが、パフォーマンス測定のため定期的に「CSPゲートウェイにリクエストを送信して応答をもらう」ことを行っており、応答を受け取るまで一定時間以上かかったときに出る警告(応答時間の閾値)です。

その既定値は1000ミリ秒です。

WebGateway(CSPGateway)が稼働する Web サーバの負荷が高い場合に出力する場合がありますが、実際のCSPアプリケーションやREST APIの動作や応答速度に影響が見られなければ、特に問題はありません。

またこのメッセージの出力頻度を下げるためにこの閾値を変更する方法もあります。

変更方法は以下を参照ください

1 0
0 40

これは InterSystems FAQ サイトの記事です。

404エラーが返される場合に、以下の対応でエラーが解消されることがわかっています。


(1) binの接続を許可

/cspの構成エディタ>セクションで以下選択

system.webServer > security > requestFiltering

> hiddenSegmets 選択 > (コレクション)の右欄(Count=xx)の右端 [...] クリック

> segment欄に binの行があったので、選択して削除

> 画面戻って、右上の [適用] クリック

または、IISの構成ファイルを直接編集することでも対応可能です。

C:\Windows\System32\inetsrv\config\applicationHost.config

1 0
0 83

これは InterSystems FAQ サイトの記事です。

以下のようなベンチマーク関連の情報が公開されています。

Intel社と共同で実施したパフォーマンス(レイテンシー)とスケーラビリティ(スループット)を計測するベンチマーク結果

Intel社との共同ベンチマーク

ESG社によるIRISと他社データベースとの性能比較に関するレポート

1 0
0 55

これは InterSystems FAQ サイトの記事です。

インスタンスの開始が失敗し、コンソールログに"There exists a MISMATCH.WIJ file"が記録されている場合、何らかのシステム障害の影響でデータベースの整合性に関して問題が生じていることを示しています。

このような状況が発生した際にインスタンスの開始ができるようにするためには、以下の手順を実施します。

(1) a. インスタンスをNOSTUモードで起動
(2) b. データベースの整合性チェック

◆(2)の整合性チェックでエラーを検出しなかった場合、
 (3) d. MISMATCH.WIJ ファイルのリネーム
 (4) e. インスタンスの再起動
を実施します。

0 0
0 54

これは InterSystems FAQ サイトの記事です。

$ZF(-100)で外部コマンドを実行する場合、その外部コマンドの子プロセスからの応答が返らない限り、$ZF(100)コマンドを発行したIRISプロセスはその応答を待って残り続けます。

従ってIRISプロセスを終了させるためにはその応答がない子プロセスを強制終了させる必要があります。

0 0
0 73
記事
· 2024年3月18日 1m read
SQLベンチマークプログラム

InterSystems IRISのSQLの性能を評価する簡単なベンチマークテストを公開します。

また、このベンチマークプログラムで測定した過去の様々なハードウェアでのベンチマーク結果も公開します。

ハードウェアの進歩、インターシステムズの新しいテクノロジーの追加や性能改善によって、性能が劇的に変化しています。

現在のハードウェアの性能を考慮すると、少し物足りない感じが否めないですが、過去との結果の公正な比較という意味であえて、データの規模に関しては過去と同一条件でベンチマーク実施した結果となっています。

データの規模に関してはデータ件数を増やすことで変更できるようになっています。(現時点では500万件)

またこのベンチマークプログラムはインターシステムズ製品用に実装されていますが、使用しているテーブル構造は比較的シンプルなもので、また使用しているSQL文も標準的なものなので、他データベースシステムでも同じベンチマークを実施することはそんなに困難ではありません。

ベンチマークプログラムのリポジトリ

0 0
0 66

最後にCSP機能の中でReactでうまく置き換えできなかった処理について紹介します。

該当する処理は、サーバー上の商品データに含まれるその商品の画像データ(GIF形式)を取得して、ブラウザにイメージとして描画させるものです。

CSPにはStreamServer.clsというサーバー側で動作する機能が用意されています。

この機能を使ってデータベース上に格納されているストリームデータをHTML IMGタグで処理できる形式に変換してくれます。

StreamServer機能を使って画像を表示する処理

Reactで同様の機能を実現する方法が見つからなかったため(そもそもReactはサーバーサイドではなくクライアント上の技術なので)、データベース内に格納されているイメージを取得するのではなく、静的なイメージファイルをウェブサーバーが参照可能な場所に置くことで解決しました。

0 0
0 94

これは InterSystems FAQ サイトの記事です。

インストール時に選択できる初期セキュリティ設定のレベルには以下の3つがあります。
※バージョンにより、表記(日本語/英語)が違う場合があります。

  • 最小 (Minimal)
  • 通常 (Normal)
  • ロック・ダウン (Locked Down)

各レベルの違いの詳細は以下の資料をご確認ください。

セキュリティの説明資料

0 0
0 73

IRIS側の処理は、IRISでREST APIを実装する方法を理解していれば、簡単です。

前回のログイン処理でユーザー認証をIRIS側でどのように実装されているか確認して見ましょう。

まずはディスパッチクラスの定義です。

Shop.Brokerというクラスの中で定義されています。

checkpasswordというメソッドが最後に定義されていて、最終的にShop.Rest.Customer:checkPasswordという(クラス)メソッドが呼ばれているのがわかると思います。

ここで定義しているパラメータは、とりあえずおまじない的に含めておくことをお勧めします。

(説明し出すと少し長くなるので)

0 0
0 112

それでは、今回はより具体的にReact開発方法について解説します。

ショップデモのリポジトリの配下にreactというディレクトリがあります。

この下にReactのコードがあります。

ここのreact-setup.mdに記載されている通り、前準備としてreactのテンプレートを作ります。

npx create-react-app shopdemo --template typescript

あとはこのReactプロジェクトを動かすためのライブラリのインストールを行います。

詳細は、react-setup.mdに書いてあります。

0 0
0 206