2 フォロワー · 508 投稿

  

InterSystems CachéはマルチモデルのDBMSおよびアプリケーションサーバーです

詳細はこちらをご覧ください

ドキュメント

記事 Hiroshi Sato · 10月 29, 2020 1m read

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

起動時に、 CTELNETD startup error: bind(sock) failed Telnet23ポートは別ソフトでは使用していません。というエラーが発生する場合の対処法です。

 

現在、InterSystems製品と以下のソフトの組み合わせで、この現象が発生することがわかっています。

  1. NOD32 (セキュリティソフト)※1
  2. McAfee (セキュリティソフト・V5以前)※2
  3. AntiVirus2004 (セキュリティソフト)
  4. AirH トルネード (パケット圧縮ツール)
  5. Norton インターネットセキュリティ ※3
  6. Norton パーソナルファイアウォール ※3
  7. Sygate Personal Firewall
  8. WinGate
  9. Outpost
  10. ZoneAlarm
  11. McAfee Security Suite のプライバシーサービス  

これらがインストールされていると、InterSystems製品の起動も、各GUIツールも正しく動作しません。


上記ソフトウェアについては、アンインストールをお願いいたします。

 

※1 IMONで、InterSystems製品の全実行ファイルを監視をしないように指定することで、正常に動作します。

※2. McAfee Version6以降は、問題なく動作します。

0
0 546
記事 Hiroshi Sato · 10月 29, 2020 1m read

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

以下のようにユーザ名、パスワードを引数に持ち、認証が成功した場合はユーザ名、失敗したときは""(NULL)を返すルーチン(SecTest^SecTest)を作成し、標準の認証システムを書き換えることができます。

 

SecTest(user,pass)
 // user1のパスワードがuser1の場合、認証OKのログを作成
 if user="user1",pass="user1" {
  set ^sqllog($i(^sqllog))="認証OK;"_$horolog_";"_user
  quit user
 }
 // 認証できなかった場合、認証NGのログを作成
 set ^sqllog($i(^sqllog))="認証NG;"_$horolog_";"_user
 quit ""

 

このルーチンを$SYSTEM.SQL.SetSQLLoginOverride()関数を使用して置き換えます。

 

do $SYSTEM.SQL.SetSQLLoginOverride("SecTest^SecTest")

 

ただし標準の認証ができなくなりますので、パスワードを別に保管、参照する仕組みを記述する必要があります。

0
0 202
記事 Hiroshi Sato · 10月 29, 2020 1m read

これは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を使用することをお勧めします。 

 

$IsObject($Get(v))
0
0 357
記事 Toshihiko Minamoto · 10月 28, 2020 12m read

この記事では $Increment 関数と $Sequence 関数を比較します。

まずは、$Increment 関数を聞いたことがないという方のために、その概要を説明いたします。 $Increment は、CachéObjectScript の関数で、引数をアトミックに 1 ずつインクリメントし、結果の値を返します。 $Increment にパラメーターとして渡せるのはグローバル変数ノードとローカル変数ノードのみで、任意の式を渡すことはできません。 $Increment は連続する ID の割り当てに多用されます。 その場合、$Increment のパラメーターにはグローバルノードがよく使用されます。 $Increment を使用するプロセスには確実に任意の ID が割り当てられます。

