先日、8 月 22 日は、ノーツコンソーシアムの Domino Lounge Osaka(旧研究会)の京都開催でした。現地参加 17 名の大所帯で、大変な盛り上がりと熱量の中の開催でした。途中 10 分程度の休憩はあったものの、4 時間びっしり多種多様なセッションが目白押しでした。
私はというと『あの頃敵だった GetAllEntriesByKey が、実は最強だった件』と題して、ノーツコンソーシアム主催の次世代エース養成ワークショップのテキスト作成作業で知った新事実について発表しました。今回の記事は、そのまとめ記事となります。
きっかけ
20 年以上前の 2003 年に R5 にバージョンアップした時の出来事です。新機能だった GetAllEntriesByKey を利用したところ、サーバがダウンする現象が発生するようになりました。Lotus テクニカルサポート(当時)に問い合わせたところ、GetAllEntriesByKey から取得したオブジェクトで ColmunValue プロパティを利用すると障害が発生するとのことでした。
この結果を得て私のチームでは GetAllEntriesByKey の利用禁止を開発ルールに組み込みました。そして、私はビューの検索を GetAllDocumentsByKey しか使わないようになってしまいました。
失敗はこの問題修正をウオッチせず、利用禁止を解除することなく、現在に至っていることです。こんな、大きな問題が 20 年以上放置されるはずがなく直されているはずです(FixList をざっと確認したのですが、この障害を発見できなかったので ”はず” という表現になっています)。
そんな中、次世代エース養成ワークショップのテキスト作成で、GetAllDocumentsByKey の戻り値がビューの並び順とはならないこと、GetAllEntriesByKey は並び順の通り出力されることを紹介するため、改めて、2 つのメソッドの違いをサポートに確認しました。
メソッドの比較
まず、この 2 つのメソッドの機能の違いは次の通りだそうです。
GetAllDocumentsByKey | GetAllEntriesByKey |
文書そのもの (NotesDocument) のコレクションを返す | ビューの行情報 (NotesViewEntry) のコレクションを返す |
ビューの索引で文書を特定した後、文書全体のデータを一つ一つ読み込む | 軽量な索引情報を読み込むため、高速でメモリ消費も少ない傾向 |
メモリ消費が多くなりがち(特に文書数が多い場合) | |
文書の単なる集まりであるため、並び順は保証されません | ビューで定義された通りの並び順を保証 |
ColumnValues プロパティで各列の値にアクセス |
並び順とビューの列情報にアクセスできることは知っていましたが、高速でメモリ効率がいいとは知りませんでした。明らかに、GetAllEntriesByKey の方が高性能です。
そして、ビューを検索するおススメの手順は次の通りだそうです。
- GetAllEntriesByKey で高速に行情報を取得
- 必要な場合にのみ、Document プロパティで文書全体を取得
GetAllEntriesByKey 一択といった感じだったので、GetAllDocumentsByKey の存在意義について質問したところ、GetAllEntriesByKey は R5 で追加された機能で、それ以前のスクリプトとの互換性を保つ目的が大きいとの説明でした。
なんだか GetAllDocumentsByKey が不憫になってきました...
なお、ここまでの情報は、Customer Support FAQ に掲載されています。詳しくは、下記のリンクをご確認ください。
NotesView クラスの GetAllDocumentsByKey と GetAllEntriesByKey メソッドの比較
メソッドの使い方
参考までに、2 つのメソッドと関連するクラスの関係をまとめると以下のような感じです。
NotesViewEntry クラスには Document プロパティがあり、ここから文書を取得できます。ただ、文書を取得することが目的であれば、GetAllDocumentsByKey の方が文書に素早く到達できます。コードをシンプルに保ちやすいと言えるかもしれません。
また、NotesViewEntry クラスのプロパティには、IsCategory や IsTotal が示すように、ビューのカテゴリや合計にアクセスできるようです。GetAllDocumentsByKey と同じように扱うと想定外の結果になる可能性がありそうですね。
GetAllEntriesByKey が機能的に優位であるのは間違いなさそうですが、機能の違いを理解した上で使い分けるべきだと思いました。
具体的には、検証した上で別途記事にしたいと思います。
まとめ
過去のトラウマがきっかけで、GetAllDocumentsByKey しか利用しない偏ったスタイルだったと気づかされました。そのおかげできっといろいろ損をしたと思います。情報のアップデートは必要ですね。また、重鎮の方は、これらメソッドの違いを知っていて、しっかり使い分けられていると伺いました。まだまだ修行が足りないと感じました。
ノーツコンソーシアムの Domino Lounge Osaka では、最初の画像にあるアジェンダの通り、さまざまな立場の方が発表します。内容は技術的なものからプロジェクト事例まで難易度も幅広く、どの発表にも「伝えたい思い」が込められています。そのため、参加者は多くの気づきを得られるだけでなく、自分の知らなかった世界を知るきっかけにもなるはずです。
そして、京都開催では本編以外にもお楽しみがあります。納涼川床での懇親会です。普段では味わえない非日常の環境で Notes/Domino の本音トークができます。今年は、台風やにわか雨に邪魔されることもなく無事開催できてよかったです。
0 件のコメント:
コメントを投稿