第4章　Denodo cacheの設定


# 目次
[1.はじめに](#1-はじめに)
[2.今回の実施内容](#2-今回の実施内容)
[3.作業実施するうえでの予備知識](#3-作業実施するうえでの予備知識)
[4.設定と動作確認](#4-設定と動作確認)
[5.最後に](#5-最後に)

# 参考URL
- [Denodo-USER MANUALS　サーバーキャッシュの構成](https://community.denodo.com/docs/html/browse/8.0/jp/vdp/administration/server_configuration/configuring_the_cache/configuring_the_cache)
- [Denodo-USER MANUALS　ビューのキャッシュの構成](https://community.denodo.com/docs/html/browse/8.0/jp/vdp/administration/creating_derived_views/advanced_configuration_of_views/configuring_the_cache_of_a_view#configuring-the-cache-of-a-view)
- [Denodo-USER MANUALS　キャッシュモジュール](https://community.denodo.com/docs/html/browse/8.0/jp/vdp/administration/cache_module/cache_module#cache-module)
- [Denodo-USER MANUALS　Fullモード キャッシュ](https://community.denodo.com/docs/html/browse/8.0/jp/vdp/administration/cache_module/cache_modes/full_mode)
- [Denodo-USER MANUALS　Partialモード キャッシュ](https://community.denodo.com/docs/html/browse/8.0/jp/vdp/administration/cache_module/cache_modes/partial_mode)
- [Denodo-USER MANUALS　キャッシュメンテナンスタスク](https://community.denodo.com/docs/html/browse/8.0/jp/vdp/administration/cache_module/cache_maintenance_task/cache_maintenance_task#cache-maintenance-task)

# 1 はじめに
本記事は、データ仮想化製品Denodoについて紹介する連載記事になっております。
これまでの連載通りにDenodo Express環境設定がされていることを前提としていますので、未実施の場合は過去の記事を参照して構築をしてください。

データ仮想化技術やDenodoの概要については、[第1章　データ仮想化とDenodo概要](https://qiita.com/k_tym/items/d2bd2f59cdde269cd423)をご参照ください。
また、データ仮想化環境の構築については、[第2章　データ仮想化環境の構築](https://qiita.com/nomurah/items/23573c3dc59e23850b49)をご参照ください。

# 2 今回の実施内容
Denodoにはデータソースから取得したデータのローカルコピーを、JDBC データベースに保存できるキャッシュエンジンが組み込まれています。このキャッシュを利用することで、繰り返し実行するクエリがデータソースにアクセスすることによる影響を低減し、データ取得を高速化できます。

データ仮想化では、データのコピーは保持せずデータソースのデータを都度取得しメモリ上で処理を行います。このため取得するクエリをOptimizationしたり、キャッシュ機能を活用することで、転送量を減らし応答速度を上げる等様々な工夫がなされます。

実環境ではほぼ導入することになるであろう、キャッシュ機能設定から動作確認までを今回実施します。（初学者向けの簡単な内容ですので気楽にお読みください）

- 大まかな作業の流れ
    - サーバーコンフィグ設定
    - フルキャッシュ設定
    - フルキャッシュ設定後の動作確認
    - パーシャルキャッシュ設定
    - パーシャルキャッシュ設定後の動作確認

# 3 作業実施するうえでの予備知識
### キャッシュ設定
キャッシュの設定には2つの設定ポイントがあり、「サーバーのキャッシュ設定」と「ビューのキャッシュ設定」と呼んでいます。2つとも設定を行うことでキャッシュが利用できる状態となります。

##### サーバーのキャッシュ設定
主にサーバー全般に関わる設定を行います。キャッシュ自体の有効/無効やキャッシュモジュールの選択などが含まれ、管理者権限で設定します。

##### ビューのキャッシュ設定
キャッシュは個別のビューごとに有効/無効設定を行います。また後続のキャッシュモードもこちらで設定します。
ビューへの変更権限があるユーザーで設定を行いますが、本記事(Express)ではデフォルトのadminユーザのみしか存在できないので、権限は気にしなくて構いません。

### キャッシュのモード
- フル : ビューのデータは常に、ソースからではなく、キャッシュデータベースから取得されます。
- パーシャル : ビューの一部のタプルのみがキャッシュに保存されます。

### キャッシュの有効期限(TTL)
Default設定は3600秒ですが、ユーザーで任意の期間設定が可能。本記事では特段設定の変更を行わないので、3600秒で動作します。(有効期限経過後はキャッシュの再ロードが必要です)

:::note info
キャッシュの設定ではキャッシュの有効期限を設定できますが、有効期限経過後はデータ自体が削除されるわけではなく非表示になるだけです。データ自体は残存し続けるため、将来的にクエリ応答性能に影響を与える可能性があります。

不要なキャッシュデータの削除を行うタスクをメンテナンスタスクと呼び、定期的に実行することでデータベースの肥大化を防止します。また、TTL切れキャッシュを発生させないためのサイクリックなキャッシュ取得ジョブの実行側面も含みます。

本記事では触れていませんが、本番環境での動作考慮事項もありますので、実利用に際しては参考URLもご参照ください。
:::

# 4 設定と動作確認
### サーバーコンフィグ設定（サーバーのキャッシュ設定）
- Administration toolを起動し、メニューの[Administration] -> [Server Configuration]をクリック。
![WS000000.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3347009/1065b999-283a-e1f8-1b6f-57c3c83b12f8.jpeg)
- 「Cache」メニューの「General Settings」タブが開くので、 「Cache Status」を「On」に設定。
![WS000001.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3347009/faaaf4bb-259f-1ffa-604b-a99fef5a222e.jpeg)
:::note warn
今回はデフォルトキャッシュDBであるApache Derbyを使用しています。（Connectionタブに既に設定されています）
本番環境でキャッシュを利用する際はDerbyではなく、別のDBを利用することが推奨されています。
:::
### キャッシュ設定前の動作確認
- 左ペインから前回作成したベースビュー「kisyo_data_sapporo」を左クリックし、メニューの「Execute」をクリック。
![WS000002.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3347009/6d88a11e-1969-4256-9f7b-ec61c0bb2da3.jpeg)
- ビュー画面が表示されるので、「Execute」をクリックしてクエリを実行。
![WS000004.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3347009/d71ad00a-6fac-b977-341a-a44ff0d1585c.jpeg)
- 「Query Results」タブが開くので、「Execution Trace」をクリック。
![WS000005.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3347009/8399bedd-48fb-ed25-294d-068cf3183856.jpeg)
- 左ペイン内ツリーの最下にある「kisyo_data_sapporo#0」をクリックすると、右ペイン内の最下の「Route」部がcsvファイルであることが確認できる。（キャッシュを設定していないため、元ファイルからデータ取得と分かる）
![WS000006.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3347009/54d52ed9-9109-2cde-01c4-fba20f607a57.jpeg)
### フルキャッシュ設定
- 画面上部のメニュー「Options」をクリック。
![WS000006-1.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3347009/17c3bd49-f000-bf46-4982-edad2960ae22.jpeg)
- 「Full: The cache will ...」をクリックしてから上方にある「Save」をクリック。
![WS000007.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3347009/f1b81066-3151-7f97-c9ec-f1ea31418a8d.jpeg)
### フルキャッシュ動作確認
- 「Summary」をクリックしてExecution Panelを再度表示し、「Store results in cache」にチェックを入れてから、「Execute」をクリック。
- ![WS000008.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3347009/e4e7ae7a-8f5e-e6cd-4d5d-2400e45d284b.jpeg)
- 「Query Results」タブが表示されるので、当該タブを一旦×で閉じる。閉じると「Execute」パネルに戻る（「Store results in cache」のチェックは自動で外れる）ので、そのまま「Execute」をクリック。
![WS000009.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3347009/475a77df-017e-eae0-dabf-56d31f2727fb.jpeg)
- 左ペイン内ツリーの最下が「JDBC Route」に変わり、「JDBC Route」クリック後、右ペイン内の最下のデータソース表示箇所がキャッシュ設定前とは異なり「DB URI」であることが確認できる。
![WS000009-1.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3347009/62675c38-9dc2-fbc4-4a14-9e8389d0f846.jpeg)

### パーシャルキャッシュ設定
- Administration tool画面左ペイン内「kisyo_data_tokyo」を右クリック -> 「Execute」をクリック。
![WS0000010-a.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3347009/8d3590bd-1cf8-c6a5-dd43-c7d2fd75365c.jpeg)
- 表示された画面左上方「Options」をクリック後、Cache設定タブ内の「Partioal: The cache will...」をチェックし、「save」をクリック。
![WS000010.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3347009/311c9efe-1370-033c-14a0-23521225cf6d.jpeg)
### 6 パーシャルキャッシュ動作確認
- 画面下部にある「Execute」タブ内の「Conditions」を画像の通り("年月日" = '2022/1/4')設定してから「Execute」ボタンをクリック。
![WS000017.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3347009/d42f8818-6275-028c-1703-b19efbc8f043.jpeg)
- キャッシュはされていないので、csvからデータ取得となる。
![WS000018.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3347009/ddab3349-9ab9-234f-6a0c-de76e781f329.jpeg)
- 「Execution」タブへ戻り、「Retrieve all rows」にチェックを入れてから「Execute」ボタンをクリック。
![WS000019.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3347009/410e2b4d-2208-b32a-0e64-1fca549ed151.jpeg)
- まだこの時点ではCSVからデータ取得と表示されているが、背後ではキャッシュに格納している。
![WS000020.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3347009/e8618c0b-2f15-eea6-e45e-fb0c2b27605a.jpeg)
- 再度「Execution」タブへ戻り、「Retrieve all rows」のチェックを外してから「Execute」ボタンをクリック。
![WS000021.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3347009/d0a4058d-d724-5808-f847-72ef93d63e80.jpeg)
- 「Execution Trace」タブを開くと、キャッシュからデータ取得されていることが確認できる。
![WS000022.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3347009/5066c6bd-7390-a5f9-615d-8e2b4e45d6e3.jpeg)
- この状況でフィルタを変更してみる。「Conditions」を画像の通り("年月日" = '2022/9/4')設定してから「Execute」ボタンをクリック。
![WS000023.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3347009/e7bf8372-20d9-d307-1b37-77f500729c06.jpeg)
- キャッシュ設定は部分的（"年月日" = '2022/1/4'）なので、キャッシュにはヒットせず、ローカルファイルから結果を取得。
![WS000024.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3347009/c70b697c-40d6-0fdc-335c-90cc16c02a7f.jpeg)

:::note warn
キャッシュ取得してから3600秒経過後は、同じクエリを実行してもキャッシュから値を取れなくなります。再度キャッシュの取得を行うとキャッシュからクエリ結果応答が返るようになります。
:::

# 5 最後に
今回のデモでは動作確認のみでしたが、設定と動作のイメージは掴めたのではないでしょうか？
実際に適用する場合には、フル/パーシャル、TTL、メンテナンスタスク、などなど検討考慮すべきポイント等が相応に出てきますので、参考URLなども参照しながら試しつつ（楽しみつつ）進められると良いと思います。

次回はDenodo Monitor(Denodo サーバーに関する情報をログに記録)について説明を行う予定です。