2018年9月18日火曜日

V10 の新機能に触れる#2 [Domino Query Language (DQL)]

前回はDomino V10 の新機能のひとつ New Relic 連携についてご紹介しました。

今回もベータ2を試用していて気になった新機能のひとつをご紹介します。 

それは Domino Query Language です。
略して DQL と呼ばれています。

DQL はデータベース内の文書を検索するためのクエリー言語です。

クエリーでは特定のサマリー・フィールド、またはビューの列と、それらの値など指定します。 

「サマリー・フィールド」というのは、ざっくり言えばリッチテキスト・フィールド以外のフィールドのことです。リッチテキストにある本文のテキストや添付の中のテキストは検索できません。

「クエリー」は次に示す様な文であり、個人的には理解しやすいと思っています。

ItemCode という名前のフィールドに入っている値が 00-123 の文書を探す
ItemCode = '00-123'

ItemCode という名前のフィールドに入っている値が 00-123 または 00-456 の文書を探す
ItemCode in ('00-123', '00-456')

TargetDate という名前のフィールドの日付値が 2008 年 3 月 4 日以後の文書を探す
TargetDate >= @dt('2008-03-04')

All Documents ビューの列 Level (=プログラム名)の値が Middle の文書を探す
'All Documents'.Level = 'Middle'

and / or を使って多少複雑なクエリーを指定することもできます
ItemCode in ('00-123', '00-456') and 'All Documents'.Level = 'Middle'


ベータ2では、このクエリーを発行する方法が Domino コンソールと OS のコマンドプロンプトといったように限定的ですが、製品版では LotusScript と Java から発行するためのデータベース・オブジェクトのメソッドが提供されるようです。

HCL Technologies (V10 から Notes/Domino を開発している企業)が公開しているデモビデオ(youtube)では、JavaScript で DQL を使う様子を見ることができます。


前提作業(後述)を終えて早速試しました。

次の様に -q オプションでクエリーを指定して Domino コンソールから発行できました。
tell domquery -f "DQLSample.nsf" -q "ItemCode in ('00-123', '00-456') and TargetDate >= @dt('2008-03-04')" -e

また、Domino のプログラムディレクトリに保存したテキストファイルにクエリー文を書くことで、次の様に -z オプションでファイル名を指定して発行できました。
tell domquery -f "DQLSample.nsf" -z "dql_query.txt" -e

-e オプションを付けると、ツリー構造に分解されたクエリーのそれぞれに要した時間や検索コスト、ヒットした文書数などを知ることができます。

下はコマンドプロンプトから実行した例です。ビュー名と列のプログラム名を指定しています。
C:\IBM\Domino>domquery -f "DQLSample.nsf" -q "'All Documents'.ItemCode in ('00-123', '00-456')" -e
0. IN      (childct 2) (totals when complete:) Prep 0.0 msecs, Exec 153.672 msecs, ScannedDocs 0, Entries 36, FoundDocs 36
    1.'All Documents'.ItemCode = '00-123' View Column Search estimated cost = 5
[1A28:0002-1C58]      Prep 39.756 msecs, Exec 139.246 msecs, ScannedDocs 0, Entries 17, FoundDocs 17
    1.'All Documents'.ItemCode = '00-456' View Column Search estimated cost = 5
[1A28:0002-1C58]      Prep 0.109 msecs, Exec 14.411 msecs, ScannedDocs 0, Entries 19, FoundDocs 36

[1A28:0002-1C58] Total Documents found = 36
上の結果で"View Column Search" と表示されているとおり、検索にビューが使われたことがわかります。
比較のため、クエリーにフィールド名を指定した場合の結果を下に示します。
C:\IBM\Domino>domquery -f "DQLSample.nsf" -q "ItemCode in ('00-123', '00-456')" -e
0. IN      (childct 2) (totals when complete:) Prep 0.0 msecs, Exec 236.783 msecs, ScannedDocs 11654, Entries 0, FoundDocs 36
    1.ItemCode = '00-123' NSF document search estimated cost = 100
[247C:0002-20FC]        Prep 0.405 msecs, Exec 236.775 msecs, ScannedDocs 11654, Entries 0, FoundDocs 17
    1.ItemCode = '00-456' NSF document search estimated cost = 100
[247C:0002-20FC]        Prep 0.288 msecs, Exec 0.0 msecs, ScannedDocs 11637, Entries 0, FoundDocs 19

