JP6916442B2 - データ処理装置およびデータ処理プログラム - Google Patents

データ処理装置およびデータ処理プログラム Download PDF

Info

Publication number
JP6916442B2
JP6916442B2 JP2017223761A JP2017223761A JP6916442B2 JP 6916442 B2 JP6916442 B2 JP 6916442B2 JP 2017223761 A JP2017223761 A JP 2017223761A JP 2017223761 A JP2017223761 A JP 2017223761A JP 6916442 B2 JP6916442 B2 JP 6916442B2
Authority
JP
Japan
Prior art keywords
data
chunk
bloom filter
bit string
group
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
JP2017223761A
Other languages
English (en)
Other versions
JP2019095986A (ja
Inventor
卓哉 長尾
卓哉 長尾
知寛 宇納
知寛 宇納
敬司 桑山
敬司 桑山
智徳 古田
智徳 古田
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Fujitsu Ltd
Original Assignee
Fujitsu Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Fujitsu Ltd filed Critical Fujitsu Ltd
Priority to JP2017223761A priority Critical patent/JP6916442B2/ja
Priority to EP18203351.4A priority patent/EP3495964B1/en
Priority to US16/174,407 priority patent/US10789228B2/en
Publication of JP2019095986A publication Critical patent/JP2019095986A/ja
Application granted granted Critical
Publication of JP6916442B2 publication Critical patent/JP6916442B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/22Indexing; Data structures therefor; Storage structures
    • G06F16/2228Indexing structures
    • G06F16/2237Vectors, bitmaps or matrices
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0602Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
    • G06F3/0608Saving storage space on storage systems
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/23Updating
    • G06F16/2379Updates performed during online database operations; commit processing
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/24Querying
    • G06F16/245Query processing
    • G06F16/2455Query execution
    • G06F16/24553Query execution of query operations
    • G06F16/24554Unary operations; Data partitioning operations
    • G06F16/24556Aggregation; Duplicate elimination
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/90Details of database functions independent of the retrieved data types
    • G06F16/95Retrieval from the web
    • G06F16/953Querying, e.g. by the use of web search engines
    • G06F16/9535Search customisation based on user profiles and personalisation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0638Organizing or formatting or addressing of data
    • G06F3/064Management of blocks
    • G06F3/0641De-duplication techniques
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0668Interfaces specially adapted for storage systems adopting a particular infrastructure
    • G06F3/067Distributed or networked storage systems, e.g. storage area networks [SAN], network attached storage [NAS]

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Databases & Information Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Data Mining & Analysis (AREA)
  • Human Computer Interaction (AREA)
  • Computational Linguistics (AREA)
  • Software Systems (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Description

本発明は、データ処理装置およびデータ処理プログラムに関する。
ブルームフィルタは、複数のデータ要素を含むデータ集合の中に判定対象のデータが含まれるかを判定するために用いられるデータ構造である。ブルームフィルタは、例えば、ストレージ装置におけるデータの重複排除のために用いられている。この場合、書き込みが要求されたデータと同一のデータがストレージ装置にすでに格納されているかが、ブルームフィルタを用いて判定される。また、ブルームフィルタの応用例として、複数階層のブルームフィルタを有する階層型ブルームフィルタも提案されている。
特開2014−199573号公報 特開2013−3653号公報
ブルームフィルタの一般的な特徴として、管理対象のデータ集合から一部のデータ要素が削除されても、ブルームフィルタのビット数を削減することができない、という特徴がある。近年、ブルームフィルタの管理対象となるデータ集合に含まれるデータ要素数が膨大な数になっており、それに伴ってブルームフィルタのビット数が増大し、ブルームフィルタが占める記憶領域が拡大している。このような背景において、データ集合に含まれるデータ要素数が減少した場合でも、ブルームフィルタのビット数を削減してその記憶領域を縮小することができないことが、大きな課題となっている。
1つの側面では、本発明は、データ要素数の減少に応じてブルームフィルタの記憶領域を縮小可能なデータ処理装置およびデータ処理プログラムを提供することを目的とする。
1つの案では、記憶部と演算部とを有するデータ処理装置が提供される。このデータ処理装置において、記憶部は、複数のデータ要素を含むデータ集合と、データ集合における検索対象のデータ要素の存否判定に用いられ、複数のデータ要素のそれぞれを用いた所定の演算に基づく特定のビットが特定の値に設定された第1のブルームフィルタと、を記憶する。演算部は、データ集合に含まれる一部のデータ要素を削除する場合、第1のブルームフィルタの上位側から、削除されるデータ要素の数に応じたビット数を有する第1のビット列を削除し、検索対象の第1のデータ要素が入力されると、第1のブルームフィルタから第1のビット列が削除された第2のブルームフィルタの上位側に、第1のビット列と同じビット数を有し、かつ、すべてのビット値が特定の値に設定された第2のビット列を一時的に付加し、第2のビット列が付加された第2のブルームフィルタを用いて、一部のデータ要素が削除されたデータ集合における第1のデータ要素の存否を判定する。
また、1つの案では、上記のデータ処理装置と同様の処理をコンピュータに実行させるデータ処理プログラムが提供される。
1つの側面では、データ要素数の減少に応じてブルームフィルタの記憶領域を縮小できる。
第1の実施の形態に係るデータ処理装置の構成例および処理例を示す図である。 第2の実施の形態に係る情報処理システムの構成例を示す図である。 クラウドストレージゲートウェイのハードウェア構成例を示すブロック図である。 クラウドストレージゲートウェイが備える処理機能の構成例を示すブロック図である。 チャンクマップテーブルのデータ構成例を示す図である。 チャンクメタテーブル、参照カウンタテーブルおよびチャンクデータテーブルのデータ構成例を示す図である。 チャンクグループの構成例を示す図である。 削除カウンタテーブルのデータ構成例を示す図である。 階層型ブルームフィルタの構成例を示す図である。 ブルームフィルタを用いた処理例を示す図である。 二分木検索データの構成例を示す図である。 1つのデータ群に対応する各種テーブルと各種カウント値との関係を示す図である。 ガベージコレクションについて説明するための図である。 ブルームフィルタのビット数削減処理の例を示す図である。 ビット数が削減されたブルームフィルタを用いた検索処理の例を示す図である。 ファイル書き込み処理の例を示すフローチャートである。 チャンクデータ登録処理の例を示すフローチャートである。 ファイル更新処理の例を示すフローチャートである。 ファイル削除処理の例を示すフローチャートである。 フィルタ記憶域削減処理の例を示すフローチャートである。 クラウド転送処理の例を示すフローチャートである。
以下、本発明の実施の形態について図面を参照して説明する。
〔第1の実施の形態〕
図1は、第1の実施の形態に係るデータ処理装置の構成例および処理例を示す図である。図1に示すデータ処理装置1は、記憶部1aと演算部1bを有する。なお、記憶部1aは、RAM(Random Access Memory)やHDD(Hard Disk Drive)など、データ処理装置1が備える記憶装置の記憶領域によって実現される。演算部1bは、例えば、データ処理装置1が備えるプロセッサとして実現される。
記憶部1aには、データ集合2とブルームフィルタ3が記憶される。データ集合2は、複数のデータ要素を含む。図1では例として、データ集合2は、i個のデータ要素E1,E2,・・・,Eiを含んでいる。ブルームフィルタ3は、データ集合2における検索対象のデータ要素の存否判定に用いられるデータ構造であり、その実体は複数のビットを有するビット列である。
ブルームフィルタ3においては、データ集合2に含まれるデータ要素E1,E2,・・・,Eiのそれぞれを用いた所定の演算に基づく特定のビットが、特定の値に設定されている。本実施の形態では、例として、特定の値は「1」であるものとする。これにより、例えば、検索対象のデータ要素の存否判定を行う場合には、このデータ要素を用いて上記の所定の演算が行われることで、このデータ要素に対応する特定のビットが算出される。そして、ブルームフィルタ3のビットのうち、算出された特定のビットの値がすべて「1」であれば、このデータ要素がデータ集合2に存在する可能性があると判定される。一方、ブルームフィルタ3における、算出された特定のビットのうちの少なくとも1つが「1」でなければ、このデータ要素はデータ集合2に存在しないと判定される。
演算部1bは、データ集合2に含まれる一部のデータ要素を削除する場合(ステップS1)、次のような処理を実行する。なお、ここでは図1に示すように、データ集合2からデータ要素E11〜E13が削除されるものとする。演算部1bは、ブルームフィルタ3の上位側から、削除されるデータ要素E11〜E13の数に応じたビット数を有するビット列3aを削除する(ステップS2)。これによって、ブルームフィルタ3の記憶領域が縮小される。なお、ブルームフィルタ3から削除されるビット列3aのビット数は、例えば、データ集合2に含まれるデータ要素の数iに対する、削除されるデータ要素の数の割合に応じたビット数とされる。
その後、検索対象のデータ要素ESが入力されると(ステップS3)、演算部1bは、次のような処理を実行する。まず、演算部1bは、ビット列3aが削除された状態のブルームフィルタ3の上位側に、ビット列3aと同じビット数を有し、かつ、すべてのビット値が上記の特定の値(ここでは「1」)に設定されたビット列3bを、一時的に付加する(ステップS4)。そして、演算部1bは、ビット列3bが付加されたブルームフィルタ3を用いて、データ要素E11〜E13が削除されたデータ集合2の中にデータ要素ESが存在するか否かを判定する(ステップS5)。なお、この存否判定では、データ集合2の中にデータ要素ESが存在する可能性があるか否かが判定される。
一般的にブルームフィルタでは、検索対象の集合から要素が削除された場合でも、ブルームフィルタからビットを削除することはできない。これは、ブルームフィルタから、削除された要素に基づく計算によってビット値が「1」となるビットを削除したとしても、そのビットは、他の要素に基づく計算によって「1」となる可能性があるからである。もしそうである場合、ビットの削除後のブルームフィルタを用いた検索処理では、偽陰性が生じてしまう。
これに対して、本実施の形態では、ステップS2でビット列3aが削除されたブルームフィルタ3を検索に用いる際に、ビット列3aと同じビット数を有し、全ビット値が上記の特定の値に設定されたビット列3bが、一時的に付加される。これにより、検索処理における偽陰性の発生が防止される。したがって、データ要素E11〜E13の削除によってデータ集合2のデータ要素数が減少したことに応じて、ブルームフィルタ3の上位からビット列3aを削除することが可能となる。その結果、ブルームフィルタ3の記憶領域を縮小できる。
〔第2の実施の形態〕
図2は、第2の実施の形態に係る情報処理システムの構成例を示す図である。図2に示す情報処理システムは、クラウドストレージゲートウェイ100、NAS(Network Attached Storage)クライアント210およびストレージシステム220を有する。クラウドストレージゲートウェイ100は、ネットワーク231を介してNASクライアント210と接続し、また、ネットワーク232を介してストレージシステム220と接続する。ネットワークは、例えばLAN(Local Area Network)であり、ネットワークは、例えばWAN(Wide Area Network)である。
ストレージシステム220は、ネットワーク232を介してクラウドストレージサービスを提供する。以下の説明では、ストレージシステム220が提供するクラウドストレージサービスによってサービス利用者(ここではクラウドストレージゲートウェイ100)が利用可能な記憶領域を、「クラウドストレージ」と記載する場合がある。
また、本実施の形態では例として、ストレージシステム220は、データがオブジェクト単位で管理されるオブジェクトストレージによって実現される。例えば、ストレージシステム220は、制御サーバ221aとストレージ装置221bとをそれぞれ含むストレージノード221を複数有する、分散型のストレージシステムとして実現される。この場合、各ストレージノード221において、制御サーバ221aはストレージ装置221bに対するアクセスを制御し、ストレージ装置221bの記憶領域によってクラウドストレージの一部が実現される。また、サービス利用者(クラウドストレージゲートウェイ100)からのオブジェクトの格納先とされるストレージノード221は、オブジェクト固有の情報に基づいて決定される。
一方、NASクライアント210は、クラウドストレージゲートウェイ100を、ファイルシステムによって管理される記憶領域を提供するNASサーバとして認識する。この記憶領域とは、ストレージシステム220によって提供されるクラウドストレージによる記憶領域である。そして、NASクライアント210は、例えばNFS(Network File System)プロトコルやCIFS(Common Internet File System)プロトコルにしたがって、クラウドストレージゲートウェイ100に対してファイル単位でデータの読み書きを要求する。すなわち、NASクライアント210は、クラウドストレージゲートウェイ100のNASサーバ機能により、クラウドストレージを大容量の仮想的なネットワークファイルシステムとして利用できるようになる。
NASクライアント210は、例えば、データバックアップのためのバックアップソフトウェアを実行する。これによりNASクライアント210は、NASクライアント210に記憶されたファイル、またはNASクライアント210に接続されたサーバ(例えば業務サーバ)に記憶されたファイルを、NASサーバから提供される記憶領域にバックアップする。
クラウドストレージゲートウェイ100は、図1に示したデータ処理装置1の一例である。クラウドストレージゲートウェイ100は、NASクライアント210とクラウドストレージとの間で転送されるデータを中継する。
例えば、クラウドストレージゲートウェイ100は、NASサーバ機能により、NASクライアント210からファイルの書き込み要求を受信し、書き込みが要求されたファイルを内部にキャッシュする。クラウドストレージゲートウェイ100は、書き込みが要求されたファイルをチャンク単位に分割し、チャンク内の実データ(以下、「チャンクデータ」と記載する)をクラウドストレージに格納する。このとき、合計サイズが一定サイズを超える複数のチャンクデータが「チャンクグループ」としてグループ化され、チャンクグループがオブジェクトとしてクラウドストレージに転送される。
また、クラウドストレージゲートウェイ100は、ファイルをキャッシュする時点で、ファイルをチャンク単位に分割し、同一内容のチャンクデータが重複して保存されないようにする「重複排除」を行う。さらに、チャンクデータは圧縮された状態で格納される。例えば、クラウドストレージサービスでは、格納されるデータ量に応じて課金が行われる場合がある。重複排除やデータ圧縮を行うことで、クラウドストレージに格納されるデータ量を削減し、サービス利用コストを抑制することができる。
図3は、クラウドストレージゲートウェイのハードウェア構成例を示すブロック図である。クラウドストレージゲートウェイ100は、例えば、図3に示すようなコンピュータとして実現される。
クラウドストレージゲートウェイ100は、プロセッサ101によって装置全体が制御されている。プロセッサ101は、例えばCPU(Central Processing Unit)、MPU(Micro Processing Unit)、DSP(Digital Signal Processor)、ASIC(Application Specific Integrated Circuit)、またはPLD(Programmable Logic Device)である。また、プロセッサ101は、CPU、MPU、DSP、ASIC、PLDのうちの2以上の要素の組み合わせであってもよい。
プロセッサ101には、バス108を介して、RAM102と複数の周辺機器が接続されている。
RAM102は、クラウドストレージゲートウェイ100の主記憶装置として使用される。RAM102には、プロセッサ101に実行させるOS(Operating System)プログラムやアプリケーションプログラムの少なくとも一部が一時的に格納される。また、RAM102には、プロセッサ101による処理に必要な各種データが格納される。
バス108に接続されている周辺機器としては、HDD103、グラフィック処理装置104、入力インタフェース105、読み取り装置106および通信インタフェース107がある。
HDD103は、クラウドストレージゲートウェイ100の補助記憶装置として使用される。HDD103には、OSプログラム、アプリケーションプログラム、および各種データが格納される。なお、補助記憶装置としては、SSD(Solid State Drive)などの他の種類の不揮発性記憶装置を使用することもできる。
グラフィック処理装置104には、表示装置104aが接続されている。グラフィック処理装置104は、プロセッサ101からの命令にしたがって、画像を表示装置104aに表示させる。表示装置としては、液晶ディスプレイや有機EL(Electroluminescence)ディスプレイなどがある。
入力インタフェース105には、入力装置105aが接続されている。入力インタフェース105は、入力装置105aから出力される信号をプロセッサ101に送信する。入力装置105aとしては、キーボードやポインティングデバイスなどがある。ポインティングデバイスとしては、マウス、タッチパネル、タブレット、タッチパッド、トラックボールなどがある。
読み取り装置106には、可搬型記録媒体106aが脱着される。読み取り装置106は、可搬型記録媒体106aに記録されたデータを読み取ってプロセッサ101に送信する。可搬型記録媒体106aとしては、光ディスク、光磁気ディスク、半導体メモリなどがある。
通信インタフェース107は、ネットワーク107aを介して他の装置との間でデータの送受信を行う。
以上のようなハードウェア構成によって、クラウドストレージゲートウェイ100の処理機能を実現することができる。なお、NASクライアント210や制御サーバ221aも、図3と同様のハードウェア構成を有するコンピュータとして実現可能である。
図4は、クラウドストレージゲートウェイが備える処理機能の構成例を示すブロック図である。クラウドストレージゲートウェイ100は、記憶部110、NASサービス処理部121、ブルームフィルタ処理部122、二分木検索処理部123、フィルタ記憶域削減処理部124およびクラウド転送処理部125を有する。
なお、記憶部110は、例えば、RAM102やHDD103など、クラウドストレージゲートウェイ100が備える記憶装置の記憶領域として実現される。また、NASサービス処理部121、ブルームフィルタ処理部122、二分木検索処理部123、フィルタ記憶域削減処理部124およびクラウド転送処理部125の処理は、例えば、プロセッサ101が所定のプログラムを実行することで実現される。
記憶部110には、ディレクトリテーブル111、チャンクマップテーブル112、チャンクメタテーブル113、参照カウンタテーブル114、チャンクデータテーブル115、削除カウンタテーブル116、階層型ブルームフィルタ117および二分木検索データ118が記憶される。
ディレクトリテーブル111は、ファイルシステムにおけるディレクトリ構造を表現するための管理テーブルである。ディレクトリテーブル111には、ディレクトリ構造上のディレクトリ(フォルダ)、またはディレクトリ内のファイルに対応するレコードが登録される。各レコードには、ディレクトリまたはファイルを識別するためのinode番号が登録されている。また、例えば、各レコードに親ディレクトリのinode番号が登録されることで、ディレクトリ間、およびディレクトリとファイルとの関係が表現される。
チャンクマップテーブル112およびチャンクメタテーブル113は、ファイルとチャンクデータとの関係や、チャンクデータとチャンクグループとの関係を管理するための管理テーブルである。チャンクグループとは、合計サイズが所定サイズ以上となる複数のチャンクデータを含み、チャンクデータをクラウドストレージ240に転送する際の転送単位となる。チャンクデータテーブル115は、チャンクデータを保持する。すなわち、チャンクデータテーブル115は、ファイルの実データのキャッシュ領域となる。
参照カウンタテーブル114は、各チャンクデータがいくつのチャンクから参照されているかを示す参照カウンタの値を保持する。削除カウンタテーブル116は、管理対象のデータ群ごとに、参照カウンタの値が「0」になった無効のチャンクデータの数を示す削除カウンタの値を保持する。後述するように、データ群とは、所定数を上限とするチャンクグループのチャンクデータを含む。
階層型ブルームフィルタ117および二分木検索データ118は、記憶部110に格納されたチャンクデータの中から、ファイルから分割されたチャンクデータと同一のデータを検索するために用いられる。階層型ブルームフィルタ117は、複数階層のブルームフィルタによって形成される。これらの各ブルームフィルタの実体は、所定ビット数のビット列である。二分木検索データ118は、二分木探索によってチャンクデータを検索するための管理データを含む。
NASサービス処理部121は、NASサーバとしてのインタフェース処理を実行する。すなわち、NASサービス処理部121は、NASクライアント210からのファイルの読み書きや削除の要求を受け付け、要求された内容に応じた処理を実行して、NASクライアント210に応答する。NASサービス処理部121は、例えば、新たなファイルの書き込みが要求された場合、ファイルの実データをチャンク単位に分割し、分割された実データを重複を排除しながら記憶部110に格納する。
ブルームフィルタ処理部122は、NASサービス処理部121からの要求に応じて、記憶部110に格納されたチャンクデータの中から、ファイルから分割されたチャンクデータと同一のデータを検索する処理を、階層型ブルームフィルタ117を用いて実行する。二分木検索処理部123は、NASサービス処理部121からの要求に応じて、ファイルから分割されたチャンクデータと同一のデータを検索する処理を、二分木検索データ118を用いて実行する。
後述するように、ブルームフィルタ処理部122は、条件に合致するチャンクデータを含むデータの集合を絞り込むための検索処理を実行する。また、二分木検索処理部123は、絞り込まれたデータの集合から条件に合致するチャンクデータを正確に特定するための検索処理を実行する。
フィルタ記憶域削減処理部124は、チャンクグループに含まれるチャンクデータのガベージコレクションを実行する。後述するように、ガベージコレクションとは、断片化された有効なチャンクデータをひとまとめの記憶領域に詰め込み直すことで、無効なチャンクデータの記憶領域を解放するための処理である。フィルタ記憶域削減処理部124は、ガベージコレクションの処理結果に基づいて、階層型ブルームフィルタ117に含まれるビット列のビット数を削減して、階層型ブルームフィルタ117の記憶領域を削減する。
クラウド転送処理部125は、NASサービス処理部121による記憶部110へのデータ書き込み処理とは非同期に、記憶部110に書き込まれたチャンクデータをクラウドストレージ240に転送する。前述のように、クラウドストレージ240に対してはオブジェクト単位でデータが転送される。本実施の形態において、クラウド転送処理部125は、1つのチャンクグループに含まれるチャンクデータを用いて1つのチャンクグループオブジェクト131を生成し、クラウドストレージ240に送信する。
図5は、チャンクマップテーブルのデータ構成例を示す図である。チャンクマップテーブル112は、ファイルとチャンクデータとを関連付けるための管理テーブルである。チャンクマップテーブル112には、「ino」「offset」「size」「gno」「gindex」の各項目を有するレコードが登録される。各レコードは、ファイルの実データを分割して生成された1つのチャンクに対応付けられている。
「ino」は、チャンクが含まれるファイルのinode番号を示す。「offset」は、ファイルの実データの先頭からチャンクの先頭までのオフセット量を示す。「ino」と「offset」との組み合わせによって、ファイル内のチャンクが一意に識別される。
「size」は、チャンクのサイズを示す。本実施の形態では例として、チャンクのサイズは可変であるものとする。例えば、NASサービス処理部121は、所定の演算規則にしたがい、同一データを含むチャンクが生成されやすいようにファイルの実データの分割位置を決定する。これにより、可変長のチャンクが生成される。
「gno」は、チャンクに含まれるチャンクデータが属するチャンクグループのグループ番号を示し、「gindex」は、チャンクグループにおけるチャンクデータのインデックス番号を示す。レコードに「ino」および「offset」と「gno」および「gindex」とが登録されることで、チャンクとチャンクデータとが関連付けられる。
図5の例では、inode番号「i1」のファイルは、2つのチャンクに分割されており、inode番号「i2」のファイルは、4つのチャンクに分割されている。また、前者のファイルに含まれる2つのチャンクのデータと、後者のファイルに含まれるチャンクのうち先頭から2つのチャンクのデータとが、グループ番号「g1」のチャンクグループに属するチャンクデータとして記憶部110に格納されている。さらに、後者のファイルに含まれるチャンクのうち先頭から3番目および4番目のチャンクのデータは、グループ番号「g2」のチャンクグループに属するチャンクデータとして記憶部110に格納されている。
図6は、チャンクメタテーブル、参照カウンタテーブルおよびチャンクデータテーブルのデータ構成例を示す図である。
チャンクメタテーブル113は、チャンクデータとチャンクグループとを関連付けるための管理テーブルである。チャンクメタテーブル113には、「gno」「gindex」「offset」「size」「hash」の各項目を有するレコードが登録される。各レコードは、1つのチャンクデータに対応付けられている。
「gno」は、チャンクデータが属するチャンクグループの番号を示す。「gindex」は、チャンクグループにおけるチャンクデータのインデックス番号を示す。「offset」は、チャンクグループの先頭からチャンクデータの先頭までのオフセット量を示す。「gno」と「gindex」との組み合わせにより、1つのチャンクデータが識別され、「gno」と「offset」との組み合わせにより、1つのチャンクデータの格納位置が特定される。「size」は、チャンクデータのサイズを示す。「hash」は、チャンクデータを基に算出されたハッシュ値を示す。
参照カウンタテーブル114には、「gno」「gindex」「refcnt」の各項目を有するレコードが登録される。各レコードは、「gno」「gindex」によって識別される1つのチャンクデータに対応付けられている。「refcnt」は、チャンクデータに対応する参照カウンタの値を示す。参照カウンタの値は、チャンクデータがいくつのチャンクから参照されているかを示す。すなわち、この値は、チャンクデータがいくつのチャンクの間で重複しているかを示す。例えば、ある「gno」「gindex」の値に対応する参照カウンタの値が「2」の場合、同じ「gno」「gindex」の値が登録された2つのレコードが、チャンクマップテーブル112に存在することになる。
チャンクデータテーブル115には、「gno」「gindex」「data」の各項目を有するレコードが登録される。「data」には、「gno」「gindex」によって識別されるチャンクデータが格納される。
図7は、チャンクグループの構成例を示す図である。この図7を用いて、チャンクおよびチャンクグループの生成方法について説明する。
なお、図7に示すテーブル115−1は、チャンクデータテーブル115から、グループ番号「1」のチャンクグループに属するチャンクデータに対応するレコードを抽出したものである。同様に、図7に示すテーブル115−2は、チャンクデータテーブル115から、グループ番号「2」のチャンクグループに属するチャンクデータに対応するレコードを抽出したものである。また、図7に示すテーブル115−3は、チャンクデータテーブル115から、グループ番号「3」のチャンクグループに属するチャンクデータに対応するレコードを抽出したものである。
NASクライアント210から新規のファイルの書き込みや、既存のファイルの更新が要求されると、NASサービス処理部121は、ファイルの実データをチャンク単位に分割する。図7の例では、ファイルの実データが13個のチャンクに分割されたものとする。各チャンクのデータを先頭から順にデータD1〜D13と表す。なお、ここでは説明を簡単にするために、データD1〜D13の内容はすべて異なる(すなわち、重複していない)ものとする。この場合、データD1〜D13にそれぞれ対応するチャンクデータが記憶部110に対して個別に格納される。
各チャンクデータには、グループ番号(gno)と、その番号が示すチャンクグループにおけるインデックス番号(gindex)とが割り当てられる。インデックス番号は、ファイルの分割によって重複していないチャンクデータが生成された順に割り当てられる。また、同じグループ番号に割り当てられたチャンクデータの合計サイズが一定量に達すると、グループ番号がカウントアップされ、次のチャンクデータにはカウントアップ後のグループ番号が割り当てられる。
なお、チャンクデータの合計サイズが一定量に達していないチャンクグループの状態を、次のチャンクデータを受け入れ可能な「アクティブ」と呼ぶことにする。また、チャンクデータの合計サイズが一定量に達したチャンクグループの状態を、次のチャンクデータを受け入れ不可能な「非アクティブ」と呼ぶことにする。
図7の例では、まず、データD1〜D5がグループ番号「1」のチャンクグループに割り当てられる。そして、この段階で、グループ番号「1」のチャンクグループのサイズが一定量に達し、このチャンクグループが非アクティブになったとする。すると、次のデータD6には、新たなグループ番号「2」が割り当てられる。
この後、データD6〜D11が、グループ番号「2」のチャンクグループに割り当てられ、この段階でこのチャンクグループが非アクティブになったとする。すると、次のデータD12には、新たなグループ番号「3」が割り当てられる。図7の例では、データD12,D13がグループ番号「3」のチャンクグループに割り当てられるが、この段階ではこのチャンクグループはアクティブの状態である。この場合、次に生成されるチャンクデータ(図示せず)には、グループ番号「3」とインデックス番号「3」とが割り当てられることになる。
非アクティブ化されたチャンクグループは、ファイル内の実データがクラウドストレージ240に転送される際のデータ単位となる。あるチャンクグループが非アクティブになると、そのチャンクグループから1つのチャンクグループオブジェクト131が、クラウド転送処理部125によって生成される。チャンクグループオブジェクト131においては、例えば、対応するチャンクグループのグループ番号がオブジェクト名として設定され、オブジェクト値として、チャンクグループに含まれる各チャンクデータが設定される。このように生成されたチャンクグループオブジェクト131は、クラウド転送処理部125からクラウドストレージ240に対して転送される。
図8は、削除カウンタテーブルのデータ構成例を示す図である。削除カウンタテーブル116は、削除カウンタの値を保持するための管理テーブルである。削除カウンタテーブル116には、「gno」「delcnt」の各項目を有するレコードが登録される。各レコードは、階層型ブルームフィルタ117における最下層のブルームフィルタがそれぞれ管理するデータ群に対応付けられている。したがって、削除カウンタテーブル116には、最下層のブルームフィルタと同数のレコードが登録される。また、後述するように、各データ群には、最大20のチャンクグループに属するチャンクデータが含まれる。
「gno」には、データ群に属する各チャンクグループのグループ番号が登録される。「delcnt」は、データ群に対応する削除カウンタの値を示す。削除カウンタの値は、データ群に含まれるチャンクデータのうち、参照カウンタの値が「0」になった無効のチャンクデータの数を示す。後述するように、削除カウンタの値は、データ群に属する各チャンクグループについてのガベージコレクションの実行要否を判定するために利用される。
なお、削除カウンタテーブル116のレコードには、「gno」の代わりに、データ群を識別する識別番号が登録されてもよい。
次に、階層型ブルームフィルタ117および二分木検索データ118を用いたチャンクデータの検索処理について説明する。まず、図9、図10を用いて、階層型ブルームフィルタ117を用いたチャンクデータの検索処理について説明する。
図9は、階層型ブルームフィルタの構成例を示す図である。階層型ブルームフィルタ117は、複数階層のブルームフィルタによって形成されている。各ブルームフィルタは、所定ビット数のビット列として形成される。
本実施の形態では、最上位の第1階層には、nビットのブルームフィルタBF1が1つ配置される。ビット数「n」は、検索対象の最大要素数(すなわち、記憶部110のチャンクデータテーブル115に格納されるチャンクデータの最大数)に応じて決定される。
また、1つ下の階層には、上位階層の(1/d)のビット数をそれぞれ有するブルームフィルタが、上位階層のd倍の数だけ配置される。したがって、各階層に含まれるブルームフィルタの合計ビット数をいずれもnビットであり、階層型ブルームフィルタ117は、階層数のn倍のビット数に対応する記憶領域を占有する。
本実施の形態では例として、階層型ブルームフィルタ117の階層数は「3」であるものとする。この場合、図9に示すように、第2階層には、d個のブルームフィルタBF2−1,BF2−2,・・・,BF2−dが配置される。ブルームフィルタBF2−1,BF2−2,・・・,BF2−dは、それぞれ(n/d)ビットのビット列として形成される。
また、第3階層には、第2階層の各ブルームフィルタの下層にそれぞれd個のブルームフィルタが配置される。例えば、ブルームフィルタBF2−1の下層には、d個のブルームフィルタBF3−1−1,BF3−1−2,・・・,BF3−1−dが形成される。ブルームフィルタBF2−2の下層には、d個のブルームフィルタBF3−2−1,BF3−2−2,・・・,BF3−2−dが形成される。ブルームフィルタBF2−dの下層には、d個のブルームフィルタBF3−d−1,BF3−d−2,・・・,BF3−d−dが形成される。したがって、第3階層には、合計でd2個のブルームフィルタが配置される。これらのブルームフィルタはそれぞれ、(n/d2)ビットのビット列として形成される。
なお、図9において、第3階層の各ブルームフィルタは、図1に示したブルームフィルタ3の一例である。
第3階層のブルームフィルタには、検索対象となるデータ群がそれぞれ割り当てられる。例えば、ブルームフィルタBF3−1−1,BF3−1−2,・・・,BF3−1−dには、それぞれデータ群DG1−1,DG1−2,・・・,DG1−dが、検索対象として割り当てられる。ブルームフィルタBF3−2−1,BF3−2−2,・・・,BF3−2−dには、それぞれデータ群DG2−1,DG2−2,・・・,DG2−dが、検索対象として割り当てられる。ブルームフィルタBF3−d−1,BF3−d−2,・・・,BF3−d−dには、それぞれデータ群DGd−1,DGd−2,・・・,DGd−dが、検索対象として割り当てられる。これらのデータ群は、最大で20個のチャンクグループに属するチャンクデータを含む。
また、第2階層のブルームフィルタの検索対象は、そのブルームフィルタの下層に配置された各ブルームフィルタの検索対象となっているすべてのデータ群となる。例えば、ブルームフィルタBF2−1の検索対象は、データ群DG1−1,DG1−2,・・・,DG1−dとなる。また、同様に、第1階層のブルームフィルタBF1の検索対象は、ブルームフィルタBF1の下層に配置されたブルームフィルタBF2−1,BF2−2,・・・,BF2−dの検索対象となっているすべてのデータ群となる。したがって、第1階層のブルームフィルタBF1の検索対象は、チャンクデータテーブル115に格納されたすべてのチャンクデータとなる。
データ群には、非アクティブのチャンクグループが出現するたびに、そのチャンクグループに属するチャンクデータが追加されていく。例えば、非アクティブのチャンクグループが最初に出現すると、そのチャンクグループに属するチャンクデータが、1つ目のデータ群DG1−1に追加される。その後、非アクティブのチャンクグループの出現に伴って、20個のチャンクグループに属するチャンクデータがデータ群DG1−1に追加されていく。そして、21個目の非アクティブのチャンクグループが出現すると、そのチャンクグループに属するチャンクデータは、次のデータ群DG1−2に追加される。このようにして、各データ群には、最大20個のチャンクグループに属するチャンクデータが含められる。
なお、階層型ブルームフィルタ117内のブルームフィルタは、ファイルから分割されたチャンクに含まれるデータと同一のチャンクデータが、データ群に含まれているかを判定するために用いられる。本明細書では、このように重複排除処理全体から見た検索の目的に鑑みて、ブルームフィルタの検索対象となるデータ群に含まれる要素を「チャンクデータ」と記載する。ただし、ブルームフィルタによる直接的な検索対象は、これらのチャンクデータに基づいて算出されたハッシュ値である。すなわち、正確には、ブルームフィルタは、ファイルから分割されたチャンクのデータに基づくハッシュ値と同じハッシュ値が、データ群に含まれているかを判定するために用いられる。したがって、「データ群」に含まれる要素とは、実際にはチャンクデータに基づくハッシュ値である。なお、これらのハッシュ値は、チャンクメタテーブル113の「hash」の項目に登録されている値である。
図10は、ブルームフィルタを用いた処理例を示す図である。ここでは、階層型ブルームフィルタ117に含まれるブルームフィルタのいずれか1つを「ブルームフィルタBF」と表し、ブルームフィルタBFを用いたブルームフィルタ処理部122の処理について説明する。なお、階層型ブルームフィルタ117に含まれるすべてのブルームフィルタの各ビットの値は、検索対象のデータ群に対してチャンクデータが挿入される前の初期状態では、すべて「0」に設定される。
まず、ブルームフィルタBFに検索対象として割り当てられたデータ群DGに対して、チャンクデータCD1を追加する場合について説明する。この場合、ブルームフィルタ処理部122は、まず、チャンクデータCD1に基づくハッシュ値HA1を算出する。そして、ブルームフィルタ処理部122は、ハッシュ値HA1に対してk種類のハッシュ関数をそれぞれ用いた計算を行うことでk個のハッシュ値を算出し、算出されたk個のハッシュ値に基づいて、ビット値を「1」にするk個のビットの位置を特定する。
図10では例として、k=3とし、チャンクデータCD1に基づくハッシュ値HA1からそれぞれ3種類のハッシュ関数を用いて算出された値を、ブルームフィルタBFのビット数で除算した値の余り値を、ビット値を「1」にするビット番号として特定する。図10の例では、ビットB1,B2,B3が特定されたものとすると、ブルームフィルタ処理部122は、ビットB1,B2,B3の各値を「1」に設定する。
次に、あるファイルから分割されたチャンクデータCD2が、データ群DGに含まれているかを判定する場合について説明する。この場合、ブルームフィルタ処理部122は、上記と同様の計算手順で、まず、チャンクデータCD2に基づくハッシュ値HA2を算出する。そして、ブルームフィルタ処理部122は、ハッシュ値HA2からk種類のハッシュ関数を用いてそれぞれ算出されたハッシュ値に基づいて、ビット値が「1」となるビット位置を特定する。図10の例では、ビットB2,B3,B4が特定されたものとすると、ブルームフィルタ処理部122は、ブルームフィルタBFからビットB2,B3,B4の各値を取得する。
ここで、ビットB2,B3,B4のすべての値が「1」の場合、データ群DGにチャンクデータCD2が含まれている可能性がある、と判定される。ただし、データ群DGにチャンクデータCD2が確実に含まれることが保証される訳ではない(偽陽性)。一方、ビットB2,B3,B4の少なくとも1つの値が「0」の場合、データ群DGにはチャンクデータCD2が含まれていない、と判定される。
階層型ブルームフィルタ117では、チャンクデータの追加時においては、最下層のブルームフィルタから上層に対して順に、ブルームフィルタに対するビット値「1」の設定が行われていく。例えば、図9において、データ群DG1−1にチャンクデータを追加する場合、まず、第3階層においてデータ群DG1−1に割り当てられたブルームフィルタBF3−1−1に対して、3つのビット値を「1」に設定する処理が行われる。次に、その上層のブルームフィルタBF2−1に対して、3つのビット値を「1」に設定する処理が行われる。さらに、その上層のブルームフィルタBF1に対して、3つのビット値を「1」に設定する処理が行われる。
一方、チャンクデータの存否判定時においては、最上層のブルームフィルタBF1から下層に対して順に、ビット値が参照されていく。すなわち、まず第1階層のブルームフィルタBF1が参照され、ハッシュ計算により特定された3つのビット値がすべて「1」であるかが判定される。3つのビット値がすべて「1」である場合、次に、第2階層のブルームフィルタBF2−1,BF2−2,・・・,BF2−dのそれぞれについて、ハッシュ計算により特定された3つのビット値がすべて「1」であるかが判定される。
ここで、例えば、ブルームフィルタBF2−1において、特定された3つのビット値がすべて「1」であったとする。この場合、ブルームフィルタBF2−1の下層に属するブルームフィルタBF3−1−1,BF3−1−2,・・・,BF3−1−dのそれぞれについて、ハッシュ計算により特定された3つのビット値がすべて「1」であるかが判定される。
ここで、例えば、ブルームフィルタBF3−1−1において、特定された3つのビット値がすべて「1」であったとする。この場合、ブルームフィルタBF3−1−1に割り当てられたデータ群DG1−1に、所望のチャンクデータが存在する可能性がある、と判定される。
以上のような階層構造を有するブルームフィルタを用いることで、ブルームフィルタ処理部122は、大量の数のチャンクデータの中から、所望のチャンクデータが存在する可能性のあるデータ群を絞り込むことが可能になる。そして、クラウドストレージゲートウェイ100においては、絞り込まれたデータ群の中に所望のチャンクデータが存在するか否かが、二分木検索処理部123によって正確に判定される。
すなわち、二分木検索の実行前に、階層型ブルームフィルタ117を用いたデータ群の絞り込みが行われる。これにより、二分木検索において、ファイルから分割されたチャンクのデータに基づくハッシュ値と、記憶部110に記憶されているチャンクデータに基づくハッシュ値とを比較する回数を減少させることができる。したがって、重複するチャンクデータの有無を判定するための処理効率を向上させることができる。
次に、図11を用いて、二分木検索データ118を用いた二分木検索処理について説明する。図11は、二分木検索データの構成例を示す図である。
二分木検索データ118は、データ群DG1−1,DG1−2,・・・,DG1−d,DG2−1,DG2−2,・・・,DG2−d,・・・,DGd−1,DGd−2,・・・,DGd−dにそれぞれ対応する木構造データBT1−1,BT1−2,・・・,BT1−d,BT2−1,BT2−2,・・・,BT2−d,・・・,BTd−1,BTd−2,・・・,BTd−dを含む。
木構造データは、対応するデータ群に含まれるチャンクデータを検索するための二分探索木の構造を示すデータである。例えば、木構造データは、二分探索木に含まれる各ノードに対応するエントリを有する。各ノードは、エントリに登録された「gno」「gindex」の値によって、データ群に含まれるチャンクデータに対応付けられている。また、ノードに対応するエントリに登録された情報によって、二分探索木の構造が定義される。
前述のように、ブルームフィルタによる直接的な検索対象は、チャンクデータに基づくハッシュ値である。二分木検索においても同様に、木構造データを用いた直接的な検索対象は、チャンクデータに基づくハッシュ値である。このため、二分探索木においては、チャンクデータのハッシュ値に基づいて木構造が定義される。すなわち、あるノードの一方の側の子ノードおよびそのすべての子孫ノードに対応するハッシュ値は、そのノードのハッシュ値より小さい。一方、そのノードの他方の側の子ノードおよびそのすべての子孫ノードに対応するハッシュ値は、そのノードのハッシュ値より大きい。
木構造データは、対応するデータ群にチャンクデータが追加されるたびに更新される。その更新の際には、そのチャンクデータに対応するノードのエントリが追加されるとともに、チャンクデータのハッシュ値に基づいてノード間の関係が再定義される。
ところで、図11では、二分木検索データ118における各木構造データと、階層型ブルームフィルタ117における第3階層の各ブルームフィルタとの対応関係も示している。木構造データBT1−1,BT1−2,・・・,BT1−d,BT2−1,BT2−2,・・・,BT2−d,・・・,BTd−1,BTd−2,・・・,BTd−dは、それぞれブルームフィルタBF3−1−1,BF3−1−2,・・・,BF3−1−d,BF3−2−1,BF3−2−2,・・・,BF3−2−d,・・・,BF3−d−1,BF3−d−2,・・・,BF3−d−dに対応付けられている。
第3階層におけるあるブルームフィルタを用いて、そのブルームフィルタに対応するデータ群に所望のチャンクデータが存在する可能性がある、と判定されたとする。この場合、このブルームフィルタに対応付けられた木構造データを用いて、そのデータ群に所望のチャンクデータが存在するかが、二分木検索処理によって正確に判定される。例えば、ブルームフィルタBF3−1−1を用いて、データ群DG1−1に所望のチャンクデータが存在する可能性がある、と判定されたとする。この場合、ブルームフィルタBF3−1−1に対応付けられた木構造データBT1−1を用いて、データ群DG1−1に所望のチャンクデータが存在するかが判定される。
なお、以上の二分木検索データ118を用いた二分木検索処理は、データ群の中に所望のチャンクデータが存在するかを正確に判定するための方法の一例である。クラウドストレージゲートウェイ100は、これ以外の方法を用いてデータ群におけるチャンクデータの存在の有無を正確に判定してもよい。
次に、フィルタ記憶域削減処理について説明する。
階層型ブルームフィルタ117の各ブルームフィルタのビット数は、検索対象の要素数(すなわち、チャンクデータ数)に応じて決まる。検索対象の要素数が多くなるほど、各ブルームフィルタのビット数も多くなるので、階層型ブルームフィルタ117を構成するデータが記憶部110において占有する記憶領域も大きくなる。例えば、第1階層のブルームフィルタBF1を構成するデータ量は、各ビットの情報を4KBのデータで管理した場合、330MB程度になる場合がある。この場合、3階層の階層型ブルームフィルタ117は、約1GBという大きな記憶領域を占有する。
ここで、一般的なブルームフィルタの性質として、検索対象の要素数が減少した場合でも、ブルームフィルタのビット数を削減できない、という性質がある。これは、ブルームフィルタのビットから、削除された要素に基づく計算によってビット値が「1」となるビットを削除したとしても、そのビットは、他の要素に基づく計算によってビット値が「1」となる可能性があるからである。もしそうである場合、ビットの削除後のブルームフィルタを用いた検索処理では、偽陰性が生じてしまう。
このような問題に対し、本実施の形態のクラウドストレージゲートウェイ100では、次のような方法が用いられる。まず、チャンクグループ単位でガベージコレクションを行うことで、データ群に含まれるチャンクデータ数(要素数)の削減を可能にする。その上で、データ群に対応するブルームフィルタの上位側から、そのデータ群において削減されたチャンクデータ数の割合に応じたビット数を削減する。そして、ビット数が削減されたブルームフィルタを用いて検索を行う際に、削減された分のビットをブルームフィルタの上位側に仮想的に付加した状態で、検索を行う。このとき、付加されたビットにはすべて「1」が設定される。これにより、偽陰性が発生することを防止する。
以下の説明では、図12、図13を用いて、ガベージコレクションを実行するための仕組みについて説明し、その後、図14、図15を用いて、階層型ブルームフィルタ117が占有する記憶領域の削減処理について説明する。
図12は、1つのデータ群に対応する各種テーブルと各種カウント値との関係を示す図である。
図12に示す記憶領域115a,115b,・・・は、チャンクグループごとのチャンクデータの記憶領域を示す。これらの記憶領域115a,115b,・・・は、チャンクデータテーブル115に含まれるチャンクグループごとのレコード群に対応する。記憶領域115a,115b,・・・においては、破線で区切られた1つの領域が、1つのチャンクデータの記憶領域を示す。1つのデータ群(ここでは「データ群DG」とする)には最大20のチャンクグループが属するので、データ群DGには、上記のような記憶領域が最大20個含まれる。
また、図12に示すテーブル113a,113b,・・・は、チャンクメタテーブル113に含まれるチャンクグループごとのレコード群に対応する。テーブル113a,113b,・・・においては、破線で区切られた1つの領域が、1つのチャンクデータに対応するレコードを示す。また、テーブル113a,113b,・・・は、それぞれ記憶領域115a,115b,・・・に関連付けられている。
また、テーブル114a,114b,・・・は、参照カウンタテーブル114に含まれるチャンクグループごとのレコード群に対応する。テーブル114a,114b,・・・においては、破線で区切られた1つの領域に、1つのチャンクデータに対応するレコードに登録された参照カウンタの値(「refcnt」の値)が登録されている。また、テーブル114a,114b,・・・は、それぞれ記憶領域115a,115b,・・・に関連付けられている。
テーブル113a,113b,・・・のレコードに登録された値に基づいて、チャンクデータや参照カウンタの値に対するアクセスが可能となる。例えば、テーブル113aのレコード113a1に登録された「gno」「offset」の値(または「gno」「gindex」の値)によって、記憶領域115aに含まれるチャンクデータ115a1へのアクセスが可能となる。また、レコード113a1に登録された「gno」「gindex」の値によって、テーブル114aのレコード114a1に登録された、対応する参照カウンタの値へのアクセスが可能となる。
前述のように、参照カウンタの値は、対応するチャンクデータがいくつのチャンクから参照されているかを示す。また、ファイルの更新や削除が要求された場合、更新前や削除前においてファイルのチャンクに対応付けられていたチャンクデータの参照カウンタの値が、カウントダウンされることがある。そのようにして参照カウンタの値が「0」になると、対応するチャンクデータは、どのファイルのチャンクからも参照されない無効なチャンクデータとなる。
本実施の形態では、削除カウンタテーブル116において、データ群ごとの削除カウンタの値が保持される。削除カウンタの値は、対応するデータ群に含まれるチャンクデータのうち、参照カウンタの値が「0」であるチャンクデータの数を示す。図12では、データ群DGに対応する削除カウンタ116aが例示されている。削除カウンタ116aの値は、データ群DGに対応するテーブル114a,114b,・・・に登録された参照カウンタの値のうち、「0」の数を示す。
削除カウンタの値が一定数を超えた場合、対応するデータ群には無効なチャンクデータが多く含まれると判断できる。この場合、データ群の記憶領域には、どのチャンクからも参照されていない無駄な領域が多数発生していると判断できる。そこで、フィルタ記憶域削減処理部124は、削除カウンタの値が一定数を超えた場合に、対応するデータ群に属する各チャンクグループを対象としてガベージコレクションを実行する。
図13は、ガベージコレクションについて説明するための図である。前述のように、ガベージコレクションは、断片化された有効なチャンクデータをひとまとめの記憶領域に詰め込み直すことで、無効なチャンクデータの記憶領域を解放するための処理である。
図13では、あるチャンクグループに対応するテーブル113aと、このチャンクグループに対応するチャンクデータの記憶領域115aとを例示している。なお、テーブル113aは、チャンクメタテーブル113の一部である。テーブル113aにおいて、斜線の領域は、参照カウンタの値が「0」であるチャンクデータのレコードを示す。また、記憶領域115aにおいて、斜線の領域は、参照カウンタの値が「0」である無効なチャンクデータの領域を示す。このように、ガベージコレクションの実行前の記憶領域115aでは、無効なチャンクデータが記憶された不要な領域が部分的に発生しており、有効なチャンクデータの領域が断片化している。
フィルタ記憶域削減処理部124は、記憶領域115aに記憶された有効なチャンクデータを、連続した記憶領域115aaに再配置する。これにより、無効なチャンクデータが記憶されていた領域が解放され、その領域に他のデータを格納可能になる。また、フィルタ記憶域削減処理部124は、チャンクデータの再配置に応じて、有効なチャンクデータに対応する、テーブル113a内の登録情報も適宜書き替える。例えば、記憶領域115aaに再配置された各チャンクデータには、先頭から順にインデックス番号(gindex)が降順にあらためて付与され、付与されたインデックス番号によって元のインデックス番号が書き替えられる。また、各チャンクデータに対応するオフセット量(offset)も書き替えられる。図13では、ガベージコレクションによってチャンクグループ内のチャンクデータ数が3/5に減少したとすると、テーブル113aのサイズもテーブル113aaに示すように3/5に減少する。
なお、チャンクマップテーブル112、参照カウンタテーブル114、チャンクデータテーブル115における各チャンクデータに対応するレコードにおいても、インデックス番号が上記のように書き替えられる。
以上のような手順により、データ群に属するチャンクグループについてのガベージコレクションが実行される。これにより、データ群の記憶領域が削減される。次に、フィルタ記憶域削減処理部124は、データ群の削減量に応じて、階層型ブルームフィルタ117に含まれるブルームフィルタのビット数を削減するための処理を実行する。
図14は、ブルームフィルタのビット数削減処理の例を示す図である。図14では例として、データ群DG1−1に対するガベージコレクションが実行され、データ群DG1−1に含まれるチャンクデータ数(要素数)が1/3に減少したものとする。
この場合、フィルタ記憶域削減処理部124は、まず、階層型ブルームフィルタ117における最下層(第3階層)のブルームフィルタのうち、データ群DG1−1を検索対象とするブルームフィルタBF3−1−1のビット数を削減する。この処理では、ブルームフィルタBF3−1−1のうち下位側の1/3のビット列がそのまま残され、上位側の残りの2/3のビット列が記憶部110から削除される。このとき、ブルームフィルタBF3−1−1からmビットのビット列が削除されたものとする。
次に、フィルタ記憶域削減処理部124は、ブルームフィルタBF3−1−1の上位に位置するブルームフィルタBF2−1のビット数を削減する。この処理では、ブルームフィルタBF2−1のうち上位側のmビットのビット列が記憶部110から削除され、残りのビット列がそのまま残される。なお、第2階層に含まれる他のブルームフィルタについては、ビット数の削減は行われない。
さらに、フィルタ記憶域削減処理部124は、ブルームフィルタBF2−1の上位に位置するブルームフィルタBF1のビット数を削減する。この処理では、第2階層と同様に、ブルームフィルタBF1のうち上位側のmビットのビット列が記憶部110から削除され、残りのビット列がそのまま残される。
以上の手順により、データ群の記憶領域の削減に応じて、階層型ブルームフィルタ117の記憶領域も削減される。
図15は、ビット数が削減されたブルームフィルタを用いた検索処理の例を示す図である。この図15では、図14のような手順でブルームフィルタBF1,BF2−1,BF3−1−1のビット数が削減された状態において、チャンクデータCDの検索が要求された場合について示す。
この場合、まず、第1階層のブルームフィルタBF1を用いて、チャンクデータCDの存在の有無が判定される。このとき、ブルームフィルタ処理部122は、ブルームフィルタBF1の上位側に、削除されたビット数と同じmビットのビット列BS1を仮想的に付加する。付加されるビット列BS1では、すべてのビットの値が「1」に設定される。ブルームフィルタ処理部122は、ビット列BS1が付加されたブルームフィルタBF1を用いて、検索対象のデータ群にチャンクデータCDが含まれているかを判定する。
この判定により、検索対象のデータ群にチャンクデータCDが含まれている可能性がある、と判定されると、第2階層のブルームフィルタBF2−1,BF2−2,・・・,BF2−dをそれぞれ用いて、チャンクデータCDの存在の有無が判定される。ここで、ブルームフィルタBF2−1を用いた処理では、ブルームフィルタ処理部122は、ブルームフィルタBF2−1の上位側に、削除されたビット数と同じmビットのビット列BS2を仮想的に付加する。ビット列BS1と同様に、付加されるビット列BS2では、すべてのビットの値が「1」に設定される。ブルームフィルタ処理部122は、ビット列BS2が付加されたブルームフィルタBF2−1を用いて、検索対象のデータ群にチャンクデータCDが含まれているかを判定する。
ここで、ブルームフィルタBF2−1を用いた判定処理により、検索対象のデータ群にチャンクデータCDが含まれている可能性がある、と判定されたとする。この場合、次に、ブルームフィルタBF2−1の下層に配置されたブルームフィルタBF3−1−1,BF3−1−2,・・・,BF3−1−dをそれぞれ用いて、チャンクデータCDの存在の有無が判定される。ここで、ブルームフィルタBF3−1−1を用いた処理では、ブルームフィルタ処理部122は、ブルームフィルタBF3−1−1の上位側に、削除されたビット数と同じmビットのビット列BS3を仮想的に付加する。ビット列BS1,BS2と同様に、付加されるビット列BS3では、すべてのビットの値が「1」に設定される。ブルームフィルタ処理部122は、ビット列BS3が付加されたブルームフィルタBF3−1−1を用いて、検索対象のデータ群にチャンクデータCDが含まれているかを判定する。
以上のように、ビット数が削減されたブルームフィルタを用いて検索を行う際には、削減されたビット数と同じビット数を有し、かつ、全ビットの値が「1」であるビット列が、ブルームフィルタの上位側に仮想的に付加される。そして、このようにビット列が付加されたブルームフィルタを用いて、検索が行われる。これにより、記憶部110に記憶されるブルームフィルタの実データ量を削減して、記憶部110の利用効率を高めながらも、検索処理における決定的な誤判定(すなわち、集合内に存在する要素を存在しないと判定すること)の発生を防止できる。
また、例えば、ガベージコレクションによってデータ群に含まれるチャンクデータ数が減少したにもかかわらず、そのデータ群を検索対象とするブルームフィルタをそのまま用いて検索を行うと、偽陽性の発生確率が上がってしまう可能性がある。しかし、上記のようにチャンクデータ数の減少に応じてブルームフィルタのビット数を削減することで、偽陽性の発生確率を低下させることができる。
次に、クラウドストレージゲートウェイ100の処理について、フローチャートを用いて説明する。
図16は、ファイル書き込み処理の例を示すフローチャートである。NASサービス処理部121は、NASクライアント210から新規のファイルの書き込み要求を受信すると、図16の処理を実行する。
[ステップS11]NASサービス処理部121は、ディレクトリテーブル111に、書き込みが要求されたファイルのディレクトリ情報を示すレコードを追加する。このとき、ファイルにinode番号が付与される。
また、NASサービス処理部121は、書き込みが要求されたファイルの実データを、複数のチャンクに分割する。NASサービス処理部121は、例えば、所定の演算規則にしたがい、同一データを含むチャンクが生成されやすいようにファイルの実データの分割位置を決定する。これにより、可変長のチャンクが生成される。
[ステップS12]NASサービス処理部121は、ファイルの先頭側から順に、処理対象のチャンクを1つ選択する。NASサービス処理部121は、選択されたチャンクのチャンクデータ(以下、「選択されたチャンクデータ」と略称する)に基づくハッシュ値HAを算出する。そして、NASサービス処理部121は、選択されたチャンクデータについての検索処理を、ブルームフィルタ処理部122に要求する。
[ステップS13]ブルームフィルタ処理部122は、階層型ブルームフィルタ117における処理対象の階層、および、その階層のブルームフィルタのうち処理対象のブルームフィルタを特定する。ステップS13の初回実行時には、第1階層およびブルームフィルタBF1が処理対象として特定される。
ブルームフィルタ処理部122は、以下の計算により、処理対象のブルームフィルタにおいてビット値を「1」にする3つのビットを特定する。ブルームフィルタ処理部122は、ステップS12で算出されたハッシュ値HAを基に3種類のハッシュ関数をそれぞれ用いて3つのハッシュ値を算出し、各ハッシュ値を処理対象の階層におけるブルームフィルタの初期ビット数で除算し、その余り値を算出する。これにより3つの余り値が算出され、各余り値がビット値を「1」にするビットの番号を示す。なお、初期ビット数とは、ビット数が削減されていない初期状態のブルームフィルタのビット数を示す。
[ステップS14]ブルームフィルタ処理部122は、処理対象の各ブルームフィルタについて、ビット数が削減されているか(すなわち、階層型ブルームフィルタ117の記憶領域に記憶されているビット値の数が初期ビット数より少ないか)を判定する。ブルームフィルタ処理部122は、処理対象のすべてのブルームフィルタについてビット数が削減されていない場合、ステップS16の処理を実行する。一方、ブルームフィルタ処理部122は、少なくとも1つのブルームフィルタについてビット数が削減されている場合、ステップS15の処理を実行する。
[ステップS15]ブルームフィルタ処理部122は、ステップS14でビット数が削減されていると判定されたブルームフィルタについて、その上位側に削減されたビット数のビット列を仮想的に付加する。このとき、付加されるビット列の全ビットには「1」が設定される。
[ステップS16]ブルームフィルタ処理部122は、処理対象のいずれかのブルームフィルタの管理下にあるデータ群に、選択されたチャンクデータが存在するかを判定する。具体的には、ブルームフィルタ処理部122は、処理対象の各ブルームフィルタについて、ステップS13で特定されたビットの値がすべて「1」であるかを判定する。特定されたビットの値がすべて「1」であるブルームフィルタが少なくとも1つ存在する場合、チャンクデータが存在すると判定される。
ブルームフィルタ処理部122は、チャンクデータが存在すると判定された場合、ステップS17の処理を実行する。一方、ブルームフィルタ処理部122は、チャンクデータが存在しないと判定された場合、その旨をNASサービス処理部121に通知する。この通知に応じて、NASサービス処理部121によってステップS21の処理が実行される。
[ステップS17]ブルームフィルタ処理部122は、現在の処理対象のブルームフィルタが最下層(第3階層)のブルームフィルタかを判定する。ブルームフィルタ処理部122は、処理対象のブルームフィルタが最下層のブルームフィルタでない場合、ステップS18の処理を実行し、最下層のブルームフィルタである場合、ステップS19の処理を実行する。
[ステップS18]ブルームフィルタ処理部122は、処理対象の階層を下層に移行させて、処理をステップS13に進める。ステップS13では、下層のブルームフィルタのうち、ステップS16でチャンクデータが存在すると判定されたブルームフィルタが処理対象となる。
[ステップS19]ブルームフィルタ処理部122は、ステップS16でチャンクデータが存在すると判定されたブルームフィルタを二分木検索処理部123に通知して、二分木検索処理の実行を要求する。二分木検索処理部123は、通知された各ブルームフィルタに対応付けられた木構造データを用いて、二分木検索を実行する。この二分木検索では、ステップS12で算出されたハッシュ値HAが、木構造データに基づく木構造の各ノードに対応するハッシュ値と一致するかが判定される。
二分木検索処理部123は、いずれかの木構造データを用いた二分木検索の結果、選択されたチャンクデータが存在すると判定された場合、ステップS20の処理を実行する。一方、二分木検索処理部123は、すべての木構造データを用いた二分木検索の結果、選択されたチャンクデータが存在しないと判定された場合、その旨をNASサービス処理部121に通知する。この通知に応じて、NASサービス処理部121によってステップS21の処理が実行される。
[ステップS20]ステップS20の処理が実行されるケースでは、選択されたチャンクデータと同一のチャンクデータが、チャンクデータテーブル115にすでに登録されている。この場合、参照カウンタの値のカウントアップが行われるが、選択されたチャンクデータはチャンクデータテーブル115に登録されずに削除される。これにより、同一のチャンクデータが記憶部110に重複して格納されることが回避される。
具体的には、ブルームフィルタ処理部122は、ステップS19での二分木検索によってデータ群から検索されたチャンクデータを識別するグループ番号(gno)およびインデックス番号(gindex)を、NASサービス処理部121に通知する。NASサービス処理部121は、参照カウンタテーブル114のレコードのうち、通知されたグループ番号およびインデックス番号が登録されたレコードの「refcnt」の項目を参照し、この項目に登録された参照カウンタの値をカウントアップする。
また、NASサービス処理部121は、チャンクマップテーブル112に、ステップS12で選択されたチャンクに対応するレコードを登録する。このレコードには、上記のグループ番号およびインデックス番号が登録され、これによってファイルのチャンクと記憶部110のチャンクデータテーブル115内のチャンクデータとが関連付けられる。
[ステップS21]このステップS21の処理が実行されるケースでは、選択されたチャンクデータと同一のチャンクデータが、記憶部110のチャンクデータテーブル115に記憶されていない。そこで、NASサービス処理部121は、選択されたチャンクデータを記憶部110に登録するチャンクデータ登録処理を実行する。この処理内容については後の図17において説明する。
[ステップS22]NASサービス処理部121は、ファイルから分割されたすべてのチャンクについてステップS12〜S21の処理が実行されたかを判定する。NASサービス処理部121は、処理を未実行のチャンクがある場合、ステップS12に進み、次のチャンクを処理対象として選択して処理を継続する。一方、NASサービス処理部121は、すべてのチャンクについて処理済みの場合、ファイル書き込み処理を終了する。
図17は、チャンクデータ登録処理の例を示すフローチャートである。この図17の処理は、図16のステップS21の処理に対応する。
[ステップS31]NASサービス処理部121は、チャンクデータテーブル115を参照し、最後尾のレコードに登録されたグループ番号(すなわち、現時点で最大のグループ番号)を取得する。
[ステップS32]NASサービス処理部121は、ステップS31で取得されたグループ番号のチャンクグループに含まれるチャンクデータの合計サイズが、所定値以上であるかを判定する。NASサービス処理部121は、合計サイズが所定値以上である場合、ステップS33の処理を実行し、合計サイズが所定値未満である場合、ステップS34の処理を実行する。
[ステップS33]NASサービス処理部121は、ステップS32で取得されたグループ番号をカウントアップすることで、新たなグループ番号を生成する。
[ステップS34]NASサービス処理部121は、チャンクマップテーブル112、チャンクメタテーブル113および参照カウンタテーブル114に対してレコードを追加する。
ステップS32でYesと判定された場合、追加される各レコードの「gno」の項目には、ステップS33で生成されたグループ番号が登録され、各レコードの「gindex」の項目には、先頭のチャンクを示すインデックス番号が登録される。一方、ステップS32でNoと判定された場合、追加される各レコードの「gno」の項目には、ステップS31で取得されたグループ番号が登録される。また、追加される各レコードの「gindex」の項目には、このグループ番号に対応するチャンクグループに含まれている最後尾のチャンクデータの次の順番を示すインデックス番号が登録される。
また、チャンクマップテーブル112に追加されるレコードにおいては、「ino」の項目に、書き込みが要求されたファイルのinode番号が登録され、「offset」「size」の項目に、処理対象のチャンクについての情報が登録される。チャンクメタテーブル113に追加されるレコードにおいては、「hash」の項目に、図16のステップS12で算出されたハッシュ値HAが登録される。参照カウンタテーブル114に追加されるレコードにおいては、「refcnt」の項目に、参照カウンタの初期値である「1」が登録される。
[ステップS35]NASサービス処理部121は、チャンクデータテーブル115に対してレコードを追加する。このとき、追加されるレコードにおいては、「gno」「gindex」の各項目に、ステップS34で同名の項目に記録された情報と同じ情報が登録され、「data」の項目に、チャンクデータが圧縮された状態で格納される。
[ステップS36]NASサービス処理部121は、ステップS34,S35でレコードに記録したグループ番号のチャンクグループに含まれるチャンクデータの合計サイズが、所定値以上であるかを判定する。NASサービス処理部121は、合計サイズが所定値以上である場合、ステップS37の処理を実行し、合計サイズが所定値未満である場合、チャンクデータ登録処理を終了する。
[ステップS37]NASサービス処理部121は、ステップS34,S35でレコードに記録したグループ番号のチャンクグループを非アクティブ化して、このチャンクグループをクラウド転送処理部125による転送対象に設定する。例えば、このチャンクグループを示すグループ番号が図示しない転送キューに登録されることで、このチャンクグループが転送対象に設定される。
図18は、ファイル更新処理の例を示すフローチャートである。NASサービス処理部121は、NASクライアント210から新規のファイルの書き込み要求を受信すると、図18の処理を実行する。
[ステップS41]NASサービス処理部121は、チャンクメタテーブル113に登録された、更新前のファイル(旧ファイル)に対応するレコードの位置を、RAM102に保存する。
[ステップS42]NASサービス処理部121は、NASクライアント210から受信した更新後のファイルの実データを処理対象として、図16の処理を実行する。これにより、更新後のファイルの実データがチャンク単位に分割され、各チャンクのデータに基づいてチャンクメタテーブル113、参照カウンタテーブル114およびチャンクデータテーブル115が適宜更新される。
[ステップS43]NASサービス処理部121は、ステップS41で保存された位置が示すレコードの内容に基づいて、旧ファイルの先頭側から順に、処理対象のチャンクを1つ選択する。
[ステップS44]NASサービス処理部121は、参照カウンタテーブル114に登録された、処理対象のチャンクのチャンクデータに対応するレコードを参照し、「refcnt」の項目に登録された参照カウンタの値をカウントダウンする。また、NASサービス処理部121は、チャンクマップテーブル112から、ステップS43で選択されたチャンクに対応するレコードを削除する。
[ステップS45]NASサービス処理部121は、ステップS44でカウントダウンした後の参照カウンタの値が「0」の場合、ステップS46の処理を実行し、この参照カウンタの値が「0」より大きい場合、ステップS47の処理を実行する。
[ステップS46]NASサービス処理部121は、削除カウンタテーブル116を参照し、処理対象のチャンクのチャンクデータが属するデータ群に対応する削除カウンタの値をカウントアップする。
[ステップS47]NASサービス処理部121は、旧ファイルから分割されたすべてのチャンクについてステップS43〜S46の処理が実行されたかを判定する。NASサービス処理部121は、処理を未実行のチャンクがある場合、ステップS43に進み、次のチャンクを処理対象として選択して処理を継続する。一方、NASサービス処理部121は、すべてのチャンクについて処理済みの場合、ファイル更新処理を終了する。
図19は、ファイル削除処理の例を示すフローチャートである。NASサービス処理部121は、NASクライアント210からファイルの削除要求を受信すると、図19の処理を実行する。
[ステップS51]NASサービス処理部121は、チャンクマップテーブル112に基づいて、削除が要求されたファイルの頭から順に、処理対象のチャンクを1つ選択する。
[ステップS52]NASサービス処理部121は、参照カウンタテーブル114に登録された、処理対象のチャンクのチャンクデータに対応するレコードを参照し、「refcnt」の項目に登録された参照カウンタの値をカウントダウンする。また、NASサービス処理部121は、チャンクマップテーブル112から、ステップS51で選択されたチャンクに対応するレコードを削除する。
[ステップS53]NASサービス処理部121は、ステップS52でカウントダウンした後の参照カウンタの値が「0」の場合、ステップS54の処理を実行し、この参照カウンタの値が「0」より大きい場合、ステップS55の処理を実行する。
[ステップS54]NASサービス処理部121は、削除カウンタテーブル116を参照し、処理対象のチャンクのチャンクデータが属するデータ群に対応する削除カウンタの値をカウントアップする。
[ステップS55]NASサービス処理部121は、ファイルから分割されたすべてのチャンクについてステップS51〜S54の処理が実行されたかを判定する。NASサービス処理部121は、処理を未実行のチャンクがある場合、ステップS51に進み、次のチャンクを処理対象として選択して処理を継続する。一方、NASサービス処理部121は、すべてのチャンクについて処理済みの場合、ディレクトリテーブル111から削除対象のファイルのレコードを削除し、ファイル削除処理を終了する。
図20は、フィルタ記憶域削減処理の例を示すフローチャートである。フィルタ記憶域削減処理部124は、削除カウンタテーブル116のレコードを順に参照し、レコードを1つ参照するたびに図20の処理を実行する。なお、図20の処理は、図16〜図19の各処理とは非同期で実行される。
[ステップS61]フィルタ記憶域削減処理部124は、参照先のレコードの「delcnt」の項目から削除カウンタの値を取得する。また、フィルタ記憶域削減処理部124は、参照先のレコードに対応するチャンクデータが属するデータ群を特定し、チャンクデータテーブル115に基づき、特定されたデータ群に属する各チャンクグループに含まれるチャンクデータの合計数を算出する。フィルタ記憶域削減処理部124は、取得された削除カウンタの値が、算出されたチャンクデータの合計数の20%に相当する値を超えたかを判定する。フィルタ記憶域削減処理部124は、削除カウンタの値がチャンクデータの合計数の20%に相当する値を超えている場合、ステップS62の処理を実行し、超えていない場合、参照先のレコードについてのフィルタ記憶域削減処理を終了する。
[ステップS62]フィルタ記憶域削減処理部124は、ステップS61で特定されたデータ群に属する各チャンクグループについて、ガベージコレクションを実行する。
[ステップS63]フィルタ記憶域削減処理部124は、ステップS62のガベージコレクションによって有効なチャンクデータがなくなったチャンクグループがある場合、このチャンクグループをクラウド転送処理部125による転送対象に設定する。例えば、このチャンクグループを示すグループ番号が図示しない転送キューに登録されることで、このチャンクグループが転送対象に設定される。
[ステップS64]フィルタ記憶域削減処理部124は、ステップS62のガベージコレクションによるチャンクデータ数の減少率Rを算出する。この減少率Rとは、ステップS61で特定されたデータ群に含まれるチャンクデータの総数に対して、ガベージコレクションによって削除された無効なチャンクデータの数の割合を示す。
また、フィルタ記憶域削減処理部124は、ステップS61で特定されたデータ群に割り当てられたブルームフィルタを特定する。これにより、最下層(第3階層)のブルームフィルタの中から1つのブルームフィルタが特定される。フィルタ記憶域削減処理部124は、特定されたブルームフィルタのビット数の上位側のビット列を削除することで、このブルームフィルタのビット数を(1−R)倍に削減する。
[ステップS65]フィルタ記憶域削減処理部124は、階層型ブルームフィルタ117における処理対象のブルームフィルタを、現在の処理対象のブルームフィルタの上層に配置されたブルームフィルタに移行させる。
[ステップS66]フィルタ記憶域削減処理部124は、処理対象のブルームフィルタの上位側から、ステップS64で削除されたビット列と同じビット数のビット列を削除する。
[ステップS67]フィルタ記憶域削減処理部124は、処理対象のブルームフィルタが最上層(第1階層)のブルームフィルタでない場合、ステップS65の処理を実行し、最上層のブルームフィルタである場合、参照先のレコードについてのフィルタ記憶域削減処理を終了する。
図21は、クラウド転送処理の例を示すフローチャートである。なお、クラウド転送処理部125による図21の処理は、図16〜図19に示したNASサービス処理部121の処理とは非同期で実行される。
[ステップS71]クラウド転送処理部125は、チャンクデータテーブル115に登録されたチャンクグループの中から、転送対象に設定されたチャンクグループを特定する。例えば、転送対象のチャンクグループを示すグループ番号が転送キューに登録されている場合、クラウド転送処理部125は、この転送キューからグループ番号を1つ抽出する。
このステップS71で特定されるチャンクグループとしては、図17のステップS37で転送対象に設定されたチャンクグループがある。このようなチャンクグループが特定されるケースとしては、新規のファイルの書き込み要求に応じて図16の処理が実行されたケースと、ファイルの更新要求に応じて図18の処理が実行されたケースとがある。ここで、前者を「第1のケース」、後者を「第2のケース」とする。また、ステップS71で特定されるチャンクグループとしては、図20のステップS63で転送対象に設定されたチャンクグループもある。このケースを「第3のケース」とする。
[ステップS72]クラウド転送処理部125は、チャンクグループオブジェクト131を生成する。例えば、チャンクグループオブジェクト131では、オブジェクト名として、ステップS71で特定されたチャンクグループのグループ名が設定される。また、上記の第1のケースおよび第2のケースでは、チャンクデータテーブル115から、転送対象のチャンクグループに含まれる各チャンクデータが、チャンクグループオブジェクト131のオブジェクト値として設定される。第1のケースでは、生成されるチャンクグループオブジェクト131は、クラウドストレージ240に対して新規のチャンクグループに含まれるチャンクデータの格納を要求するための情報となる。また、第2のケースでは、生成されるチャンクグループオブジェクト131は、クラウドストレージ240に対して既存のチャンクグループに含まれるチャンクデータの更新を要求するための情報となる。一方、第3のケースでは、生成されるチャンクグループオブジェクト131は、クラウドストレージ240に対して既存のチャンクグループに含まれるチャンクデータの削除を要求するための情報となる。
[ステップS73]クラウド転送処理部125は、生成されたチャンクグループオブジェクト131をクラウドストレージ240に対して送信する。
なお、上記の各実施の形態に示した装置(データ処理装置1、クラウドストレージゲートウェイ100)の処理機能は、コンピュータによって実現することができる。その場合、各装置が有すべき機能の処理内容を記述したプログラムが提供され、そのプログラムをコンピュータで実行することにより、上記処理機能がコンピュータ上で実現される。処理内容を記述したプログラムは、コンピュータで読み取り可能な記録媒体に記録しておくことができる。コンピュータで読み取り可能な記録媒体としては、磁気記憶装置、光ディスク、光磁気記録媒体、半導体メモリなどがある。磁気記憶装置には、ハードディスク装置(HDD)、フレキシブルディスク(FD)、磁気テープなどがある。光ディスクには、CD(Compact Disc)、DVD(Digital Versatile Disc)、ブルーレイディスク(BD)などがある。光磁気記録媒体には、MO(Magneto-Optical disk)などがある。
プログラムを流通させる場合には、例えば、そのプログラムが記録されたDVD、CD−ROMなどの可搬型記録媒体が販売される。また、プログラムをサーバコンピュータの記憶装置に格納しておき、ネットワークを介して、サーバコンピュータから他のコンピュータにそのプログラムを転送することもできる。
プログラムを実行するコンピュータは、例えば、可搬型記録媒体に記録されたプログラムまたはサーバコンピュータから転送されたプログラムを、自己の記憶装置に格納する。そして、コンピュータは、自己の記憶装置からプログラムを読み取り、プログラムにしたがった処理を実行する。なお、コンピュータは、可搬型記録媒体から直接プログラムを読み取り、そのプログラムにしたがった処理を実行することもできる。また、コンピュータは、ネットワークを介して接続されたサーバコンピュータからプログラムが転送されるごとに、逐次、受け取ったプログラムにしたがった処理を実行することもできる。
以上の各実施の形態に関し、さらに以下の付記を開示する。
(付記1) 複数のデータ要素を含むデータ集合と、前記データ集合における検索対象のデータ要素の存否判定に用いられ、前記複数のデータ要素のそれぞれを用いた所定の演算に基づく特定のビットが特定の値に設定された第1のブルームフィルタと、を記憶する記憶部と、
前記データ集合に含まれる一部のデータ要素を削除する場合、前記第1のブルームフィルタの上位側から、削除されるデータ要素の数に応じたビット数を有する第1のビット列を削除し、
検索対象の第1のデータ要素が入力されると、前記第1のブルームフィルタから前記第1のビット列が削除された第2のブルームフィルタの上位側に、前記第1のビット列と同じビット数を有し、かつ、すべてのビット値が前記特定の値に設定された第2のビット列を一時的に付加し、前記第2のビット列が付加された前記第2のブルームフィルタを用いて、前記一部のデータ要素が削除された前記データ集合における前記第1のデータ要素の存否を判定する、演算部と、
を有するデータ処理装置。
(付記2) 前記第1のビット列は、前記データ集合に含まれるデータ要素の数に対する、前記削除されるデータ要素の数の割合に応じたビット数を有する、
付記1に記載のデータ処理装置。
(付記3) 前記記憶部は、第1のデータ集合における検索対象のデータ要素の存否判定に用いられる第1階層ブルームフィルタと、前記第1のデータ集合が分割された複数の第2のデータ集合のそれぞれにおける検索対象のデータ要素の存否判定に用いられる複数の第2階層ブルームフィルタと、を記憶し、前記第1のブルームフィルタは、前記複数の第2階層ブルームフィルタのうち一の第2階層ブルームフィルタであり、前記データ集合は、前記複数の第2のデータ集合のうち前記一の第2階層ブルームフィルタに対応する一の第2のデータ集合であり、
前記演算部は、さらに、
前記データ集合に含まれる前記一部のデータ要素を削除する場合、前記第1階層ブルームフィルタの上位側から前記第1のビット列と同じビット数を有する第3のビット列を削除し、
前記第1のデータ要素が入力されると、前記第1階層ブルームフィルタの上位側から前記第3のビット列が削除された第3のブルームフィルタの上位側に、前記第2のビット列と同一の第4のビット列を一時的に付加し、前記第4のビット列が付加された前記第3のブルームフィルタを用いて、前記一部のデータ要素が削除された前記第1のデータ集合における前記第1のデータ要素の存否を判定する、
付記1または2に記載のデータ処理装置。
(付記4) 前記記憶部は、前記データ集合の記憶領域を含む書き込みデータ記憶領域を有し、
前記演算部は、さらに、
外部装置から書き込みが要求された複数の書き込みデータ要素を、重複を排除して前記書き込みデータ記憶領域に格納するとともに、少なくとも前記複数のデータ要素のそれぞれと、前記複数の書き込みデータ要素との対応関係を示す情報を、前記記憶部に記録し、
前記複数のデータ要素のそれぞれについて、前記複数の書き込みデータ要素のうちのいくつと対応するかを示す第1のカウント値を、前記記憶部に記録し、
前記複数の書き込みデータ要素の1つであって、前記複数のデータ要素のうち一のデータ要素に対応する一の書き込みデータ要素についての更新または削除が前記外部装置から要求されると、前記一のデータ要素に対応する前記第1のカウント値を減少させ、
前記複数のデータ要素のうち、前記第1のカウント値が0であるデータ要素の数を示す第2のカウント値を、前記記憶部に記録し、
前記第2のカウント値が所定の閾値を超えた場合に、前記複数のデータ要素の中から、前記一部のデータ要素として前記第1のカウント値が0であるデータ要素を削除する、
付記1乃至3のいずれか1つに記載のデータ処理装置。
(付記5) 前記第1のデータ要素の存否判定は、前記複数の書き込みデータ要素の1つとして前記第1のデータ要素の書き込みが要求されたとき、前記第1のデータ要素と同一のデータ要素が前記データ集合に存在するかを判定するために実行される、
付記4に記載のデータ処理装置。
(付記6) 前記複数の書き込みデータ要素のそれぞれは、前記外部装置から書き込みが要求されたファイルに含まれる部分データである、
付記4または5に記載のデータ処理装置。
(付記7) コンピュータに、
記憶部に記憶された、複数のデータ要素を含むデータ集合から、一部のデータ要素を削除する場合、前記データ集合における検索対象のデータ要素の存否判定に用いられ、前記複数のデータ要素のそれぞれを用いた所定の演算に基づく特定のビットが特定の値に設定された第1のブルームフィルタの上位側から、削除されるデータ要素の数に応じたビット数を有する第1のビット列を削除し、
検索対象の第1のデータ要素が入力されると、前記第1のブルームフィルタから前記第1のビット列が削除された第2のブルームフィルタの上位側に、前記第1のビット列と同じビット数を有し、かつ、すべてのビット値が前記特定の値に設定された第2のビット列を一時的に付加し、前記第2のビット列が付加された前記第2のブルームフィルタを用いて、前記一部のデータ要素が削除された前記データ集合における前記第1のデータ要素の存否を判定する、
処理を実行させるデータ処理プログラム。
(付記8) 前記第1のビット列は、前記データ集合に含まれるデータ要素の数に対する、前記削除されるデータ要素の数の割合に応じたビット数を有する、
付記7に記載のデータ処理プログラム。
(付記9) 前記記憶部は、第1のデータ集合における検索対象のデータ要素の存否判定に用いられる第1階層ブルームフィルタと、前記第1のデータ集合が分割された複数の第2のデータ集合のそれぞれにおける検索対象のデータ要素の存否判定に用いられる複数の第2階層ブルームフィルタと、を記憶し、前記第1のブルームフィルタは、前記複数の第2階層ブルームフィルタのうち一の第2階層ブルームフィルタであり、前記データ集合は、前記複数の第2のデータ集合のうち前記一のブルームフィルタに対応する一の第2のデータ集合であり、
前記コンピュータに、
前記データ集合に含まれる前記一部のデータ要素を削除する場合、前記第1階層ブルームフィルタの上位側から前記第1のビット列と同じビット数を有する第3のビット列を削除し、
前記第1のデータ要素が入力されると、前記第1階層ブルームフィルタの上位側から前記第3のビット列が削除された第3のブルームフィルタの上位側に、前記第2のビット列と同一の第4のビット列を一時的に付加し、前記第4のビット列が付加された前記第3のブルームフィルタを用いて、前記一部のデータ要素が削除された前記第1のデータ集合における前記第1のデータ要素の存否を判定する、
処理をさらに実行させる、
付記7または8に記載のデータ処理プログラム。
(付記10) 前記記憶部は、前記データ集合の記憶領域を含む書き込みデータ記憶領域を有し、
前記コンピュータに、
外部装置から書き込みが要求された複数の書き込みデータ要素を、重複を排除して前記書き込みデータ記憶領域に格納するとともに、少なくとも前記複数のデータ要素のそれぞれと、前記複数の書き込みデータ要素との対応関係を示す情報を、前記記憶部に記録し、
前記複数のデータ要素のそれぞれについて、前記複数の書き込みデータ要素のうちのいくつと対応するかを示す第1のカウント値を、前記記憶部に記録し、
前記複数の書き込みデータ要素の1つであって、前記複数のデータ要素のうち一のデータ要素に対応する一の書き込みデータ要素についての更新または削除が前記外部装置から要求されると、前記一のデータ要素に対応する前記第1のカウント値を減少させ、
前記複数のデータ要素のうち、前記第1のカウント値が0であるデータ要素の数を示す第2のカウント値を、前記記憶部に記録し、
前記第2のカウント値が所定の閾値を超えた場合に、前記複数のデータ要素の中から、前記一部のデータ要素として前記第1のカウント値が0であるデータ要素を削除する、
処理をさらに実行させる、
付記7乃至9のいずれか1つに記載のデータ処理プログラム。
(付記11) 前記第1のデータ要素の存否判定は、前記複数の書き込みデータ要素の1つとして前記第1のデータ要素の書き込みが要求されたとき、前記第1のデータ要素と同一のデータ要素が前記データ集合に存在するかを判定するために実行される、
付記10に記載のデータ処理プログラム。
1 データ処理装置
1a 記憶部
1b 演算部
2 データ集合
3 ブルームフィルタ
3a,3b ビット列
E1,E2,E11,E12,E13,Ei,ES データ要素
S1〜S5 ステップ

Claims (7)

  1. 複数のデータ要素を含むデータ集合と、前記データ集合における検索対象のデータ要素の存否判定に用いられ、前記複数のデータ要素のそれぞれを用いた所定の演算に基づく特定のビットが特定の値に設定された第1のブルームフィルタと、を記憶する記憶部と、
    前記データ集合に含まれる一部のデータ要素を削除する場合、前記第1のブルームフィルタの上位側から、削除されるデータ要素の数に応じたビット数を有する第1のビット列を削除し、
    検索対象の第1のデータ要素が入力されると、前記第1のブルームフィルタから前記第1のビット列が削除された第2のブルームフィルタの上位側に、前記第1のビット列と同じビット数を有し、かつ、すべてのビット値が前記特定の値に設定された第2のビット列を一時的に付加し、前記第2のビット列が付加された前記第2のブルームフィルタを用いて、前記一部のデータ要素が削除された前記データ集合における前記第1のデータ要素の存否を判定する、演算部と、
    を有するデータ処理装置。
  2. 前記第1のビット列は、前記データ集合に含まれるデータ要素の数に対する、前記削除されるデータ要素の数の割合に応じたビット数を有する、
    請求項1に記載のデータ処理装置。
  3. 前記記憶部は、第1のデータ集合における検索対象のデータ要素の存否判定に用いられる第1階層ブルームフィルタと、前記第1のデータ集合が分割された複数の第2のデータ集合のそれぞれにおける検索対象のデータ要素の存否判定に用いられる複数の第2階層ブルームフィルタと、を記憶し、前記第1のブルームフィルタは、前記複数の第2階層ブルームフィルタのうち一の第2階層ブルームフィルタであり、前記データ集合は、前記複数の第2のデータ集合のうち前記一の第2階層ブルームフィルタに対応する一の第2のデータ集合であり、
    前記演算部は、さらに、
    前記データ集合に含まれる前記一部のデータ要素を削除する場合、前記第1階層ブルームフィルタの上位側から前記第1のビット列と同じビット数を有する第3のビット列を削除し、
    前記第1のデータ要素が入力されると、前記第1階層ブルームフィルタの上位側から前記第3のビット列が削除された第3のブルームフィルタの上位側に、前記第2のビット列と同一の第4のビット列を一時的に付加し、前記第4のビット列が付加された前記第3のブルームフィルタを用いて、前記一部のデータ要素が削除された前記第1のデータ集合における前記第1のデータ要素の存否を判定する、
    請求項1または2に記載のデータ処理装置。
  4. 前記記憶部は、前記データ集合の記憶領域を含む書き込みデータ記憶領域を有し、
    前記演算部は、さらに、
    外部装置から書き込みが要求された複数の書き込みデータ要素を、重複を排除して前記書き込みデータ記憶領域に格納するとともに、少なくとも前記複数のデータ要素のそれぞれと、前記複数の書き込みデータ要素との対応関係を示す情報を、前記記憶部に記録し、
    前記複数のデータ要素のそれぞれについて、前記複数の書き込みデータ要素のうちのいくつと対応するかを示す第1のカウント値を、前記記憶部に記録し、
    前記複数の書き込みデータ要素の1つであって、前記複数のデータ要素のうち一のデータ要素に対応する一の書き込みデータ要素についての更新または削除が前記外部装置から要求されると、前記一のデータ要素に対応する前記第1のカウント値を減少させ、
    前記複数のデータ要素のうち、前記第1のカウント値が0であるデータ要素の数を示す第2のカウント値を、前記記憶部に記録し、
    前記第2のカウント値が所定の閾値を超えた場合に、前記複数のデータ要素の中から、前記一部のデータ要素として前記第1のカウント値が0であるデータ要素を削除する、
    請求項1乃至3のいずれか1項に記載のデータ処理装置。
  5. 前記第1のデータ要素の存否判定は、前記複数の書き込みデータ要素の1つとして前記第1のデータ要素の書き込みが要求されたとき、前記第1のデータ要素と同一のデータ要素が前記データ集合に存在するかを判定するために実行される、
    請求項4に記載のデータ処理装置。
  6. 前記複数の書き込みデータ要素のそれぞれは、前記外部装置から書き込みが要求されたファイルに含まれる部分データである、
    請求項4または5に記載のデータ処理装置。
  7. コンピュータに、
    記憶部に記憶された、複数のデータ要素を含むデータ集合から、一部のデータ要素を削除する場合、前記データ集合における検索対象のデータ要素の存否判定に用いられ、前記複数のデータ要素のそれぞれを用いた所定の演算に基づく特定のビットが特定の値に設定された第1のブルームフィルタの上位側から、削除されるデータ要素の数に応じたビット数を有する第1のビット列を削除し、
    検索対象の第1のデータ要素が入力されると、前記第1のブルームフィルタから前記第1のビット列が削除された第2のブルームフィルタの上位側に、前記第1のビット列と同じビット数を有し、かつ、すべてのビット値が前記特定の値に設定された第2のビット列を一時的に付加し、前記第2のビット列が付加された前記第2のブルームフィルタを用いて、前記一部のデータ要素が削除された前記データ集合における前記第1のデータ要素の存否を判定する、
    処理を実行させるデータ処理プログラム。
JP2017223761A 2017-11-21 2017-11-21 データ処理装置およびデータ処理プログラム Active JP6916442B2 (ja)

Priority Applications (3)

Application Number Priority Date Filing Date Title
JP2017223761A JP6916442B2 (ja) 2017-11-21 2017-11-21 データ処理装置およびデータ処理プログラム
EP18203351.4A EP3495964B1 (en) 2017-11-21 2018-10-30 Apparatus and program for data processing
US16/174,407 US10789228B2 (en) 2017-11-21 2018-10-30 Data presence/absence determination apparatus and computer-readable storage medium storing program for determination of data presence/absence

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2017223761A JP6916442B2 (ja) 2017-11-21 2017-11-21 データ処理装置およびデータ処理プログラム

Publications (2)

Publication Number Publication Date
JP2019095986A JP2019095986A (ja) 2019-06-20
JP6916442B2 true JP6916442B2 (ja) 2021-08-11

Family

ID=64109735

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2017223761A Active JP6916442B2 (ja) 2017-11-21 2017-11-21 データ処理装置およびデータ処理プログラム

Country Status (3)

Country Link
US (1) US10789228B2 (ja)
EP (1) EP3495964B1 (ja)
JP (1) JP6916442B2 (ja)

Families Citing this family (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP7107877B2 (ja) * 2019-03-22 2022-07-27 株式会社日立製作所 ストレージシステム、及び、記憶コスト適正化方法
JP2021043542A (ja) * 2019-09-06 2021-03-18 日本電気株式会社 データ管理システム及びデータ管理方法
JP7295422B2 (ja) * 2019-09-10 2023-06-21 富士通株式会社 情報処理装置および情報処理プログラム
JP7323801B2 (ja) 2019-11-06 2023-08-09 富士通株式会社 情報処理装置および情報処理プログラム
JP7323804B2 (ja) 2019-12-10 2023-08-09 富士通株式会社 データ処理装置およびデータ処理プログラム
US11341108B2 (en) * 2020-10-20 2022-05-24 Dell Products L.P. System and method for data deduplication in a smart data accelerator interface device
US20230221864A1 (en) * 2022-01-10 2023-07-13 Vmware, Inc. Efficient inline block-level deduplication using a bloom filter and a small in-memory deduplication hash table

Family Cites Families (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7602785B2 (en) * 2004-02-09 2009-10-13 Washington University Method and system for performing longest prefix matching for network address lookup using bloom filters
JP2006106810A (ja) 2004-09-30 2006-04-20 Canon Inc ファイル管理装置、ファイル管理方法、記録媒体及びプログラム
US8290972B1 (en) * 2009-04-29 2012-10-16 Netapp, Inc. System and method for storing and accessing data using a plurality of probabilistic data structures
JP5664467B2 (ja) 2011-06-13 2015-02-04 富士通株式会社 検索プログラム、検索方法、検索装置、およびノード
US20130173853A1 (en) * 2011-09-26 2013-07-04 Nec Laboratories America, Inc. Memory-efficient caching methods and systems
JP5821744B2 (ja) 2012-03-28 2015-11-24 富士通株式会社 データ有無判定装置、データ有無判定方法及びデータ有無判定プログラム
WO2014132136A2 (en) * 2013-02-27 2014-09-04 Marvell World Trade Ltd. Efficient longest prefix matching techniques for network devices
JP6089890B2 (ja) 2013-03-29 2017-03-08 富士通株式会社 ストレージ制御装置、ストレージ制御装置の制御方法およびストレージ制御装置の制御プログラム
CA2876466C (en) * 2014-12-29 2022-07-05 Ibm Canada Limited - Ibm Canada Limitee Scan optimization using bloom filter synopsis

Also Published As

Publication number Publication date
EP3495964A1 (en) 2019-06-12
JP2019095986A (ja) 2019-06-20
EP3495964B1 (en) 2021-06-09
US20190155927A1 (en) 2019-05-23
US10789228B2 (en) 2020-09-29

Similar Documents

Publication Publication Date Title
JP6916442B2 (ja) データ処理装置およびデータ処理プログラム
US10761758B2 (en) Data aware deduplication object storage (DADOS)
JP6304406B2 (ja) ストレージ装置、プログラム、情報処理方法
JP5445682B2 (ja) ストレージシステム
JP5878548B2 (ja) 重複排除ストレージ・システム、その内部の合成バックアップを容易にする方法、及び、プログラム
US9043540B2 (en) Systems and methods for tracking block ownership
Carstoiu et al. Hadoop hbase-0.20. 2 performance evaluation
JP7323804B2 (ja) データ処理装置およびデータ処理プログラム
JP2006293981A (ja) データベース格納方法、および、データベース格納システム
CN104054071A (zh) 访问存储设备的方法和存储设备
US10229127B1 (en) Method and system for locality based cache flushing for file system namespace in a deduplicating storage system
CN113535670A (zh) 一种虚拟化资源镜像存储***及其实现方法
US8375071B2 (en) File management information storage apparatus and method and program for controlling the same
JP7007565B2 (ja) 情報処理装置および情報処理プログラム
JP6006740B2 (ja) インデックス管理装置
JP2014130492A (ja) インデックスの生成方法及び計算機システム
JP2021043642A (ja) 情報処理装置および情報処理プログラム
JPWO2012081165A1 (ja) データベース管理装置及びデータベース管理方法
WO2022121274A1 (zh) 一种存储***中元数据管理方法、装置及存储***
JP7323801B2 (ja) 情報処理装置および情報処理プログラム
JP4825504B2 (ja) データ登録・検索システムおよびデータ登録・検索方法
JP5729173B2 (ja) 制御装置、制御方法およびストレージ装置
Mishra A survey of LSM-Tree based Indexes, Data Systems and KV-stores
JP2022074654A (ja) 情報処理装置、情報処理方法および情報処理プログラム
JP2023150248A (ja) ストレージ制御プログラム、ストレージ制御方法およびストレージ制御装置

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20200807

RD02 Notification of acceptance of power of attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7422

Effective date: 20200825

RD04 Notification of resignation of power of attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7424

Effective date: 20200825

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20210528

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20210615

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20210628

R150 Certificate of patent or registration of utility model

Ref document number: 6916442

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150