AD入門 Feed

2006年8月 7日 (月)

【AD入門:002】ゾンビビューを撃退(2)

 さて、ゾンビビューができてしまう理由を探ってみましょう。
 Notesのビューは、DB内の文書を一覧形式で表示させることにより、ユーザーに目的の文書を簡単に探し出すことができる工夫が施されています。条件に一致する文書だけが表示されるようにする「ビューの選択式」、表示されるデータを決める「列式」、表示される順序を決める「ソート」の設定などにより、アプリケーション開発者はビューを作成します。
 しかし、ビューをユーザーが利用するたびに、文書を抽出し、表示する内容を決めて、ソートしていては表示までに時間がかかり、効率も悪くなります。
 そこで、Notesではあらかじめビューに表示する文書を抽出し、それをビュー索引としてDB内に格納しています。一度ビューの索引が作成されると、DB内の文書に変化がない限り、再利用が可能なためビューの表示が効率良く行えます。もし、文書が追加、更新、削除されると、Dominoサーバー上でデフォルトで稼働しているUpdateタスクが、自動的にビューの索引を更新する仕組みになっています。
 もし、ユーザーがNotesクライアント上でビューを表示したまま放置し、そのDBの文書が変更されたりして、ビュー索引が更新されていると、画面に表示されている情報が古くなってしまいます。
 そこで、ビューのプロパティで、ビュー索引が更新されたときの動作を決めています。デフォルトは、「インジケータを表示」が選択されているので、ビューの左上に更新をしらせるボタンが表示されます。つまり、ユーザーがインジケータボタンをクリックした時点で、サーバー上のビュー索引をもとにクライアント画面を再表示します。
 さて、前回紹介したビューの選択式をもう一度見てみましょう。

   SELECT @Adjust(@Today;0;0;-7;0;0;0) < @Created

 この選択式の中で、@Todayという関数を使っていますが、これは現在の日付を取得する関数です。取得するもと情報は、システムの時計であるため、いま取得した値は、次の瞬間ではもう違う値になっているのです。つまり、一度抽出した条件は、次の瞬間には値が置き換わったものと見なされ、またビュー索引を作成しなおさないといけないのです。
 そのため、インジケータを押して画面を更新しても、すぐに新しいビュー索引ができてしまい、インジケータでそれを知らせるため、ゾンビビューができてしまいます。
 ゾンビビューを表示するようにNotesクライアントで表示を切り替えると、索引が古いと判断したビュー索引は破棄され、再度索引を作成し直してから画面に表示されるため、索引が作成されるまでの間、画面左端に稲光マークが点滅して、表示されるまでに大幅な時間がかかってしまいます。

◎鉄則
 Notesでは、@Todayや@Nowなどの日時関数は、ビューの選択式や列式で使用することは避けるべし

 次回は、図で少しまとめてみましょう。

2006年8月 1日 (火)

【AD入門:001】ゾンビビューを撃退(1)

みなさんが普段お使いのNotesDBで、やけにオープンするのに時間がかかるものは無いですか?正確にいうと、ビューを切り替えるたびに表示までに時間がかかってしまうものです。
DBが利用され始めた当初は、文書数も少なく、それほどストレス無く表示されるのに、年月が経つにつれ、どんどん遅くなり、気づけば数十秒から数分かかってしまうというものを身近に感じている人も多いことでしょう〜
このようなビューに共通して言えることが、ビューのインジケータ(ビューの表示内容が更新されたことを知らせるボタン)が常に表示され、インジケータをいくらクリックしても消えないというものが圧倒的に多いです。倒しても倒しても立ち上がってくる、まるでゾンビのようなので、ここではゾンビビューとでも読んでおきましょう。
Xfa4lnup

みなさんの周りにもゾンビビューが1つや2つは生息しているかもしれません。もしかすると、みなさん自身がゾンビビューを量産しているアプリケーション開発者かもしれません。
ゾンビビューはいとも簡単に生産できるのです。たとえば、DB内の文書のなかで、文書作成日から1週間以内の文書だけを表示したいビューを作成する場合、どのように実現しますか?
認定コースなどでも紹介されており、初心者に分かりやすい方法であれば、ビューの選択式に以下の式を記述する方法でしょう。

   SELECT @Adjust(@Today;0;0;-7;0;0;0) < @Created

@Adjust関数を使用して、今日の日付に(-7)日を足した、つまり一週間前の日付を計算し、文書作成日(@Created関数)と比較して、ビューに表示する文書を抽出しています。
実は、このビューの選択式を使うとたちまちそのビューは、ゾンビビューと化します。どこに原因があるのでしょうか?今回のケースでは、ビューの選択式に@Today関数を使用したところに問題があります。
なぜ、問題なのかはNotesのビュー索引の仕組みを少し理解する必要があります。次回はそのあたりを紹介していきましょう。
ひとまず、みなさんが今お使いのNotesDBでゾンビビューが存在していないかどうかを洗い出してみましょう。いま現在、問題が顕在化していなくても、やがて文書の増加とともに問題が浮き彫りになっていきます。今のうちに撃退しておきましょう!!(撃退することで、表示までに数十秒〜数分かかっていたビューも、数秒で表示できるようになります。撃退方法は次回以降で紹介していきましょう。)

2006年7月31日 (月)

入門記事掲載開始にあたり

Notes/Dominoをしっかり習得したいという方には、認定コースを受講されることをお勧めします。短期間で体系的に学べるためしっかりとスキルが身につきます。
しかし、諸般の事情(予算がない、時間がないなど)で、認定コースを受講できないということもあるかと思います。見よう見まねで、既存のDBをカスタマイズしたり、前任者から意味不明なまま環境を引き継いで、既存の設定を一切触らず、引き継いだままの手順で運用を行ったりと。。。それで、Notesは使いづらいとか、遅いとか言われても、いやちゃんと使ってないからでしょ〜というケースも少なくない。
そこで、Notes/Domino初心者、中級者を対象に、基本的な機能を中心に、なぜそのような動作になるのか、なぜこの機能は必要なのかといったところを知っていただけるような連載を開始したいと思います。技術者にとって一番大事なことは”なぜ?”と感じ、その原因を探求する意欲だと私は考えるので、何かの参考にしていただければと思います。
今後タイトルに、”AD入門”と書かれていればアプリケーション開発に関係する内容、”SA入門”と書かれていればシステム管理に関する内容を取り扱っているものとします。