for i=1:1:10000 {
     set Id = $Increment(^Person) ; 新しい ID
     set surname = ##class(%PopulateUtils).LastName() ; ランダムなラストネーム
     set name = ##class(%PopulateUtils).
0
1 352
記事 Toshihiko Minamoto · 10月 27, 2020 14m read

秩序(順序)はだれにとっても必要であるが、皆が同じように秩序(順序)を理解しているわけではない (ファウスト・セルチニャーニ)

免責事項: この記事では、例としてロシア語とキリル文字を使用しますが、英語以外のロケールでCachéを使用するすべての方に関連のある記事です。 この記事は主にNLS照合について言及しており、SQL照合とは異なることに注意してください。 SQL照合(SQLUPPER、SQLSTRING、照合なしを意味するEXACT、TRUCATEなど)は、値に明示的に適用される実際の関数であり、その結果はグローバルサブスクリプトに明示的に格納されることがあります。 サブスクリプトに格納されると、これらの値は当然、有効なNLS照合(「SQLおよびNLS照合」)に従うことになります。

0
0 595
記事 Mihoko Iijima · 10月 25, 2020 2m read

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

%Net.HttpRequest クラスの SSLConfiguration プロパティに SSL/TLS 構成の「クライアント」構成名が指定されているかご確認ください。

%Net.HttpRequest クラスを使用して、https の url にアクセスするためには、以下のドキュメントに記載されている SSL/TLS 構成 の「クライアント」構成を作成して指定した名前を SSLConfiguration プロパティに指定する必要があります。

SSL/TLS構成のクライアント構成方法

管理ポータルの [システム管理] > [セキュリティ] > [SSL/TLS構成] メニューを開き、「構成名」に任意名を設定し、「保存」ボタンをクリックします(そのほかの構成パラメータは、デフォルト値で作成します)。

 

実行例は以下の通りです(https://www3.nhk.or.jp/news/ にアクセスしています)。

set httprequest=##class(%Net.HttpRequest).%New()
set httprequest.Https=1
set httprequest.Server="www.nhk.or.jp"
set httprequest.
0
0 538
記事 Hiroshi Sato · 10月 19, 2020 3m read

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

2つのステップにて作業します。

クラス定義の移行

クラス定義を別システムへ移行するため、XML形式またはUDL形式(拡張子.cls)のファイルにエクスポートします。

スタジオでのエクスポート手順は以下の通りです。

[ツール] > [エクスポート]

> [追加]ボタンで移行したいクラスを複数選択

> [ローカルファイルにエクスポート]にチェック

> ファイルの種類がXMLであることを確認し、ファイル名を入力し、[OK]

この後、別システム上のスタジオで、エクスポートしたXML、UDLファイルをインポートします。

この手順で、クラス定義は移行できます。

スタジオでのインポート手順は以下の通りです。

[ツール] > [ローカルからインポート]

> 上記手順で出力したXML、UDLファイルを指定します。  

 

データの移行

次に実際のデータを移行します。
オブジェクトデータは既定では、以下の命名規則のグローバル変数内に格納されています。
データ   :^クラス名D
インデックス:^クラス名I
ストリーム :^クラス名S
例)User.testクラスのデータは以下の3つのグローバルに格納されます。
^User.testD, ^User.testI, ^User.testS

これらのうち存在するグローバル変数をすべて、システム管理ポータル(Caché5.

0
0 391
記事 Mihoko Iijima · 10月 15, 2020 5m read

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

DATE 型は InterSystems 製品のデータ型の %Date に、TIME 型は %Time に対応しています。

%Date は内部日付(特殊変数 $Horolog のカンマ区切り1番目)、%Time は内部時刻($Horolog のカンマ区切り2番目)を登録するタイプであるため、サーバ側ロジックでは表示モードを切り替えない限り、内部(論理)形式の値が使用されます。
サーバ側ロジックで内部日付・時刻の表示形式を変更する方法は、操作方法により異なります。

以降の実行例では、Sample.Person テーブルを使用して解説します。
(コマンド実行例は SELECT 文で記載していますが、更新文に対しても同様に記述できます。)

IRIS/IRIS for Health でお試しいただく場合は、ドキュメント(InterSystems IRIS で使用するサンプルのダウンロード)から、
または 関連記事(サンプル(Sample.Person)のクラス定義ダウンロードとサンプルデータの作成について)から、
Sample.Person クラスのインポートとサンプルデータの作成を行ってからお試しください。

Caché/Ensembleでお試しいただく場合は、SAMPLESネームスペースのSample.Personをご利用ください。


0
0 894
記事 Hiroshi Sato · 10月 15, 2020 1m read

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

$ZHorologを使用します。

$ZHorologシステム変数はInterSystems製品を起動してからの経過時間(秒)を保持しています。

2点間の$ZHorolog値の差を取るだけで正確な経過時間を取得する事が出来ます。

詳しくは以下、ドキュメントをご参照ください。


$ZHorologについて【IRIS】


$ZHorologについて

この他、秒の小数部を含む時間の日付と時間の取得には $NOW, $ZTimeStamp が使用できます。

詳しくは以下、ドキュメントをご参照ください。

$NOWについて【IRIS】
$NOWについて
$ZTimeStampについて【IRIS】
$ZTimeStampについて

0
0 227
記事 Mihoko Iijima · 10月 15, 2020 6m read

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

この記事では「グローバルを誤って削除してしまった!」という場合の対処方法をご紹介します。

誤って削除してしまった特定のグローバルを復旧するためには、バックアップファイルとジャーナルを使用します。
復旧は、^ZJRNFILTユーティリティによるジャーナルリストアで条件を指定してジャーナルレコードをリストアする方法で行います。
この方法で、ある時点のデータベースのバックアップに対して、削除が含まれるジャーナルレコードについて特定グローバルを削除するまでのものを適用することができます。

^ZJRNFILTユーティリティの詳細については、以下のドキュメントをご参照ください。

^ZJRNFILT を使用したジャーナル・レコードのフィルタ処理について【IRIS】
^ZJRNFILT を使用したジャーナル・レコードのフィルタ処理について

 

【実施例】

  ・2020/10/14 時点のバックアップが存在している(バックアップは2020/10/15 0:30に実行したとします)
     ジャーナル:2020/10/15 の1日分が存在している(2020/10/14のバックアップ以降のもの)
  ・対象のグローバル:^TEST1

イメージは以下の通りです。

  1. グローバル ^TEST1 は 10/14 よりデータが作成される。
0
0 582
記事 Toshihiko Minamoto · 10月 14, 2020 9m read


こんにちは!

この記事では、IRIS から Caché、Ensemble、HealthShare など、InterSystems の製品で使用されるクラスやその構造を理解するのに役立つツールの概要を簡単にまとめています。

つまり、そのツールはクラスやパッケージ全体を視覚化し、クラス間の相対関係を示し、ディベロッパーやチームリーダーに必要な情報をすべて提供してくれるので、わざわざ Studio に移動してコードを調べる必要が省けます。

InterSystems の製品について情報を集めている方からたくさんのプロジェクトをレビューしている方、または単純に InterSystems Technology ソリューションの新機能に興味がある方まで、ObjectScript Class Explorer の概要をぜひお読みください!

0
0 423
記事 Henrique Dias · 10月 8, 2020 2m read

npm-iris とは何ですか? 

N.P.Mは "No Project Mess "の略です。

N.P.M.は、InterSystems IRISとBootstrap 4を使用したプロジェクト&タスク管理アプリです。

No Project Messは、シンプルで直感的なプロジェクトとタスクの管理ソフトウェアで、開発者や中小企業が日々の複雑な問題を軽減できるように作成されています。 
スプレッドシート、カンバン、カレンダー、ガントチャートなど、タスクのためのさまざまなビューを提供しています。

2
0 207
記事 Toshihiko Minamoto · 10月 8, 2020 18m read

Ansible は Caché とアプリケーションコンポーネントをいかに迅速にデータプラットフォームのベンチマークにデプロイするかという課題を解決するのに役立ちました。 同じツールと方法をテストラボ、トレーニングシステム、開発環境、またはその他の環境の立ち上げも使うことができます。 顧客サイトにアプリケーションをデプロイする場合、デプロイの大部分を自動化し、アプリケーションのベストプラクティス標準に合わせてシステム、Caché、アプリケーションを確実に構成することができます。

0
0 281
記事 Toshihiko Minamoto · 10月 5, 2020 15m read

CachéとCosFakerを使ったテスト駆動開発の簡単な紹介

読了****目安時間: 6分
 

皆さん、こんにちは。

私がTDDに初めて出会ったのは約9年前のことです。すぐに夢中になってしまいました。
最近は非常に人気が出てきているようですが、残念ながら多くの企業ではあまり使われていないようです。 また、主に初心者の方ではありますが、一体それがなんであるのか、どのように使うのかといったことさえも知らない開発者もたくさんいます。

 

 

概要

この記事は、%UnitTestでTDDを使用する方法を紹介することを目標としています。 ワークフローを示し、私の最初のプロジェクトであったcosFakerの使用方法を説明します。これはCachéを使って作成したものであり、最近になってOpenExchangeにアップロードしたものです。

では、ベルトを締めて出発しましょう。

 

 

TDDとは?

テスト駆動開発(TDD)は、自動テストが失敗した場合に、開発者に新しいコードの書き方のみを示すプログラミング実践として定義できます。
このメリットに関する記事、講義、講演などは数多く存在しますが、どれもが正しい内容です。
コードはテスト済みで生成されること、過度なエンジニアリングを避けるために定義された要件に、システムが実際に適合していることを確認できること、継続的にフィードバックを得ることが挙げられます。

0
0 405
記事 Toshihiko Minamoto · 9月 30, 2020 14m read

InterSystems IRIS のクラスクエリ

InterSystems IRIS(および Cache、Ensemble、HealthShare)のクラスクエリは、SQL クエリを Object Script のコードから分離する便利なツールです。 このクエリの基本的な機能は、同じ SQL クエリを複数の場所で異なる引数で使用する場合にクエリの本文をクラスクエリとして宣言し、このクエリを名前で呼び出すことでコードの重複を回避できるというものです。 このアプローチは、次のレコードを取得するタスクを開発者が定義するカスタムクエリにも便利です。 興味が湧きましたか? それではこのまま読み進めてください!

0
0 846
記事 Megumi Kakechi · 9月 30, 2020 2m read

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

DBLatency の Warning メッセージは、ヘルス・モニタプロセスが定期的にデータベースからのランダム読み取りが完了するまでに要した時間(ミリ秒)を計測していて、設定されている閾値(1000 msec)を超えた場合に出力されます。

mm/dd/yy-18:31:15:060 (2932) 1 [SYSTEM MONITOR] DBLatency(c:\xxx\) Warning: DBLatency = 1510 ( Warnvalue is 1000).


上記例では、C:\xxx\IRIS.DAT(または C:\xxx\CACHE.DAT)へのディスク読み取り I/O に 1510 msec かかったことを示していて、メッセージ出力時のディスク I/O 応答速度が遅いことが考えられます。

ディスク I/O 応答速度が遅い原因としては、ディスク I/O 負荷が高いことが考えられます。

  • 大量のデータ登録や変更を行う処理が実施されていた。
  • 弊社製品以外のソフト(アンチウイルスソフト、バックアップソフト)が動作していた。
  • 弊社製品以外のアプリケーションによるディスク負荷など。
  • 仮想環境の場合に、他の仮想マシン(VM)で上記のような負荷の高い処理が行われ、その影響を受けていた。
0
0 479
記事 Toshihiko Minamoto · 9月 28, 2020 6m read

InterSystems ハッカソンの時、Artem Viznyuk と私のチームは Arduino ボード(1 台)とその各種パーツ(大量)を所有していました。 そのため、私たちは活動方針を決めました。どの Arduino 初心者もそうであるように、気象観測所を作ることにしたのです。 ただし、Caché のデータ永続ストレージと DeepSee による視覚化を利用しました!

0
0 967
記事 Hiroshi Sato · 9月 28, 2020 1m read

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

%Library.Routine (以降、%Routine)クラスのRoutineListクエリを使用して、プログラムからルーチンの日付やサイズを取得できます。

RoutineListクエリには、引数があり、検索対象となるルーチン名を前方一致や中間一致で指定できます。
(ワイルドカードには、* か ? を指定します。)

以下の例では、*.MAC を引数に指定して、検索をしています。

 

 SET tStatement ##class(%SQL.Statement).%New()
 DO tStatement.%PrepareClassQuery("%Routine","RoutineList")
 SET rs tStatement.%Execute("*.MAC",,0)
 DO rs.%Display()


ルーチン一覧の他に、クラス定義一覧も取得できます。

0
0 444
記事 Hiroshi Sato · 9月 28, 2020 1m read

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

言語バインディングなどのサーバクライアント型で接続した場合、クライアントのマシン名は以下の処理で取得できます。

 

set client=##CLASS(%SYS.ProcessQuery).Open("P"_$j).ClientNodeName

 

クライアントのIPアドレスは以下の処理で取得できます。

 

set ip=##CLASS(%SYS.ProcessQuery).Open("P"_$j).ClientIPAddress

 

* サーバーとクライアントが同一マシンの場合、上記で取得できるIPアドレスは、127.0.0.1になります。

0
0 766
記事 Megumi Kakechi · 9月 27, 2020 2m read

これはInterSystems FAQ サイトの記事です。
コンソールログ(message.log/cconsole.log)に、以下のようなログが出力される場合があります。

MM/DD/YY-hh:mm:ss:sss (pid) 2 CP: Pausing users because the Write Daemon has not shown
   signs of activity for xxx seconds. Users will resume if Write Daemon completes a
   pass or writes to disk (wdpass=yyyy).


このメッセージは、コントロールプロセスが出力しています。
このプロセスは、ライトデーモン(WriteDaemon)等の主要なシステムプロセスを監視しています。

この監視にて、ディスクI/O 負荷が上がったことなどにより、ライトデーモンの書き込み処理が一定期間(xxx秒間)進んでいない場合、データベースキャッシュ上にダーティなバッファが増えるのを抑制する為に、ユーザプロセスのデータベースへの書き込みアクセスをサスペンドします。
このメッセージ出力後、ライトデーモンの活動が復帰するまでユーザプロセスの書き込みアクセスは待ち状態になります(ハング状態になります)。

0
0 443
記事 Tomoko Furuzono · 9月 17, 2020 17m read

Caché 2017以降のSQLエンジンには新しい統計一式が含まれています。 これらの統計は、クエリの実行回数とその実行所要時間を記録します。

これは、多くのSQLステートメントを含むアプリケーションのパフォーマンスを監視する人や最適化を試みる人にとっては宝物のような機能ですが、一部の人々が望むほどデータにアクセスするのは簡単ではありません。

この記事と関連するサンプルコードでは、このような情報の使用方法と、日次統計の概要を定期的に抽出してアプリケーションのSQLパフォーマンス履歴記録を保持する方法について説明します。



※詳細については、下記ドキュメントページもご参考になさってください。


https://docs.intersystems.com/iris20201/csp/docbook/DocBook.UI.Page.cls?KEY=GSQLOPT_sqlstmts

記録内容

SQLステートメントが実行されるたびに、所要時間が記録されます。 この処理は非常に軽量であり、オフにすることはできません。 コストを最小限に抑えるため、統計はメモリに保持されてから定期的にディスクに書き込まれます。 このデータには当日にクエリが実行された回数と、その平均所要時間と合計所要時間が含まれます。

データはすぐにはディスクに書き込まれません。

0
0 378
記事 Hiroshi Sato · 6月 29, 2020 2m read

Config.Configurationクラス、SYS.Databaseクラスのメソッドを使用して、ネームスペース・データベースの作成及び登録をターミナルから実行することができます。
以下はデータベースファル/CacheDB/AAA/cache.datを作成し、構成ファイル(cache.cpf)にデータベース AAA、及び、ネームスペースAAAの登録を行う一連の実行例です。 *実行は、%SYSネームスペースで行って下さい。*
 

 Set Directory="/CacheDB/AAA/"
 Set x=$ZF(-100, "/shell", "mkdir", Directory)
 Set db=##Class(SYS.Database).%New()
 Set db.Directory=Directory
 Set status=db.%Save()
 Set DBName="AAA"
 Set status=##class(Config.Configuration).AddDatabase(DBName,Directory)
 Set NSName=DBName
 Set status=##class(Config.Configuration).
3
0 801
記事 Mihoko Iijima · 9月 16, 2020 2m read

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

InterSystemsでは、パフォーマンスの影響や動作不調を避けるために、データベースファイルを含む主要なコンポーネントをウイルススキャンの対象から除外していただくことを推奨しております。

具体的には、アンチウイルスソフトのスキャン対象から、以下のファイルを除外してください。

  • データベースファイル(IRIS.DAT/CACHE.DAT)
  • <インストールディレクトリ>/bin 内の実行可能ファイル(EXE) 
  • ライトイメージジャーナル(WIJ)
  • ジャーナルディレクトリ内のジャーナルファイル

上記ファイルが、アンチウイルスソフトで除外設定されていない場合、「SERIOUS DISK WRITE ERROR...」 のようなエラーが発生する場合があります。

このエラーは、実際にハード的なディスク障害が原因であることもありますが、それ以外にアンチウィルスソフトのウィルスチェックなどによって、ディスクへの書き込みが阻止された場合にも起こります。

詳細は、下記ドキュメントページをご参照ください。

インターシステムズ製品と連係して動作するようにサードパーティ・ソフトウェアを構成する方法【IRIS】
インターシステムズ製品と連係して動作するようにサードパーティ・ソフトウェアを構成する方法

0
0 457
記事 Mihoko Iijima · 9月 16, 2020 1m read

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

サーバ側ロジックの記載に使用する ObjectScript でのエラーが発生した場合の対処方法については「ObjectScriptでエラーが発生したら」にまとめています。

ぜひご参照ください!
 

0
0 274
記事 Tomoko Furuzono · 9月 15, 2020 14m read

Cachéデータベースのオブジェクトおよびリレーショナルデータモデルは、標準、ビットマップ ビットスライスの3種類のインデックスをサポートします。 これら3つのネイティブタイプに加えて、開発者は独自のカスタムタイプのインデックスを宣言し、バージョン2013.1以降の任意のクラスで使用できます。 たとえば、iFindテキストインデックスは、そのメカニズムを使用しています。

カスタムインデックスタイプは、挿入、更新、削除を実行するための%Library.FunctionalIndexインターフェースのメソッドを実装するクラスです。 新しいインデックスを宣言するときに、そのようなクラスをインデックスタイプとして指定できます。

例:

Property A As %String;
Property B As %String;
Index someind On (A,B) As CustomPackage.CustomIndex;

 CustomPackage.CustomIndex クラスは、カスタムインデックスを実装するまさにそのクラスです。

たとえば、ハッカソン中に私たちのチーム(Andrey Rechitsky  Aleksander Pogrebnikov、そして)が開発した空間データのクワッドツリーベースのインデックスの小さなプロトタイプを分析してみましょう。

0
0 350
記事 Toshihiko Minamoto · 9月 14, 2020 5m read

この記事は、Caché 以前の歴史に関するかなり個人的な見方を書いたものです。
過去の記事で紹介された Mike Kadow 氏の素晴らしい著書に対抗するつもりはありません。
私たちの歴史的背景は異なるため、この記事は過去に対する別の視点を生み出すことを意図しています。

全体的な話は、1966 年に MGH(マサチューセッツ総合病院)で 8K のメモリ(18 ビットワード)[現在 = 18K バイト] を搭載した PDP-7(シリアル番号#103)
が予備のシステムとして使用されたことから始まります。

「シリアル番号 103 は、
現在 [2014] は MGH のコックスがんセンターの敷地になっている取り壊されたセイヤービルの地下にありました。」
「Octo Barnett の指導の下、Neil Papparlardo と Curt Marble が
このマシンで最初のソフトウェアを開発し、リリースしました。」
 
彼らはこのソフトウェアを MUMPS と名付けました。 (引用元


PDP-7

言語自体は古い形式の Basic にかなり近いものでした。
しかし、他のプログラミング言語に比べて大幅に改善されている点がありました。

  • その画期的なアイデアは、ファイルシステムを処理する必要なしに永続的なデータを格納および取得することでした。
0
0 424
記事 Tomoko Furuzono · 9月 10, 2020 3m read

日付範囲クエリが極端に遅くなっていませんか?  SQLのパフォーマンスが低下していませんか?

日付範囲のサブクエリをまだご覧になっていない場合は、前回の投稿をご確認ください。
https://jp.community.intersystems.com/post/日付範囲クエリのsqlパフォーマンスを改善する


なぜ、こうも日付クエリに注目しているのでしょうか? それは、日付クエリが重要だからです。 それは報告であり、統計であり、自分の素晴らしい仕事を上司に証明するための数字です(もちろん、あなたが実際にそうしていればの話ですが )。では、前回と同じようなテーブルを見てみましょう。ただし、実際には MAXLEN と MINLEN を次のように適切に定義します。

Class User.DateQ extends %Persistent 
{
Property DateSubmitted as %Date;
Property Data as %String (MAXLEN=200, MINLEN=100);
Index DateIdx on DateSubmitted;
}

では、先月のすべてのデータを取得したい場合を見てみましょう。 次のようなクエリを書き、「良い仕事」を考えます。

0
0 790
記事 Toshihiko Minamoto · 9月 9, 2020 2m read

最近の大規模なベンチマーク活動で、アプリケーションのスケーリングに悪影響を与える過度の %sys CPU 時間が観察されました。

問題

TZ 環境変数が設定されていないため、 localtime() システムコールに多くの時間が費やされていることがわかりました。 観察結果を確認するための単純なテストルーチンが作成されましたが、TZ が設定されている場合と TZ が未設定の場合とでは経過時間と必要な CPUリソースが驚くほど違っていました。 TZ が設定されていない場合、localtime() から /etc/local_time への stat() システムコールの継承使用は非常に負荷が高いことがわかりました。

推奨事項

InterSystems は、x86 または Linux on Power のいずれの Linux インストール環境でも、TZ 環境変数を適切に設定して最適なパフォーマンスを確保することを強く推奨しています。  詳細については、「man tzset」を参照してください。

現在の Caché 2016.1のフィールドテストでは日付および時刻関連の関数に関する最適化が行われており、初期テストでは大幅に改善していることがわかっています。 以下は、TZ が設定されていない場合に PowerPC上のLinuxで新しい内部関数の呼び出しをテストした結果の出力例です。

0
0 255
記事 Tomoko Furuzono · 9月 7, 2020 7m read

アプリケーションに、効率的に検索したいフリーテキストを含むフィールドがありますか?これまで複数の方法を試してみたものの、顧客が要求するパフォーマンスを満たせなかった経験はありませんか?私は変わった手段を使ってあらゆる問題を解決できると思っていませんか。もうご存じですよね。私ができるのは、パフォーマンス低下に対処する優れたソリューションを提供することです。

いつものように、要約版が必要な場合は記事の最後まで飛ばしてください。ただ、それだと私はがっかりしてしまいますが。

最近の(2015.1以降の)バージョンのCaché/Ensemble/HealthShareのSAMPLESネームスペースでSample.Companyのバージョンを開くと、擬似ランダムに生成されたテキストであるMissionフィールドが表示されます。このテキストフィールドを検索してみましょう。 私はこの演習のために約256,246社データを生成しましたが、ご自身で必要な数の会社を生成してから同じ手順に従ってください。例えば、次のクエリを実行するとしましょう。

SELECT * FROM Sample.Company WHERE Mission LIKE ‘% agile %’


これはかなり合理的なクエリですが、どのように実行されるのでしょうか?

0
0 413
記事 Toshihiko Minamoto · 8月 27, 2020 37m read

企業はグローバルコンピューティングインフラストラクチャを迅速かつ効率的に成長させて管理すると同時に、資本コストと費用を最適化して管理する必要があります。 Amazon Web Services(AWS)および Elastic Compute Cloud(EC2)コンピューティングおよびストレージサービスは、非常に堅牢なグローバルコンピューティングインフラストラクチャを提供することにより、最も要求の厳しいCachéベースのアプリケーションのニーズを満たします。

0
0 1054