[247C:0002-20FC] Total Documents found = 36

今度は "NSF document search" と表示されています。

ビューを指定した時と比べると estimated cost (5:100)や Exec の時間(153.672:236.783)にずいぶんと差が現れました。

この結果からは、ビューを使ったほうがコストが低く、早く探すことができたようです。

ちなみに、私の環境では1回目と2回目以降では Exec の時間に差が見られ、2回目以降は1回目よりも早い結果となりました。


その後ビューをいろいろいじっていたところ、いつからかフィールド名を指定したにも関わらず、ビューを使って探すようになってしまいました。

下がその記録ですが、" View-based equality search" と表示され、 estimated cost が 100 から 5 へと減りました。
クエリーからよりコストの低い検索方法をDominoが判断した、ということでしょうか...?うーん...
C:\IBM\Domino>domquery -f "DQLSample.nsf" -q "ItemCode in ('00-123', '00-456')" -e
0. IN      (childct 2) (totals when complete:) Prep 0.0 msecs, Exec 3.329 msecs, ScannedDocs 0, Entries 36, FoundDocs 36
    1.ItemCode = '00-123' View-based equality search estimated cost = 5
[2268:0002-0484]        Prep 0.386 msecs, Exec 2.35 msecs, ScannedDocs 0, Entries 17, FoundDocs 17
    1.ItemCode = '00-456' View-based equality search estimated cost = 5
[2268:0002-0484]        Prep 0.240 msecs, Exec 1.289 msecs, ScannedDocs 0, Entries 19, FoundDocs 36

[2268:0002-0484] Total Documents found = 36

こんな場合に、どうしてもビューを使ってほしくなければ -j オプションで回避することができます。
C:\IBM\Domino>domquery -f "DQLSample.nsf" -q "ItemCode in ('00-123', '00-456')" -e -j
0. IN      (childct 2) (totals when complete:) Prep 0.0 msecs, Exec 126.455 msecs, ScannedDocs 11654, Entries 0, FoundDocs 36
    1.ItemCode = '00-123' NSF document search estimated cost = 100
[1A04:0002-1E90]        Prep 0.10 msecs, Exec 126.451 msecs, ScannedDocs 11654, Entries 0, FoundDocs 17
    1.ItemCode = '00-456' NSF document search estimated cost = 100
[1A04:0002-1E90]        Prep 0.4 msecs, Exec 0.0 msecs, ScannedDocs 11637, Entries 0, FoundDocs 19

[1A04:0002-1E90] Total Documents found = 36



さてさて、前提のお話が後回しになってしまいましたが、DQL を使えるようにするために 2つの準備を行いました。

ひとつは notes.ini へ UPDATE_DESIGN_CATALOG=1 を追加すること。

もうひとつは、検索するデータベースをビューで検索するために「デザインカタログ」(GQFDsgn.cat)へ追加することです。

デザインカタログ(GQFDsgn.cat)は Domino のデータディレクトリに自動で作成されます。

デザインカタログへの追加は -e オプションを指定して updall タスクを実行します。
load updall DQLSample.nsf -e

またビューを追加したり設計変更した場合は -d オプションを指定した updall タスクを実行してデザインカタログを更新しなければならないようです。
load updall DQLSample.nsf -d



以上、ベータ2で試した DQL についてまとめました。

製品版ではさらに検索にヒットした文書へアクセスする方法が提供されるのでしょうが、その方法はまだベータ2のドキュメントに記載されていません...

まだわからないこともありますが、DQL によってより高効率で検索可能な条件を探しやすくなりそうです。

2018年9月16日日曜日

V10 の新機能に触れる#1 [New Relic]

9.0.1 というバージョンが長く続きましたが、ようやく次期バージョン V10 がリリースされることになり、The World Premiere of Domino V10 と題したイベントが世界各地で開催されるようです。日本では「IBM Notes/Domino Day 2018 Autumn Tokyo」がそれです。
いよいよということで、Twitter など Notes/Domino 界隈にはLotusカラーであるイエローが溢れてまいりました。

そんな中、私も V10 ベータ2を試用する機会を得まして、いくつか新機能を試しています。

ところで、Domino サーバーで新機能を有効にする場合、「サーバー文書を変更しろ」とか「notes.ini の変更が必要」とか「テンプレートからDBを作って設定しろ」といったように、多少面倒な作業が必要だったり、おまけに再起動しなければならない、といったイメージがありますよね。

