(57)【要約】      （修正有）【課題】パフォーマンスが低下するのを抑制することができるデータベース管理システムおよびデータベース管理方法を提供する。【解決手段】データベース管理システム１０は、第１ノード２００と、複数の第２ノード３００−１〜３とを持つ。第１ノード２００は、データを要求するクエリをクライアント端末１００から受信し、受信したクエリを条件に応じて複数の第２ノード３００−１〜３のいずれかに送信する。複数の第２ノード３００−１〜３は、第１ノード２００から受信したクエリに基づく処理を実行してデータを取得し、取得したデータを第１ノード２００に送信する。第１ノード２００は、第２ノード３００−１〜３に保持されるデータの範囲を示す範囲情報を保持し、クエリの検索対象のデータの範囲が範囲情報によって示される範囲にない場合、第２ノードにクエリを転送しない。【選択図】図１
2018206084.tif 000002
【特許請求の範囲】
【請求項１】
データを要求するクエリをクライアント端末から受信し、受信した前記クエリを条件に応じて複数の第２ノードのいずれかに送信する第１ノードと、
前記第１ノードから受信した前記クエリに基づく処理を実行してデータを取得し、取得したデータを前記第１ノードに送信する前記複数の第２ノードと、を備え、
前記第１ノードは、前記第２ノードに保持されるデータの範囲を示す範囲情報を保持し、前記クエリの検索対象のデータの範囲が前記範囲情報によって示される範囲にない場合、前記第２ノードに前記クエリを転送しない
データベース管理システム。
【請求項２】
前記範囲情報は、前記第２ノードに保持されるデータの仮最大値および仮最小値を含み、
前記第２ノードは、予め設定されたビット数ｎを用いて、丸め処理として、前記第２ノードに保持されるデータの最大値の下位ｎビットを繰り上げて前記仮最大値を算出するとともに、前記第２ノードに保持されるデータの最小値の下位ｎビットを切り捨てて前記仮最小値を算出し、前記仮最大値および前記仮最小値を含む更新要求を前記第１ノードに送信し、
前記第１ノードは、前記第２ノードから前記更新要求を受信した場合、前記更新要求に含まれる前記仮最大値および前記仮最小値を前記範囲情報に設定する
請求項１記載のデータベース管理システム。
【請求項３】
前記第２ノードは、前記第２ノードに保持されるデータの前記最大値および前記最小値が更新された場合、前記仮最大値および前記仮最小値を算出し、算出した前記仮最大値および前記仮最小値の少なくとも一方が前回算出した値と同じである場合、前記更新要求を前記第１ノードに送信しない
請求項２記載のデータベース管理システム。
【請求項４】
前記第２ノードは、前記仮最大値および前記仮最小値に加えて、前記丸め処理に用いられた前記ビット数ｎを含む前記更新要求を前記第１ノードに送信する
請求項２または３記載のデータベース管理システム。
【請求項５】
前記第２ノードは、前記仮最大値または前記仮最小値が所定時間ｔ１の間更新されない場合、前記丸め処理に用いられる前記ビット数ｎを減少させる
請求項２から４の何れか一項に記載のデータベース管理システム。
【請求項６】
前記第２ノードは、前記仮最大値または前記仮最小値が所定時間ｔ２の間に所定回数ｋを超えて更新された場合、前記丸め処理に用いられる前記ビット数ｎを増加させる
請求項２から５の何れか一項に記載のデータベース管理システム。
【請求項７】
前記所定時間ｔ１は、前記ビット数ｎを入力とし、前記ビット数ｎが小さいほど大きな値を出力する関数ｆ（ｎ）によって定められる
請求項５記載のデータベース管理システム。
【請求項８】
前記第２ノードは、前記仮最大値または前記仮最小値が所定時間ｔ３の間に更新された事象が連続で、所定回数ｍを超えて続いた場合、前記丸め処理に用いられる前記ビット数ｎを増加させる
請求項２から５の何れか一項に記載のデータベース管理システム。
【請求項９】
前記第１ノードは、
前記複数の第２ノードに保持されるデータのうちの最大値を要求するクエリを受信した場合、前記複数の第２ノードごとに、前記仮最大値に基づいて真の最大値の下限値を算出し、
算出した前記複数の第２ノードごとの前記真の最大値の下限値のうちの最大値と、前記複数の第２ノードのそれぞれについての前記仮最大値とを比較し、
前記仮最大値が前記真の最大値の下限値のうちの最大値以上である前記第２ノードにのみ、前記クエリを転送する
請求項２から８の何れか一項に記載のデータベース管理システム。
【請求項１０】
前記第１ノードは、
前記複数の第２ノードに保持されるデータのうちの最小値を要求するクエリを受信した場合、前記複数の第２ノードごとに、前記仮最小値に基づいて真の最小値の上限値を算出し、
算出した前記複数の第２ノードごとの前記真の最小値の上限値のうちの最小値と、前記複数の第２ノードのそれぞれについての前記仮最小値とを比較し、
前記仮最小値が前記真の最小値の上限値のうちの最小値以下である前記第２ノードにのみ、前記クエリを転送する
請求項２から８の何れか一項に記載のデータベース管理システム。
【請求項１１】
前記第１ノードは、前記第２ノードに保持されるデータの範囲より広い範囲を、第２ノードに保持されるデータの前記範囲情報として保持する
請求項１から１０の何れか一項に記載のデータベース管理システム。
【請求項１２】
第１ノードが、データを要求するクエリをクライアント端末から受信し、受信した前記クエリを条件に応じて第２ノードに送信し、
複数の前記第２ノードが、前記第１ノードから受信した前記クエリに基づく処理を実行してデータを取得し、取得したデータを前記第１ノードに送信し、
前記第１ノードが、前記第２ノードに保持されるデータの範囲を示す範囲情報を保持し、前記クエリの検索対象のデータの範囲が前記範囲情報によって示される範囲にない場合、前記第２ノードに前記クエリを転送しない
データベース管理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の実施形態は、データベース管理システムおよびデータベース管理方法に関する。
【背景技術】
【０００２】
従来、クライアント端末からクエリを受信する上位ノードと、上位ノードによって受信されたクエリに基づく処理を実行してデータを取得する複数の下位ノードとを備える分散型のデータベース管理システムが知られている。下位ノードは、クエリに基づく処理を実行して取得したデータを上位ノードに送信し、上位ノードは、下位ノードから受信したデータを、クエリの送信元であるクライアント端末に送信する。
【０００３】
しかしながら、データベース管理システムにおいては、下位ノードにおける処理の負荷が高くなり、データベース管理システムのパフォーマンスが低下する場合があった。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】国際公開第２０１６／０２７４５１号
【特許文献２】特開２０１５−１７０２３９号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
本発明が解決しようとする課題は、パフォーマンスが低下するのを抑制することができるデータベース管理システムおよびデータベース管理方法を提供することである。
【課題を解決するための手段】
【０００６】
実施形態のデータベース管理システムは、第１ノードと、複数の第２ノードとを持つ。前記第１ノードは、データを要求するクエリをクライアント端末から受信し、受信した前記クエリを条件に応じて複数の第２ノードのいずれかに送信する。前記複数の第２ノードは、前記第１ノードから受信した前記クエリに基づく処理を実行してデータを取得し、取得したデータを前記第１ノードに送信する。前記第１ノードは、前記第２ノードに保持されるデータの範囲を示す範囲情報を保持し、前記クエリの検索対象のデータの範囲が前記範囲情報によって示される範囲にない場合、前記第２ノードに前記クエリを転送しない。
【図面の簡単な説明】
【０００７】
【図１】第１実施形態に係るデータベース管理システム１０の全体構成を示すブロック図。
【図２】第１実施形態に係る上位ノード２００と下位ノード３００の動作を説明するためのブロック図。
【図３】第１実施形態に係る記憶部３５０に記憶されたテーブルＴ１の一例を示す図。
【図４】第１実施形態に係る記憶部２３０に記憶されたテーブルＴ２（インデックス）の一例を示す図。
【図５】第１実施形態に係る記憶部３５０に記憶されたテーブルＴ３（インデックスの更新履歴）の一例を示す図。
【図６】第１実施形態に係るクエリ処理を示すシーケンス図。
【図７】第１実施形態に係るクエリ受付処理の詳細を示すフローチャート。
【図８】第１実施形態に係るインデックス更新処理の詳細を示すフローチャート。
【図９】第１実施形態に係る仮最大値／仮最小値の更新処理の詳細を示すフローチャート。
【図１０】第１実施形態に係る精度無視ビット数ｎの更新処理の詳細を示すフローチャート。
【図１１】第２実施形態に係るクエリ受付処理（拡張版）の詳細を示すフローチャート。
【図１２】第２実施形態に係る最大値取得処理の詳細を示すフローチャート。
【図１３】第２実施形態に係る最小値取得処理の詳細を示すフローチャート。
【発明を実施するための形態】
【０００８】
以下、実施形態のデータベース管理システムおよびデータベース管理方法を、図面を参照して説明する。
【０００９】
（第１実施形態）
図１は、第１実施形態に係るデータベース管理システム１０の全体構成を示すブロック図である。データベース管理システム１０は、データベース管理装置２００（以降、上位ノードと称す）と、複数のデータベース管理装置３００（以降、下位ノードと称す）とを備える。図１において、３つの下位ノード３００−１、３００−２、および３００−３が示されているが、下位ノードの数はこれに限られない。例えば、データベース管理システム１０は、４つ以上の下位ノード３００を備えてもよい。
【００１０】
上位ノード２００は、ネットワークＮＷ１を介して複数の下位ノード３００−１から３００−３に接続されている。ネットワークＮＷ１は、例えば、ＷＡＮ（Wide Area Network）やＬＡＮ（Local Area Network）、インターネット、プロバイダ装置、無線基地局、専用回線などのうち一部または全部を含む。
【００１１】
クライアント端末１００は、ネットワークＮＷ２を介して上位ノード２００に接続されている。ネットワークＮＷ２は、例えば、ＷＡＮやＬＡＮ、インターネット、プロバイダ装置、無線基地局、専用回線などのうち一部または全部を含む。
【００１２】
クライアント端末１００は、ユーザによって用いられ、データを要求するクエリを上位ノード２００に送信するコンピュータである。クライアント端末１００は、デスクトップ型のコンピュータであるが、これに限られない。例えば、クライアント端末１００は、ノート型のコンピュータ、タブレット端末、またはＰＤＡ（Personal Digital Assistant）であってもよい。
【００１３】
上位ノード２００は、クライアント端末１００からクエリを受信するコンピュータである。上位ノード２００は、デスクトップ型のコンピュータであるが、これに限られない。例えば、上位ノード２００は、ノート型のコンピュータ、タブレット端末、またはＰＤＡであってもよい。
【００１４】
下位ノード３００−１、３００−２、および３００−３は、上位ノード２００によって受信されたクエリに基づく処理を実行して、データを取得するコンピュータである。下位ノード３００−１、３００−２、および３００−３は、デスクトップ型のコンピュータであるが、これに限られない。例えば、下位ノード３００−１、３００−２、および３００−３は、ノート型のコンピュータ、タブレット端末、またはＰＤＡであってもよい。
【００１５】
図２は、第１実施形態に係る上位ノード２００と下位ノード３００の動作を説明するためのブロック図である。下位ノード３００−１、３００−２、および３００−３は同様の動作を行うため、図２においては、これらをまとめて下位ノード３００として説明する。
【００１６】
上位ノード２００は、クエリ実行部２１０と、インデックス管理部２２０と、記憶部２３０と、通信部２４０とを備える。クエリ実行部２１０およびインデックス管理部２２０は、ＣＰＵ（Central Processing Unit）等のプロセッサが、記憶部２３０に記憶されたプログラムを実行することで実現される。なお、クエリ実行部２１０およびインデックス管理部２２０は、プロセッサがプログラムを実行するのと同様の機能を有するＬＳＩ（Large Scale Integration）、ＡＳＩＣ（Application Specific Integrated Circuit）、およびＦＰＧＡ（Field-Programmable Gate Array）等のハードウェアにより実現されてもよい。
【００１７】
記憶部２３０は、例えば、ＲＡＭ（Random Access Memory）、ＲＯＭ（Read Only Memory）、ＨＤＤ（Hard Disk Drive）、フラッシュメモリ、またはこれらのうち複数が組み合わされたハイブリッド型記憶装置などにより実現される。また、記憶部２３０の一部または全部は、ＮＡＳ（Network Attached Storage）や外部のストレージサーバなど、上位ノード２００がアクセス可能な外部装置であってもよい。通信部２４０は、例えば、ＮＩＣ（Network Interface Card）によって実現される。
【００１８】
下位ノード３００は、通信部３１０と、クエリ実行部３２０と、テーブル管理部３３０と、インデックス管理部３４０と、記憶部３５０と、インデックス通知判定部３６０とを備える。クエリ実行部３２０、テーブル管理部３３０、インデックス管理部３４０、およびインデックス通知判定部３６０は、ＣＰＵ等のプロセッサが、記憶部３５０に記憶されたプログラムを実行することで実現される。なお、クエリ実行部３２０、テーブル管理部３３０、インデックス管理部３４０、およびインデックス通知判定部３６０は、プロセッサがプログラムを実行するのと同様の機能を有するＬＳＩ、ＡＳＩＣ、およびＦＰＧＡ等のハードウェアにより実現されてもよい。
【００１９】
通信部３１０は、例えば、ＮＩＣによって実現される。記憶部３５０は、例えば、ＲＡＭ、ＲＯＭ、ＨＤＤ、フラッシュメモリ、またはこれらのうち複数が組み合わされたハイブリッド型記憶装置などにより実現される。また、記憶部３５０の一部または全部は、ＮＡＳや外部のストレージサーバなど、下位ノード３００がアクセス可能な外部装置であってもよい。
【００２０】
記憶部３５０には、例えば、不図示のセンサから出力されたデータ（センサ値）が蓄積される。記憶部３５０に記憶されるデータは、センサ値に限られず、どのようなデータであってもよい。なお、記憶部３５０には、テーブル形式でデータが記憶されている。
【００２１】
図３は、第１実施形態に係る記憶部３５０に記憶されたテーブルＴ１の一例を示す図である。テーブルＴ１は、記録時刻とセンサ値とが対応付けられたテーブルである。記録時刻とは、センサ値が記憶部３５０に記録された時刻である。
【００２２】
記憶部３５０は、センサ値が入力される度に、記録時刻とセンサ値とが対応付けられたレコードを、テーブルＴ１に追加する。なお、テーブルＴ１に含まれるレコード数が予め定められた上限値に到達すると、記録時刻が最も古いレコードが、テーブルＴ１から削除される。
【００２３】
一方、上位ノード２００の記憶部２３０には、複数の下位ノード３００それぞれについてのインデックスがテーブル形式で記憶されている。インデックスとは、下位ノード３００に保持されるデータの範囲を示す範囲情報である。
【００２４】
図４は、第１実施形態に係る記憶部２３０に記憶されたテーブルＴ２（インデックス）の一例を示す図である。テーブルＴ２は、ノードＩＤと、仮最大値と、仮最小値と、精度無視ビット数ｎとが対応付けられたテーブルである。
【００２５】
ノードＩＤとは、下位ノード３００を識別するための識別情報である。仮最大値は、下位ノード３００に記憶されているデータの仮の最大値を示す情報である。仮最小値は、下位ノード３００に記憶されているデータの仮の最小値を示す情報である。精度無視ビット数ｎは、仮最大値および仮最小値を算出する際に実行される丸め処理で用いられる値である。詳細は後述するが、丸め処理においては、最大値の下位ｎビットの値を（ｎ＋１）ビット目に繰り上げることにより仮最大値が求められ、最小値の下位ｎビットの値を切り捨てることにより仮最小値が求められる。
【００２６】
まず、クエリ処理について説明する。上位ノード２００がクライアント端末１００からクエリを受信すると、クエリ実行部２１０は、下位ノード３００のインデックスを要求するためのインデックス要求をインデックス管理部２２０に出力する。インデックス管理部２２０は、クエリ実行部２１０から入力されたインデックス要求に基づき、記憶部２３０からテーブルＴ２（インデックス）を読み出す。その後、インデックス管理部２２０は、記憶部２３０から読み出したインデックスを、クエリ実行部２１０に出力する。
【００２７】
クエリ実行部２１０は、インデックス管理部２２０から入力されたインデックスに基づき、複数の下位ノード３００のそれぞれに対して、クエリの検索対象であるデータの範囲の少なくとも一部が、下位ノード３００に保持されるデータの範囲に含まれるか否かを判定する。具体的に、クエリ実行部２１０は、クエリの検索対象であるデータの範囲の少なくとも一部が、インデックスに含まれる仮最小値以上かつ仮最大値以下の範囲に含まれるか否かを判定する。
【００２８】
クエリ実行部２１０は、クエリの検索対象であるデータの範囲の少なくとも一部が、下位ノード３００に保持されるデータの範囲に含まれないと判定した場合、クエリを通信部２４０に出力しない。このため、通信部２４０は、クエリを下位ノード３００に送信しない。これによって、クエリの検索対象のデータを保持しない下位ノード３００がクエリを実行するのを防止できるため、下位ノード３００における処理の負荷を軽減することができる。
【００２９】
一方、クエリ実行部２１０は、クエリの検索対象であるデータの範囲の少なくとも一部が、下位ノード３００に保持されるデータの範囲に含まれると判定した場合、クエリを通信部２４０に出力する。通信部２４０は、クエリ実行部２１０から入力されたクエリを、下位ノード３００に送信する。
【００３０】
下位ノード３００の通信部３１０は、上位ノード２００からクエリを受信すると、受信したクエリをクエリ実行部３２０に出力する。クエリ実行部３２０は、通信部３１０から入力されたクエリを、テーブル管理部３３０およびインデックス管理部３４０に出力する。
【００３１】
テーブル管理部３３０は、クエリ実行部３２０から入力されたクエリに基づき、クエリ結果を記憶部３５０から取得する。具体的に、テーブル管理部３３０は、センサ値がクエリの検索対象の範囲に含まれるレコードを、記憶部３５０に記憶されたテーブルＴ１（図３）から取得する。テーブル管理部３３０は、テーブルＴ１から取得したレコードを、クエリ結果としてクエリ実行部３２０に出力する。
【００３２】
クエリ実行部３２０は、テーブル管理部３３０から入力されたクエリ結果を、通信部３１０に出力する。通信部３１０は、クエリ実行部３２０から入力されたクエリ結果を、上位ノード２００に送信する。
【００３３】
上位ノード２００の通信部２４０は、下位ノード３００から受信したクエリ結果を、クエリ実行部２１０に出力する。クエリ実行部２１０は、クエリの送信先の全ての下位ノード３００からクエリ結果を受信すると、受信した複数のクエリ結果に対してマージ処理を行う。これによって、複数のクエリ結果が統合される。
【００３４】
クエリ実行部２１０は、統合したクエリ結果を通信部２４０に出力する。通信部２４０は、クエリ実行部２１０から入力されたクエリ結果を、クライアント端末１００に送信する。以上が、クエリ処理の一連の流れである。
【００３５】
次に、インデックス更新処理について説明する。記憶部３５０には、不図示のセンサからセンサ値が入力される度に、センサ値を含むレコードがテーブルＴ１に追加される。テーブルＴ１にレコードが追加されることにより、テーブルＴ１におけるセンサ値の最大値または最小値が更新される場合、インデックス管理部３４０は、下位ノード３００のインデックスを更新する。下位ノード３００の記憶部３５０には、下位ノード３００のインデックスの更新履歴がテーブル形式で記憶されている。
【００３６】
図５は、第１実施形態に係る記憶部３５０に記憶されたテーブルＴ３（インデックスの更新履歴）の一例を示す図である。テーブルＴ３は、更新時刻と、仮最大値と、仮最小値と、精度無視ビット数ｎとが対応付けられたテーブルである。更新時刻は、インデックス（仮最大値、仮最小値、および精度無視ビット数ｎ）が更新された時刻を示す情報である。
【００３７】
インデックス管理部３４０は、丸め処理として、記憶部３５０に記憶されるセンサ値の最大値の下位ｎビットを繰り上げて仮最大値を算出するとともに、記憶部３５０に記憶されるセンサ値の最小値の下位ｎビットを切り捨てて仮最小値を算出する。
【００３８】
例えば、センサ値の最大値が１１０１０１０１であり、精度無視ビット数ｎが５ビットである場合、インデックス管理部３４０は、下位５ビットを６ビット目に繰り上げた値（１１１０００００）を仮最大値として算出する。また、例えば、センサ値の最小値が００１１０１００であり、精度無視ビット数ｎが５ビットである場合、インデックス管理部３４０は、下位５ビットを切り捨てた値（００１０００００）を仮最小値として算出する。
【００３９】
その後、インデックス管理部３４０は、算出した仮最大値および仮最小値を、精度無視ビット数ｎとともに、インデックス通知判定部３６０に出力する。インデックス通知判定部３６０は、テーブルＴ３を参照し、インデックス管理部３４０から入力された仮最大値および仮最小値が、前回算出された仮最大値および仮最小値とは異なるか否かを判定する。
【００４０】
インデックス通知判定部３６０は、インデックス管理部３４０から入力された仮最大値および仮最小値が、前回算出された仮最大値および仮最小値とは異なると判定した場合、下位ノード３００のノードＩＤと、今回算出された仮最大値および仮最小値と、精度無視ビット数ｎとを含む更新要求を、通信部３１０に出力する。通信部３１０は、インデックス通知判定部３６０から入力された更新要求を、上位ノード２００に送信する。
【００４１】
上位ノード２００の通信部２４０は、下位ノード３００から更新要求を受信すると、受信した更新要求をインデックス管理部２２０に出力する。インデックス管理部２２０は、通信部２４０から入力された更新要求に含まれるノードＩＤに対応するテーブルＴ１のレコードを、更新要求に含まれる仮最大値、仮最小値、および精度無視ビット数ｎを用いて更新する。これによって、テーブルＴ１が更新される。
【００４２】
テーブルＴ１の更新が完了すると、インデックス管理部２２０は、更新完了通知を通信部２４０に出力する。通信部２４０は、インデックス管理部２２０から入力された更新完了通知を下位ノード３００に送信する。
【００４３】
下位ノード３００の通信部３１０は、上位ノード２００から更新完了通知を受信すると、受信した更新完了通知をインデックス通知判定部３６０に出力する。インデックス通知判定部３６０は、通信部３１０から更新完了通知が入力されると、テーブルＴ３を更新するための更新要求をインデックス管理部３４０に出力する。
【００４４】
インデックス管理部３４０は、インデックス通知判定部３６０から更新要求が入力されると、更新時刻と、今回算出された仮最大値および仮最小値と、精度無視ビット数ｎとを含むレコードを、テーブルＴ３に追加する。これによって、テーブルＴ３が更新される。なお、テーブルＴ３に含まれるレコード数が予め定められた上限値に到達すると、更新時刻が最も古いレコードが、テーブルＴ３から削除される。
【００４５】
図６は、第１実施形態に係るクエリ処理を示すシーケンス図である。図６においては、上位ノード２００が、下位ノード３００−１および３００−２にクエリを送信する例が示されている。
【００４６】
まず、クライアント端末１００は、ユーザの操作に応じて、クエリを上位ノードに送信する（Ｓ１）。上位ノード２００は、クライアント端末１００から受信したクエリの送信先を判定する（Ｓ２）。前述したように、上位ノード２００は、各下位ノード３００のインデックスを、記憶部２３０に記憶されたテーブルＴ２から取得する。その後、上位ノード２００は、クエリの検索対象であるデータの範囲および各下位ノード３００のインデックスに基づいて、クエリの送信先を判定する。図６においては、上位ノード２００が、クエリの送信先が下位ノード３００−１および３００−２であると判定した例が示されている。
【００４７】
上位ノード２００は、クエリを下位ノード３００−１に送信する（Ｓ３）。下位ノード３００−１は、上位ノード２００からクエリを受信すると、クエリ処理を行う（Ｓ４）。前述したように、下位ノード３００−１は、クエリ処理を行うことによって、記憶部３５０に記憶されたテーブルＴ１からクエリ結果（クエリの検索対象のデータ）を取得する。その後、下位ノード３００−１は、クエリ結果を上位ノード２００に送信する（Ｓ５）。
【００４８】
また、上位ノード２００は、クエリを下位ノード３００−２に送信する（Ｓ６）。下位ノード３００−２は、上位ノード２００からクエリを受信すると、クエリ処理を行う（Ｓ７）。前述したように、下位ノード３００−２は、クエリ処理を行うことによって、クエリ結果（クエリの検索対象のデータ）を取得する。その後、下位ノード３００−２は、クエリ結果を上位ノード２００に送信する（Ｓ８）。
【００４９】
上位ノード２００は、下位ノード３００−１から受信したクエリ結果と、下位ノード３００−２から受信したクエリ結果に対してマージ処理を行う（Ｓ９）。これによって、下位ノード３００−１から受信したクエリ結果と、下位ノード３００−２から受信したクエリ結果とが統合される。その後、上位ノード２００は、統合されたクエリ結果を、クライアント端末１００に送信する（Ｓ１０）。
【００５０】
一方、下位ノード３００−１は、仮最大値および仮最小値を更新する必要があるか否かを判定する。下位ノード３００−１は、仮最大値および仮最小値を更新する必要があると判定した場合、下位ノード３００−１のノードＩＤと、仮最大値と、仮最小値と、精度無視ビット数ｎとを含む更新要求を、上位ノードに送信する（Ｓ１１）。
【００５１】
また、下位ノード３００−２は、仮最大値および仮最小値を更新する必要があるか否かを判定する。下位ノード３００−２は、仮最大値および仮最小値を更新する必要があると判定した場合、下位ノード３００−２のノードＩＤと、仮最大値と、仮最小値と、精度無視ビット数ｎとを含む更新要求を、上位ノードに送信する（Ｓ１２）。
【００５２】
上位ノード２００は、下位ノード３００−１から受信した更新要求と、下位ノード３００−２から受信した更新要求とに基づき、記憶部２３０に格納されたテーブルＴ２（インデックス）を更新する（Ｓ１３）。
【００５３】
上位ノード２００は、テーブルＴ２（インデックス）の更新が完了すると、更新完了通知を下位ノード３００−１および３００−２に送信する。下位ノード３００−１は、上位ノード２００から受信した更新完了通知に応じて、記憶部３５０内に記憶されたテーブルＴ３（インデックス更新履歴）を更新する。下位ノード３００−１も同様に、上位ノード２００から受信した更新完了通知に応じて、テーブルＴ３（インデックス更新履歴）を更新する。
【００５４】
なお、Ｔ３（インデックス更新履歴）の更新タイミングは、これに限られない。例えば、下位ノード３００−１および３００−２は、テーブルＴ３（インデックス更新履歴）の更新が完了した後に、更新要求をクライアント端末１００に送信してもよい。
【００５５】
また、インデックス通知判定部３６０は、インデックスの更新頻度を判定する更新頻度判定部３６１を備える。インデックス通知判定部３６０は、更新頻度判定部３６１によって判定されたインデックスの更新頻度に基づいて、精度無視ビット数ｎを増加させるか、減少させるかを判定する。この点についての詳細は後述する。
【００５６】
図７は、第１実施形態に係るクエリ受付処理の詳細を示すフローチャートである。図７に示されるクエリ受付処理は、上位ノード２００がクライアント端末１００からクエリを受信したときに、上位ノード２００によって実行される。
【００５７】
まず、上位ノード２００は、上位ノード２００に接続された複数の下位ノード３００のうち、１つの下位ノード３００の仮最大値と仮最小値を、記憶部２３０に記憶されたテーブルＴ２から取得する（Ｓ２１）。次に、上位ノード２００は、クライアント端末１００から受信したクエリの検索対象のデータの範囲の少なくとも一部が、Ｓ２１において取得された仮最大値から仮最小値の範囲に含まれるか否かを判定する（Ｓ２２）。
【００５８】
上位ノード２００は、クエリの検索対象の範囲の少なくとも一部が、Ｓ２１において取得された仮最大値から仮最小値の範囲に含まれないと判定した場合、後述するＳ２５に処理を進める。一方、上位ノード２００は、クエリの検索対象の範囲の少なくとも一部が、Ｓ２１において取得された仮最大値から仮最小値の範囲に含まれると判定した場合、判定に使用された仮最大値および仮最小値を有する下位ノード３００にクエリを送信する（Ｓ２３）。
【００５９】
上位ノード２００からクエリを受信した下位ノード３００は、クエリ処理を実行することによりクエリ結果を取得する。下位ノード３００は、クエリ結果を上位ノード２００に送信する。その後、上位ノード２００は、下位ノード３００からクエリ結果を受信する（Ｓ２４）。
【００６０】
次に、上位ノード２００は、クエリの対象である全ての下位ノード３００からクエリ結果を受信したか否かを判定する（Ｓ２５）。上位ノード２００は、クエリの対象である全ての下位ノード３００からクエリ結果を受信したと判定しなかった場合、前述のＳ２１に処理を戻す。
【００６１】
一方、上位ノード２００は、クエリの対象である全ての下位ノード３００からクエリ結果を受信したと判定した場合、受信した複数のクエリ結果に対してマージ処理を行う（Ｓ２６）。これによって、複数のクエリ結果が統合される。その後、上位ノード２００は、統合されたクエリ結果を、クライアント端末１００に送信し（Ｓ２７）、本フローチャートによる処理を終了する。
【００６２】
このように、上位ノード２００は、インデックス（仮最大値および仮最小値）を用いて、クエリの検索対象であるデータを保持する下位ノード３００の候補を絞り込むことができる。このため、クエリの検索対象であるデータを保持しない下位ノード３００がクエリ処理を実行してしまうこと（擬陽性）を抑制でき、下位ノード３００のクエリ処理の負荷を軽減することができる。
【００６３】
図８は、第１実施形態に係るインデックス更新処理の詳細を示すフローチャートである。図８に示されるインデックス更新処理は、上位ノード２００によって実行される。
【００６４】
まず、上位ノード２００は、下位ノード３００からインデックスを更新するための更新要求を受信すると（Ｓ３１）、更新要求に含まれるノードＩＤ、仮最大値、仮最小値、および精度無視ビット数ｎを取得する（Ｓ３２）。
【００６５】
次に、上位ノード２００は、更新要求に含まれるノードＩＤに対応するテーブルＴ１のレコードを、更新要求に含まれる仮最大値、仮最小値、および精度無視ビット数ｎを用いて更新する（Ｓ３３）。これによって、テーブルＴ１（インデックス）が更新される。その後、更新完了通知を下位ノード３００に送信し（Ｓ３４）、本フローチャートによる処理を終了する。
【００６６】
図９は、第１実施形態に係る仮最大値／仮最小値の更新処理の詳細を示すフローチャートである。図９に示される仮最大値／仮最小値の更新処理は、記憶部３５０に記憶されたテーブルＴ１にレコードが追加されたときに、下位ノード３００によって実行される。
【００６７】
まず、下位ノード３００は、テーブルＴ１にレコードが追加されたことによって、テーブルＴ１におけるセンサ値の最大値および最小値の少なくとも一方が更新されるか否かを判定する（Ｓ４１）。下位ノード３００は、テーブルＴ１におけるセンサ値の最大値および最小値のいずれも更新されないと判定した場合、本フローチャートによる処理を終了する。
【００６８】
一方、下位ノード３００は、テーブルＴ１におけるセンサ値の最大値および最小値の少なくとも一方が更新されると判定した場合、精度無視ビット数ｎを用いて、仮最大値および仮最小値を算出する（Ｓ４２）。前述したように、下位ノード３００は、テーブルＴ１におけるセンサ値の最大値および最小値に対して丸め処理を行うことにより、仮最大値および仮最小値を算出する。
【００６９】
次に、下位ノード３００は、仮最大値および仮最小値の少なくとも一方が、前回上位ノードに送信した値と異なるか否かを判定する（Ｓ４３）。下位ノード３００は、仮最大値および仮最小値のいずれも、前回上位ノードに送信した値と同じであると判定した場合、本フローチャートによる処理を終了する。
【００７０】
一方、下位ノード３００は、仮最大値および仮最小値の少なくとも一方が、前回上位ノードに送信した値と異なると判定した場合、上位ノード２００の記憶部２３０に記憶されたインデックス（テーブルＴ２）を更新するための更新要求を、上位ノード２００に送信する（Ｓ４４）。
【００７１】
前述したように、上位ノード２００は、下位ノード３００から受信した更新要求に基づき、記憶部２３０に記憶されたインデックス（テーブルＴ２）を更新する。インデックスの更新が完了すると、上位ノード２００は、下位ノード３００に更新完了通知を送信する。
【００７２】
下位ノード３００は、上位ノード２００から更新完了通知を受信すると、Ｓ４２において算出した仮最大値および仮最小値を、記憶部３５０に記憶されたテーブルＴ３（インデックス更新履歴）に更新時刻とともに記録し（Ｓ４５）、本フローチャートによる処理を終了する。
【００７３】
このように、下位ノード３００は、下位ノード３００に保持されるセンサ値の最大値および最小値が更新された場合、仮最大値および仮最小値を算出する。下位ノード３００は、算出した仮最大値および仮最小値の少なくとも一方が前回算出した値（前回上位ノード２００に送信した値）と同じである場合、更新要求を上位ノード２００に送信しない。これによって、上位ノード２００における処理の負荷を軽減することができる。
【００７４】
図１０は、第１実施形態に係る精度無視ビット数ｎの更新処理の詳細を示すフローチャートである。図１０に示される精度無視ビット数ｎの更新処理は、下位ノード３００によって定期的に実行される。
【００７５】
まず、下位ノード３００は、最新の仮最大値または仮最小値の更新時刻を、記憶部３５０に記憶されたテーブルＴ３から取得する（Ｓ５１）。次に、下位ノード３００は、現在時刻とＳ５１において取得した更新時刻との差が所定時間ｔ１を超えるか否かを判定する（Ｓ５２）。
【００７６】
所定時間ｔ１は固定値であるが、これに限られない。例えば、所定時間ｔ１は、精度無視ビット数ｎを入力とし、精度無視ビット数ｎが小さいほど大きな値を出力する関数ｆ（ｎ）によって定められてもよい。例えば、センサ値が３２ビットの場合、ｆ（ｎ）＝（３２−ｎ）×３０［ｓｅｃ］としてよい。これによって、下位ノード３００は、精度無視ビット数ｎに基づいて適切な所定時間ｔ１を設定することができる。
【００７７】
下位ノード３００は、現在時刻とＳ５１において取得した更新時刻との差が所定時間ｔ１を超えると判定した場合、精度無視ビット数ｎから１を減算し（Ｓ５３）、本フローチャートによる処理を終了する。
【００７８】
このように、下位ノード３００は、仮最大値または仮最小値が所定時間ｔ１の間更新されない場合、丸め処理に用いられる精度無視ビット数ｎを減少させる。つまり、下位ノード３００は、インデックスの更新頻度が低い場合には、精度無視ビット数ｎを減少させる。精度無視ビット数ｎを減少させると、仮最大値が真の最大値に近づき、仮最小値が真の最小値に近づくことになる。これによって、クエリの検索対象であるデータを保持しない下位ノード３００がクエリ処理を実行してしまうこと（擬陽性）を抑制でき、下位ノード３００のクエリ処理の負荷を軽減することができる。
【００７９】
一方、Ｓ５２において、下位ノード３００は、現在時刻とＳ５１において取得した更新時刻との差が所定時間ｔ１を超えないと判定した場合、ｋ回前の仮最大値または仮最小値の更新時刻を、記憶部３５０に記憶されたテーブルＴ３から取得する（Ｓ５４）。次に、下位ノード３００は、現在時刻とＳ５４において取得した更新時刻との差が所定時間ｔ２を超えるか否かを判定する（Ｓ５５）。所定時間ｔ２は、固定値であってよい。
【００８０】
下位ノード３００は、現在時刻とＳ５４において取得した更新時刻との差が所定時間ｔ２を超えると判定した場合、精度無視ビット数ｎに１を加算し（Ｓ５６）、本フローチャートによる処理を終了する。
【００８１】
このように、下位ノード３００は、仮最大値または仮最小値が所定時間ｔ２の間に所定回数ｋを超えて更新された場合、丸め処理に用いられる精度無視ビット数ｎを増加させる。つまり、下位ノード３００は、インデックスの更新頻度が高い場合には、精度無視ビット数ｎを増加させる。これによって、上位ノード２００によるインデックス更新処理の負荷を軽減することができる。
【００８２】
一方、Ｓ５５において、下位ノード３００は、現在時刻とＳ５４において取得した更新時刻との差が所定時間ｔ２を超えないと判定した場合、本フローチャートによる処理を終了する。
【００８３】
図１０に示されるフローチャートにおいて、下位ノード３００は、仮最大値または仮最小値が所定時間ｔ２の間に所定回数ｋを超えて更新された場合、丸め処理に用いられる精度無視ビット数ｎを増加させることとしたが、これに限られない。例えば、下位ノード３００は、仮最大値または仮最小値が所定時間ｔ３の間に更新された事象が連続で、所定回数ｍを超えて続いた場合、丸め処理に用いられる精度無視ビット数ｎを増加させてもよい。これによって、下位ノード３００は、インデックスの更新による処理負荷を軽減することができ、データベース管理システム１０のパフォーマンスが低下するのを抑制することができる。
【００８４】
以上説明したように、第１実施形態に係るデータベース管理システム１０は、上位ノード２００と、複数の下位ノード３００とを持つ。上位ノード２００は、データを要求するクエリをクライアント端末１００から受信し、受信したクエリを条件に応じて複数の下位ノード３００のいずれかに送信する。複数の下位ノード３００は、上位ノード２００から受信したクエリに基づく処理を実行してデータを取得し、取得したデータを上位ノード２００に送信する。上位ノード２００は、下位ノード３００に保持されるデータの範囲を示すインデックスを保持し、クエリの検索対象のデータの範囲がインデックスによって示される範囲にない場合、下位ノード３００にクエリを転送しない。これによって、データベース管理システム１０は、下位ノードに保持されるデータの更新頻度が高い場合であっても、データベース管理システムのパフォーマンスが低下するのを抑制することができる。
【００８５】
（第２実施形態）
次に、第２実施形態について説明する。第１実施形態において、上位ノード２００は、検索対象のデータの範囲を指定するクエリを受け付ける処理を行うこととした。これに対し、第２実施形態において、上位ノード２００は、検索対象のデータの範囲を指定するクエリに加えて、最大値または最小値を求めるクエリを受け付けることとする。以下、第２実施形態の詳細を説明する。
【００８６】
図１１は、第２実施形態に係るクエリ受付処理（拡張版）の詳細を示すフローチャートである。図１１に示されるクエリ受付処理は、上位ノード２００がクライアント端末１００からクエリを受信したときに、上位ノード２００によって実行される。
【００８７】
まず、上位ノード２００は、クライアント端末１００から受信したクエリは、センサ値の最大値を求めるクエリか否かを判定する（Ｓ６１）。上位ノード２００は、クライアント端末１００から受信したクエリは、センサ値の最大値を求めるクエリであると判定した場合、後述する最大値取得処理を実行する（Ｓ６２）。
【００８８】
一方、Ｓ６１において、上位ノード２００は、クライアント端末１００から受信したクエリは、センサ値の最大値を求めるクエリでないと判定した場合、クライアント端末１００から受信したクエリは、センサ値の最小値を求めるクエリか否かを判定する（Ｓ６３）。上位ノード２００は、クライアント端末１００から受信したクエリは、センサ値の最小値を求めるクエリであると判定した場合、後述する最小値取得処理を実行する（Ｓ６４）。
【００８９】
一方、Ｓ６３において、上位ノード２００は、クライアント端末１００から受信したクエリは、センサ値の最小値を求めるクエリでないと判定した場合、通常のクエリ受付処理を実行する（Ｓ６５）。ここで、通常のクエリ受付処理とは、図７に示される第１実施形態に係るクエリ受付処理である。
【００９０】
図１２は、第２実施形態に係る最大値取得処理の詳細を示すフローチャートである。図１２に示される最大値取得処理は、図１１におけるＳ６２に対応し、上位ノード２００によって実行される。
【００９１】
まず、上位ノード２００は、上位ノード２００に接続される全ての下位ノード３００の仮最大値を、記憶部２３０に記憶されたテーブルＴ２から取得する（Ｓ７１）。次に、上位ノード２００は、全ての下位ノード３００の真の最大値の下限値を算出する（Ｓ７２）。
【００９２】
Ｓ７２において、精度無視ビット数がｎの場合、上位ノード２００は、仮最大値から１を減算して、２ビット目からｎビット目を０にすることで、真の最大値の下限値を算出する。例えば、仮最大値が１１１０００００であり、精度無視ビット数ｎが５である場合、上位ノード２００は、１１０００００１を真の最大値の下限値として算出する。
【００９３】
次に、上位ノード２００は、複数の下位ノード３００のそれぞれについて算出した複数の真の最大値の下限値のうちの最大値を、最大値Ａとして取得する（Ｓ７３）。上位ノード２００は、上位ノード２００に接続される複数の下位ノード３００のうち、仮最大値が最大値Ａ以上である下位ノード３００に、クエリを送信する（Ｓ７４）。上位ノード２００からクエリを受信した下位ノード３００は、クエリ処理を実行することによりクエリ結果を取得する。下位ノード３００は、クエリ結果を上位ノード２００に送信する。
【００９４】
その後、上位ノード２００は、下位ノード３００からクエリ結果を受信する（Ｓ７５）。上位ノード２００は、下位ノード３００から受信したクエリ結果のうちの最大値を、クライアント端末１００に送信し（Ｓ７６）、本フローチャートによる処理を終了する。
【００９５】
このように、上位ノード２００は、仮最大値と最大値Ａとを比較することで、クエリの検索対象であるセンサ値の最大値を保持する下位ノード３００の候補を絞り込むことができる。このため、センサ値の最大値を保持しない下位ノード３００がクエリ処理を実行してしまうことを防止でき、下位ノード３００のクエリ処理の負荷を軽減することができる。
【００９６】
図１３は、第２実施形態に係る最小値取得処理の詳細を示すフローチャートである。図１３に示される最小値取得処理は、図１１におけるＳ６４に対応し、上位ノード２００によって実行される。
【００９７】
まず、上位ノード２００は、上位ノード２００に接続される全ての下位ノード３００の仮最小値を、記憶部２３０に記憶されたテーブルＴ２から取得する（Ｓ８１）。次に、上位ノード２００は、全ての下位ノード３００の真の最小値の上限値を算出する（Ｓ８２）。
【００９８】
Ｓ８２において、精度無視ビット数がｎの場合、上位ノード２００は、仮最小値の１ビット目からｎビット目を１にすることで、真の最小値の上限値を算出する。例えば、仮最小値が００１０００００であり、精度無視ビット数ｎが５である場合、上位ノード２００は、００１１１１１１を真の最小値の上限値として算出する。
【００９９】
次に、上位ノード２００は、複数の下位ノード３００のそれぞれについて算出した複数の真の最小値の上限値のうちの最小値を、最小値Ｂとして取得する（Ｓ８３）。上位ノード２００は、上位ノード２００に接続される複数の下位ノード３００のうち、仮最小値が最小値Ｂ以下である下位ノード３００に、クエリを送信する（Ｓ８４）。上位ノード２００からクエリを受信した下位ノード３００は、クエリ処理を実行することによりクエリ結果を取得する。下位ノード３００は、クエリ結果を上位ノード２００に送信する。
【０１００】
その後、上位ノード２００は、下位ノード３００からクエリ結果を受信する（Ｓ８５）。上位ノード２００は、下位ノード３００から受信したクエリ結果のうちの最小値を、クライアント端末１００に送信し（Ｓ８６）、本フローチャートによる処理を終了する。
【０１０１】
このように、上位ノード２００は、仮最小値と最小値Ｂとを比較することで、クエリの検索対象であるセンサ値の最小値を保持する下位ノード３００の候補を絞り込むことができる。このため、センサ値の最小値を保持しない下位ノード３００がクエリ処理を実行してしまうことを防止でき、下位ノード３００のクエリ処理の負荷を軽減することができる。
【０１０２】
以上説明したように、第２実施形態において、下位ノード３００は、仮最大値および仮最小値に加えて、丸め処理に用いられた精度無視ビット数ｎを含む更新要求を上位ノード２００に送信する。これによって、上位ノード２００は、更新要求に含まれる精度無視ビット数ｎを用いて、センサ値の真の最大値および真の最小値を算出することができる。
【０１０３】
また、第２実施形態において、上位ノード２００は、複数の下位ノード３００に保持されるデータのうちの最大値を要求するクエリを受信した場合、複数の下位ノード３００ごとに、仮最大値に基づいて真の最大値の下限値を算出する。上位ノード２００は、算出した複数の下位ノード３００ごとの真の最大値の下限値のうちの最大値Ａと、複数の下位ノード３００のそれぞれについての仮最大値とを比較する。上位ノード２００は、仮最大値が最大値Ａ以上である下位ノード３００にのみ、クエリを転送する。これによって、下位ノード３００における処理の負荷を軽減することができる。
【０１０４】
更に、第２実施形態において、上位ノード２００は、複数の下位ノード３００に保持されるデータのうちの最小値を要求するクエリを受信した場合、複数の下位ノード３００ごとに、仮最小値に基づいて真の最小値の上限値を算出する。上位ノード２００は、算出した複数の下位ノード３００ごとの真の最小値の上限値のうちの最小値Ｂと、複数の下位ノード３００のそれぞれについての仮最小値とを比較する。上位ノード２００は、仮最小値が最小値Ｂ以下である下位ノード３００にのみ、クエリを転送する。これによって、下位ノード３００における処理の負荷を軽減することができる。
【０１０５】
以下、実施形態に関する実験結果について述べる。出願人は、下記の条件で実験を行った。
・１００万件の３２ビットのデータ（乱数）を、記憶部３５０に順次入力する。
・記憶部３５０に記憶されるデータ数の上限は１００件であり、古いデータから順に削除される。
【０１０６】
この場合、センサ値の最大値および最小値の更新回数は３９６５６回であった。これに対し、仮最小値の更新回数は２７２７回であり、仮最大値の更新回数は２６６３回であり、これらの合計値は５３９０回であった。このため、本実施形態によれば、最大値または最小値の少なくとも一方が更新される度にインデックスを更新する場合と比較して、インデックスの更新回数を８６．４％削減することができた。また、擬陽性の発生確率は、１．７％であった。このように、本発明によれば、インデックスの更新回数を削減できるとともに、擬陽性の発生を抑制することができる。
【０１０７】
以上説明した少なくともひとつの実施形態によれば、データベース管理システム１０は、上位ノード２００と、複数の下位ノード３００とを持つ。上位ノード２００は、データを要求するクエリをクライアント端末１００から受信し、受信したクエリを条件に応じて複数の下位ノード３００のいずれかに送信する。複数の下位ノード３００は、上位ノード２００から受信したクエリに基づく処理を実行してデータを取得し、取得したデータを上位ノード２００に送信する。上位ノード２００は、下位ノード３００に保持されるデータの範囲を示すインデックスを保持し、クエリの検索対象のデータの範囲がインデックスによって示される範囲にない場合、下位ノード３００にクエリを転送しない。これによって、データベース管理システム１０は、下位ノードに保持されるデータの更新頻度が高い場合であっても、データベース管理システムのパフォーマンスが低下するのを抑制することができる。
【０１０８】
なお、第１実施形態および第２実施形態において、クエリの検索対象のデータはセンサ値であることとしたが、これに限られない。例えば、クエリの検索対象のデータは、大小関係を規定できるデータであれば、文字データであってもよい。また、第１実施形態および第２実施形態において、精度無視ビット数ｎを用いて丸め処理を行うこととしたが、これに限られない。例えば、クエリの検索対象のデータが２次元データである場合、２次元の平面上における領域（例えば、矩形領域）を、インデックスとして用いてもよい。このため、上位ノード２００は、下位ノード３００に保持されるデータの範囲より広い範囲を、下位ノード３００に保持されるデータの範囲情報（インデックス）として保持してよい。
【０１０９】
また、第１実施形態および第２実施形態において、クライアント端末１００、上位ノード２００、および複数の下位ノード３００は、ツリー型のネットワークによって互いに接続されていることとしたが、これに限られない。例えば、クライアント端末１００、上位ノード２００、および複数の下位ノード３００は、メッシュ型のネットワークによって互いに接続されてもよい。
【０１１０】
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれると同様に、特許請求の範囲に記載された発明とその均等の範囲に含まれるものである。
【符号の説明】
【０１１１】
１０…データベース管理システム、１００…クライアント端末、２００…上位ノード、２１０…クエリ実行部、２２０…インデックス管理部、２３０…記憶部、２４０…通信部、３００…下位ノード、３１０…通信部、３２０…クエリ実行部、３３０…テーブル管理部、３４０…インデックス管理部、３５０…記憶部、３６０…インデックス通知判定部、３６１…更新頻度判定部
【図１】
2018206084.tif 000003
【図２】
2018206084.tif 000004
【図３】
2018206084.tif 000005
【図４】
2018206084.tif 000006
【図５】
2018206084.tif 000007
【図６】
2018206084.tif 000008
【図７】
2018206084.tif 000009
【図８】
2018206084.tif 000010
【図９】
2018206084.tif 000011
【図１０】
2018206084.tif 000012
【図１１】
2018206084.tif 000013
【図１２】
2018206084.tif 000014
【図１３】
2018206084.tif 000015