ベータ2 の Document を読んでいても、はやりそういった多少面倒な設定が必要な新機能が多いのですが、実際に試してみると意外にも見た目のインパクトが大きくて、かつ設定は拍子抜けするくらい簡単だったものがありましたので、それをご紹介します。


さて、みなさんは New Relic をご存知でしょうか?

私は知りませんでした。Wikipedia を見てみると
New Relic のサービスは、ウェブアプリケーションやモバイルアプリケーションのリアルタイム監視であり、クラウド、オンプレミス、あるいはそのハイブリッド環境で稼働させることができる。
とあります。状況監視のサービスを Saas で提供しているのですね。

Domino で稼働状況の監視と言えば、統計モニターデータベース(statrep.nsf)が真っ先に頭に浮かびます。これはサーバーの様々な状態を定期的にデータベースに記録するものですが、記録されたデータは数値等であり、データを時系列に並べたビューで眺めることができます。

V10 で新機能を有効にすると、稼働状況を New Relic へ定期的に(1分間隔で)送信します。

私の試用環境で有効にしたところ、New Relic のWebサイトでは下図のようなグラフが表示されました。



さて、新機能を有効にするには、 New Relicアカウント登録が必要です。
※アカウント登録の時点では、課金に必要なカード情報等の入力はありません

アカウントを登録してログインできると、登録時に入力した会社名が画面右上に表示されます。会社名をクリックして Account settings をクリックします。

すると、画面右側に License key として長い文字列が表示されますので、それをコピーします。

New Relic に表示させたい Domino サーバーの notes.ini へ次のように追加します。
NEWRELIC_LICENSE_KEY=<license key>
この <license key> には、コピーした License key の長い文字列を貼りつけます。

notes.ini へ追加する方法としては上の他に、Domino コンソールから次のコマンドを投入することでも可能です。
set config NEWRELIC_LICENSE_KEY=<license key>


設定はここまで。
その後、最初の稼働状況が送信されるまで数分待ちます。


New Relic の Web サイトへログインしたら、画面上部にある PLUGINS をクリックします。

続けて DominoStats をクリックすると、Domino サーバー名が表示されますので、それをクリックします。

すると最初に示しました、いくつかのグラフが表示されている Overview が表示されます。


アカウント登録が多少面倒と言えばそうなんですが、Domino 側はコンソールからコマンド1つ投入するだけで完了します。


なお、グラフのデータを表示できる期間ですが、私は無料版だからでしょうか、最長24時間までといった制限があるようでした。


実はこの機能、New Relic に向けて HTTP POST 要求を送っています。社内からインターネットへ抜ける際に認証が必要な環境では、例えば認証をスルーさせるといった設定の見直しが必要かもしれません。


以上、Domino V10 ベータ 2 で New Relic を設定するにあたっての Web サイトでの画面遷移を中心にご紹介しました。

2018年9月13日木曜日

第7回 のの会に参加しました

昨日は会社帰りに「のの会」に参加しました。



まあ、毎回参加している訳ですが...(^^;


毎度おなじみあう゛さんの @関数講座 は、今回も目の付け所が面白かった。
いつも何気無く使っている @All 等について深く掘り下げて検証されていました。


ところでのの会は、お菓子をぽりぽりつまみながらソフトドリンクをいただきつつ、わいわいがやがやお話するスタイルの会なのですが、今回は缶ビールが提供されました\( 'ω')/

ということで、2つのお話を私も(呑みながら)させていただきました。


1つは、のの会第7回のタイトル画像にあります「ゴースト文書」です。

そろそろ夏も終わりそうですが季節柄こんな話題もいいかな、などと思い「幽霊文書の作り方」というタイトルで資料を作り、いったんは slideshare にアップしたのですが、祟りが怖くなって非公開とさせていただきました(笑)。

どこかのスパイのエージェントが送りつける「なお、このメールは自動的に削除される」のようなメール(Notes文書)を Notes なら実現できるのですよw
どうしても知りたい方は個別にご連絡くださいませ。


もう1つは成功事例です。


Notes のヘルプデスクではおなじみ(?)の「フィールドが大きすぎる(32K)...」というメッセージが出てしまった文書について苦悩のほどを綴ったものです。

スライドの最後には私のようなひねくれた方法ではない、正統派の対処法(?)も掲載していますので、もしよろしければご覧ください。