以下の説明では、「インターフェース部」は、1以上のインターフェースでよい。当該1以上のインターフェースは、ユーザインターフェース部と、通信インターフェース部とのうちの少なくとも通信インターフェース部を含んでよい。ユーザインターフェース部は、1以上のI/Oデバイス(例えば入力デバイス(例えばキーボード及びポインティングデバイス)と出力デバイス(例えば表示デバイス))と表示用計算機とのうちの少なくとも1つのI/Oデバイスでもよいし、それに代えて又は加えて、当該少なくとも1つのI/Oデバイスに対するインターフェースデバイスでもよい。通信インターフェース部は、1以上の通信インターフェースデバイスでよい。1以上の通信インターフェースデバイスは、1以上の同種の通信インターフェースデバイス(例えば1以上のNIC(Network Interface Card))であってもよいし2以上の異種の通信インターフェースデバイス(例えばNICとHBA(Host Bus Adapter))であってもよい。
以下の説明では、「メモリ部」は、1以上のメモリでよい。少なくとも1つのメモリは、揮発性メモリであってもよいし不揮発性メモリであってもよい。メモリ部は、主に、プロセッサ部による処理の際に使用される。
また、以下の説明では、「PDEV部」は、1以上のPDEVでよい。「PDEV」は、物理的な記憶デバイスを意味し、典型的には、不揮発性の記憶デバイス(例えば補助記憶デバイス)、例えばHDD(Hard Disk Drive)又はSSD(Solid State Drive)である。PDEV部は、RAIDグループであってもよい。「RAID」は、Redundant Array of Independent (or Inexpensive) Disksの略である。
また、以下の説明では、「記憶部」は、メモリ部及びPDEV部のうちの少なくとも1つ(典型的には、少なくともメモリ部)を含む。
また、以下の説明では、「プロセッサ部」は、1以上のプロセッサでよい。少なくとも1つのプロセッサは、典型的には、CPU(Central Processing Unit)のようなマイクロプロセッサであるが、GPU(Graphics Processing Unit)のような他種のプロセッサでもよい。1以上のプロセッサの各々は、シングルコアでもよいしマルチコアでもよい。一部のプロセッサは、処理の一部または全部を行うハードウェア回路でもよい。
また、以下の説明では、「kkk層」の表現にて機能を説明することがあるが、機能は、1以上のコンピュータプログラムがプロセッサ部によって実行されることで実現されてもよいし、1以上のハードウェア回路(例えばFPGA(Field-Programmable Gate Array)、ASIC(Application Specific Integrated Circuit)、ニューロモーフィックデバイス、又は、量子型デバイス)によって実現されてもよい。プログラムがプロセッサ部によって実行されることで機能が実現される場合、定められた処理が、適宜に記憶部及び/又はインターフェース部等を用いながら行われるため、機能はプロセッサ部の少なくとも一部とされてもよい。機能を主語として説明された処理は、プロセッサ部あるいはそのプロセッサ部を有する装置が行う処理としてもよい。プログラムは、プログラムソースからインストールされてもよい。プログラムソースは、例えば、プログラム配布計算機又は計算機が読み取り可能な記録媒体(例えば非一時的な記録媒体)であってもよい。各機能の説明は一例であり、複数の機能が1つの機能にまとめられたり、1つの機能が複数の機能に分割されたりしてもよい。
また、以下の説明では、「xxxテーブル」といった表現にて情報を説明することがあるが、情報は、どのようなデータ構造で表現されていてもよい。すなわち、情報がデータ構造に依存しないことを示すために、「xxxテーブル」を「xxx情報」と言うことができる。また、以下の説明において、各テーブルの構成は一例であり、1つのテーブルは、2以上のテーブルに分割されてもよいし、2以上のテーブルの全部または一部が1つのテーブルであってもよい。
また、以下の説明では、同種の要素を区別して説明する場合は、その要素の参照符号を使用し(例えばノード201A、201B)、同種の要素を区別しないで説明する場合は、その要素の参照符号の共通部分を使用することがある(例えばノード201)。
また、以下の説明では、「ストレージシステム」は、1以上の物理的なストレージ装置を含む。「物理的なストレージ装置」は、記憶部を有している装置であればよく、故に、例えば、物理的な汎用計算機でもよい。少なくとも1つの物理的なストレージ装置が、仮想的な計算機(例えばVM(Virtual Machine))を実行してもよいし、SDx(Software-Defined anything)を実行してもよい。SDxとしては、例えば、SDS(Software Defined Storage)(仮想的なストレージ装置の一例)又はSDDC(Software-defined Datacenter)を採用することができる。
また、以下の説明では、「データセット」とは、アプリケーションプログラムのようなプログラムから見た1つの論理的な電子データの塊であり、例えば、レコード、ファイル、キーバリューペア及びタプルのうちのいずれでもよい。
以下、図面を参照しながら、幾つかの実施例を説明する。なお、以下の説明において、データセット群は、複数のデータセットから構成されるが、データセット群を構成するデータセットの数が1でも本発明が適用されてよい。
図1は、実施例1に係るストレージシステムの概要図である。
本実施例に係るストレージシステム110は、ライト対象の複数のデータセットであるライト対象のデータセット群を、当該ライト対象のデータセット群の規則性を示し1以上の入力値を入力としデータセット群を出力とするデータモデルと化し、当該データモデルを、当該ライト対象のデータセット群のキーに関連付けて辞書化する。データモデルの辞書化が、データセット群のライトに相当する。
データモデルは、典型的には、数式処理、波形の形状及び確率分布などの規則性を表現したバイナリ列である。データモデル(及び後述の入力ベクトル)のデータ量の増加量は、ライト対象のデータセット群のデータ量の増加量に比して小さい。このため、データ量の削減の効果は、ライト対象のデータセット群のデータ量が大きい程、高いことが期待される。
データモデルは、1以上の入力値のようなデータと違い、入力されたデータを処理する実行主体に相当する。データモデルとして、例えば、ニューラルネットワークのようなモデルを採用することができる。一般に、ニューラルネットワークのようなモデルは、故障率の算出や画像の認識といったような分析に使用される。本実施例は、そのようなモデルを、データセット群の規則性を示すデータモデルの一例として採用し、ストレージシステム110は、1以上のデータモデル(実行主体)を1以上のデータセット群に代えて保持する新規なストレージシステムである。
図1を参照して当該ストレージシステム110の概要をより詳細に説明する。なお、データモデルには、データモデルとして採用されるモデルの種類によっては必ずしも後述の入力ベクトルを必要としない(例えば、入力層のユニットが1個で、入力値として、0からNまでの決められた整数値を用いる場合は、あえてそれを保存する必要はない)。
ストレージシステム110は、記憶部160と、記憶部160に接続されたプロセッサ部180とを有する。記憶部160は、1以上のキャッシュメモリであるキャッシュメモリ部195を含む。キャッシュメモリは、少なくとも1つのメモリに設けられたメモリ領域であり、I/O(Input/Output)対象のデータが一時的に格納されるメモリ領域である。
記憶部160は、モデル辞書150を格納する。モデル辞書150は、データモデルの辞書であり、キー毎に、データモデルと入力ベクトルを格納する。キーは、例えば、ライト先のアドレス(例えば、ライト先の論理ボリュームのIDと、当該論理ボリュームにおける領域のアドレス(例えばLBA(Logical Block Address)))を含む。
ストレージシステム110において、時系列データ100(例えば、センサによって計測された値の時系列のデータなどの、数値化可能な情報を含む配列)の各部分が、ライト対象のデータセット群となる。以下、図1の説明において、主に1つのデータセット群101を例に取る。データセット群101は、所定のデータセット範囲(ここでは時刻範囲)に属する複数のデータセットである。ここで言う「データセット」は、時刻(計測時刻)と値(計測値)を含む。データセット範囲がx秒間であって、y個のデータセットがデータセット群101を構成している場合、y/xが、入力周波数である。例えば、x=10、y=1000の場合、入力周波数は、100(1000/10)Hzである。
以下、データセット群101のライト処理、リード処理及び検索処理の概要を説明する。
<データセット群101のライト処理>
プロセッサ部180は、データセット群101のライト要求を受ける(S101)。ライト要求には、ライト先のアドレスが関連付けられている。ライト対象のデータセット群101はキャッシュメモリ部195に格納される。
プロセッサ部180は、当該ライト要求を受けた場合、当該データセット群101との一致度がもっとも高いデータモデルである一致データモデルをモデル辞書150から検索し、その一致データモデルとの一致度と、第1閾値との比較により、一致判断を行う(S102)。
一致度とは、2個の、対象となるデータモデルやデータセット群やそれらから生成されるハッシュ値(ローリングハッシュ、ファジーハッシュ等)等について、その類似性を表す指標である。指標の例(例えば、複数値に対する指標の例)として、コサイン類似度などが挙げられる。その他、二乗平均誤差や、交差エントロピーなどの一般的に知られた手法を用いてもよい。
例えば、具体的な一致度の比較方法として、以下の(C1)及び(C2)の手法が考えられる。一致判断(及び後述の類似判断)は、下記の(C1)及び(C2)のいずれの比較を含んでもよいが、本実施例では、(C1)の比較が採用される。
(C1)データモデル比較。例えば、プロセッサ部180は、データセット群101のデータモデルを生成する処理と、当該データセット群101に基づく入力ベクトルを生成する処理とを含んだエンコード処理を行う。プロセッサ部180は、生成されたデータモデル(又はそれのハッシュ値)と、モデル辞書150における各データモデル(又はそれのハッシュ値)との一致度を計算する。
(C2)データセット群比較。例えば、プロセッサ部180は、モデル辞書150における各データモデルについて、当該データモデルに関連付いている入力ベクトルを用いてデータセット群を復元する。プロセッサ部180は、データセット群101と、復元された各データセット群との一致度を計算する。また、(C1)と同様に、復元したデータセット群で比較をせずに、あらかじめ計算しておいたハッシュ値(エンコード元のデータセット群の一部又は全部)で比較してもよい。ハッシュの手法は、ファジーハッシュやローリングハッシュなど、後述( )に記載の方法を用いてもよい。
モデル辞書150の検索処理について、具体的には、一般的に知られた技法(ハッシュテーブルなど)を用いて、高速に処理してもよい。また、Hopfieldネットワークなどを用いて、類似のモデルを想起するようにしてもよい。
また、一致判断における比較処理について、具体的には、一致データモデルについて、一致度が第1閾値以上のとき、一致すると判定する。
S102の判断結果が偽の場合(S102:N)、プロセッサ部180は、エンコード処理において生成され、当該データセット群101のキーが関連付けられた新規データモデル及び入力ベクトルを、モデル辞書150に追加する(S103)。
S102の判断結果が真の場合(S102:Y)、プロセッサ部180は、一致データモデルに関連付いているキーと入力ベクトルを更新(例えば、ライト先のアドレスを当該キーに追加)する(S104)。入力ベクトルは、一致データモデルと当該データセットとの差分情報を含む。ただし、まったく差が無い場合などは、入力ベクトルの保存の必要が無い場合も考えられる。これにより、少なくとも重複したデータモデルのライトが回避され、さらに入力ベクトルのライトも場合によって回避される。これにより、データ量の一層の削減が期待できる。なお、S102の一致判断は、ライト処理とは非同期に行われてもよい。すなわち、プロセッサ部180は、一時、ライト対象のデータセット群101のデータモデル及び入力ベクトルがモデル辞書150に格納し、定期的に(又は不定期的に)、モデル辞書150に、データモデル及び入力ベクトルの重複があるか否かを判断してもよい。その判断結果が真の場合、プロセッサ部180は、重複したデータモデル及び入力ベクトルをモデル辞書150から削除してもよい。
プロセッサ部180は、ライト要求の完了応答を返す(S105)。なお、当該完了応答は、S103又はS104が行われた場合に返されてもよいし、データセット群101がキャッシュメモリ部195に格納された場合に返されてもよい。
なお、データモデルは、データセット群101における最大値108及び最小値107をそれぞれ正規化した値である正規化最大値(例えば“1”)及び正規化最小値(例えば“0”)に基づいてよい。これにより、一致データモデル(又は後述の類似データモデル)が見つかる確率が高まる。
そして、入力ベクトルは、下記(a)〜(d)、
(a)データセット群101における最大値108(正規化前の最大値)、
(b)データセット群101における最小値107(正規化前の最小値)、
(c)データモデルに対する入力値105、及び、
(d)データセット群101とパターン103との差分を示す差分情報106、
を含む。データモデルとして入力値が静的な(例えばデータ100におけるx軸(図1では時間軸)の値を入力とする)ニューラルネットワークを用いる場合は、x軸の値を覚える必要は無いため、入力ベクトルのうちの少なくとも入力値105は省略可能である。また、データモデルとしてオートエンコーダなどの生成モデルを用いる場合は、入力値105は、特徴量ベクトルなどでよい。パターン103は、データモデルに入力値105が入力されることにより当該データモデルから出力されたデータセット群である。(a)及び(b)の情報は無くてもよいが、(a)及び(b)があることで(d)の情報量の削減が期待できる。
入力ベクトル中の入力値105をデータモデルに入力することで当該データモデルから出力されたパターン103(データセット群)に、当該入力ベクトル中の差分情報106(且つ、最小値107及び最大値108)を反映することで、誤差の無いデータセット群101の復元が可能である。なお、(d)(差分情報106)は、圧縮され、入力ベクトルは、(a)〜(c)と圧縮された(d)とを含んでよい。これにより、入力ベクトルのデータ量を削減することが期待できる。(d)の圧縮は、既存の圧縮方法に従う圧縮でよい。また、圧縮は、ソフトウェア処理であってもハードウェア処理であってもよい。
<データセット群101のリード処理>
プロセッサ部180は、データセット群101のリード要求を受ける(S121)。リード要求には、リード元のアドレスが関連付けられている。
プロセッサ部180は、リード元のアドレスを含んだキーに対応したデータモデル及び入力ベクトルをモデル辞書150から特定する。プロセッサ部180は、特定された入力ベクトルを特定されたデータモデルに入力することでデータセット群を復元する処理を含んだデコード処理を行う(S122)。実施例1では、データセット群とデータモデル及び入力ベクトルとの間の変換は、可逆変換であり、故に、復元されたデータセット群は、データセット群101である。プロセッサ部180は、復元されたデータセット群101を返す(S123)。
<データセット群101の検索処理>
プロセッサ部180は、検索要求を受ける(S131)。検索要求には、検索条件が関連付けられている。検索条件として、種々の条件を採用可能である。例えば、検索条件は、検索対象のデータセット群101それ自体、又は、当該データセット群101のデータモデルである。
プロセッサ部180は、当該検索条件に適合するデータモデルである対象データモデルをモデル辞書150から検索する(S132)。例えば、検索条件がデータセット群101の場合、プロセッサ部180は、エンコード処理を行うことで、検索条件(データセット群101)のデータモデルを生成し、当該データモデルに適合する(例えば一致度が第1閾値より小さい)対象データモデルを検索する。また、例えば、検索条件がデータセット群101のデータモデルの場合、プロセッサ部180は、当該データモデルに適合する(例えば一致度が第1閾値より小さい)対象データモデルを検索する。
対象データモデルが見つかった場合、プロセッサ部180は、見つかった当該対象データモデルに関連付けられているキーをモデル辞書150から取得し(S133)、取得したキーを返す(S134)。
つまり、検索処理によれば、プロセッサ部180は、対象データモデルからデータセット群を復元して返すことに代えて、対象データモデルに関連付いているキーを返す。これにより、検索要求元へのデータセット群の転送は不要である。また、検索処理では、データセット群の復元、及び、データセット群の比較が行われず、データモデルの比較が行われる。このため、検索処理の負荷は小さく、故に、検索処理の高速化が期待できる。また、検索処理に、後述するモデルハッシュテーブル402などが用いられてもよい。
以上が、データセット群101のライト処理、リード処理及び検索処理の概要である。
なお、データセット群101のデータモデルとの一致度が第1閾値未満第2閾値以上のデータモデルである類似データモデルがあれば(第1閾値>第2閾値)、プロセッサ部180は、当該類似データモデルのモデルIDと、当該類似データモデルとデータセット群101のデータモデルとの差分データとを含んだデータモデルを、データセット群101のデータモデルとして、生成してもよい。これにより、データモデルのデータ量の削減が期待でき、以って、モデル辞書150のサイズの削減が期待できる。
また、ストレージシステム110が複数のノード(物理的なストレージ装置の一例)で構成されている場合、複数のノードが、モデル辞書150を共有してよい。これにより、データ格納の効率化が期待できる。
以下、実施例1を詳細に説明する。
図2は、システム構成の一例を示す。
通信ネットワーク210(例えば、LAN(Local Area Network)、WAN(Wide Area Network)又はインターネット)に接続された1以上のノード部250がある。ノード部250は、1以上のノード201である。ストレージシステム110は、少なくとも1つのノード部250である。
ノード部250として、エッジノード部250A、コアノード部250B及びクラウドノード部250Cがある。エッジノード部250Aは、1以上のホスト(図示せず)と通信する1以上のノード(以下、エッジノード)201Aである。コアノード部250Bは、エッジノード部250Aと通信する1以上のノード(以下、コアノード)201Bである。クラウドノード部250Cは、いわゆるクラウド基盤に相当し、1以上のホスト(図示せず)又は1以上のノード部250と通信する1以上のノード(以下、クラウドノード)201Cである。
例えば、コアノード201Bは、インターフェース部211、PDEV部213、メモリ部214及びそれらに接続されたプロセッサ部215を有する。メモリ部214が、キャッシュメモリ部216を含む。PDEV部213が、1以上のPDEV212で構成される。
1以上のノード201のメモリ部214とPDEV部213が、図1の記憶部160である。1以上のノード201のキャッシュメモリ部216が、図1のキャッシュメモリ部195である。1以上のノード201のプロセッサ部215が、図1のプロセッサ部180である。本実施例では、1以上のノード201が、図1のストレージシステム110である。
図3は、システムの論理階層構造を示す。
システム(ストレージシステム110又はストレージシステム110を含むシステム)が、ブロックストレージ層302、データストア層303及びアプリケーション層304を提供する。ストレージシステム110が少なくともブロックストレージ層302を提供する。これらの層302〜304は、1又は複数のノード201により提供される。すなわち、これらの層302〜304が、同一のノード201により提供されてもよいし、異なる2以上のノード201により提供されてもよい(例えば、層304及び303が、第1のノード201により提供され、層302が、第2のノード201により提供されてもよい)。層302〜304の各々は、1以上のコンピュータプログラムがプロセッサ部180(1以上のプロセッサ部215)に実行されることで提供される機能でよい。例えば、ブロックストレージ層302、データストア層303及びアプリケーション層304は、それぞれ、ブロックストレージプログラム、データストアプログラム及びアプリケーションプログラムと読み替えられてもよい。
ブロックストレージ層302は、1以上の論理ボリューム311を提供する。各論理ボリューム311は、論理的な記憶領域である。各論理ボリューム311は、実体的な論理ボリューム(例えば1以上のPDEV212に基づく論理ボリューム)であってもよいが、本実施例では、各論理ボリューム311は、仮想的な論理ボリューム、具体的には、複数の仮想ページ(仮想的な記憶領域)で構成されており容量仮想化技術(典型的にはThin Provisioning)に従う論理ボリュームである。1以上のプールがブロックストレージ層302により管理される。各プールは、1以上のPDEV212に基づく複数の物理ページ(実体的な記憶領域)で構成された記憶領域である。
データストア層303は、1以上のデータストア312を管理する。各データストア312は、同一の属性(例えば、データソース、種類)を持つ論理的なデータ格納領域である。データストア312に格納される1以上のデータセットは、例えば、データベース(例えばカラムストアデータベース)のような構造化データでもよいし、ファイルやディレクトリのような非構造データでもよい。データストア312におけるデータセットが論理ボリューム311にライトされたり論理ボリューム311からリードされたりする。
アプリケーション層304は、同期データ処理(例えばストリームデータ処理)及び非同期データ処理を行う。同期データ処理は、入力された時系列データ100をデータセット群単位でデータストア312に蓄積したり、1以上のデータセット群の処理(例えば分析処理)をしたり、当該処理の結果を出力したりする処理である。非同期データ処理は、データストア312から1以上のデータセットをリードしたり、当該1以上のデータセットの処理(例えば分析処理)をしたり、当該処理の結果を出力したりする処理である。
少なくとも1つのノード201(例えばコアノード201B)が、ブロックストレージ層302を提供する。本実施例では、ブロックストレージ層302が、エンコード処理及びデコード処理(例えば、それらの処理を含む図10〜図14に示す処理)を実行する。このため、データセット群とデータモデル及び入力ベクトルとの間の変換は、可逆変換であることが好ましく、故に、本実施例では、上述したように可逆変換が採用される。以下、ブロックストレージ層302を提供する1つのノード201を例に取る。
図4は、ブロックメモリ領域部に格納されるテーブルを示す。
ブロックメモリ領域部400は、ブロックストレージ層302に管理されるメモリ領域部である。「メモリ領域部」は、メモリ部214における1以上のメモリ領域である。ブロックメモリ領域部400は、キー変換テーブル401、モデルハッシュテーブル402、キャッシュテーブル403、ページマッピングテーブル404及び構成テーブル405を格納する。これらのテーブル401〜405の少なくとも一部が、不揮発化やメモリ効率向上などを目的としてPDEV部213に格納されてもよい。
図5は、キー変換テーブル401の構成を示す。
キー変換テーブル401は、キーとデータモデル及び入力ベクトルとの間の変換のためのテーブルである。例えば、キー変換テーブル401は、キー毎にレコードを有する。各レコードは、キー、モデルID及び入力ベクトルといった情報を格納する。
キーは、アドレス(例えば、物理アドレス(物理ページに属するアドレス))を含む。アドレスは、例えば、開始アドレスとアドレス範囲(データ長)とで定義されてよい。アドレス範囲は、固定でも可変でもよい。キー内の物理アドレスは、ページマッピングテーブル404を通じて論理アドレス(仮想ページに属するアドレス)に関連付けられている。このため、キー内の物理アドレスから、対応する論理アドレスを特定することができる。なお、容量仮想化技術(典型的にはThin
Provisioning)が採用されていない場合、キーは、論理アドレス(例えば、ライト要求又はリード要求で指定されるアドレス)を含んでよい。
モデルIDは、データモデルのIDである。モデルIDは、例えば、インクリメンタルに加算されてよい(例えば通し番号でよい)。モデルIDからPDEV位置を一意に算出可能でよい。
入力ベクトルは、対応するデータセット群に基づく。
なお、データモデルは、上述したように、数式処理、波形の形状、確率分布などの規則性を表現したバイナリ列である。データモデルは、入力ベクトルを入力としデータセット群を出力する。データモデルに、例えば、一般的なニューラルネットワークや、生成モデル(例えば、GMM(Gaussian Mixture Models)、HMM(Hidden Markov Model)、SCFG(Stochastic Context-Free Grammar)、GAN(Generative Adversarial Nets)又はVAE(Variational Auto Encoder))、遺伝的プログラミングなどが用いられてもよい。また、データモデルの情報量削減のためにMimic Model等のモデル圧縮が適用されてもよい。ストレージに入力されるデータは、数値以外のものも含んでもよい(たとえば、装置IDなど)ため、プログラミングで一般的に用いられるような型情報を付与してもよい。また、データモデル間の圧縮のため、データモデル内に別のデータモデルのモデルIDが参照のため含まれてもよい。データモデルは、PDEV部213に保存されるため、エンコード処理又はデコード処理のときにのみ、当該データモデルの少なくとも一部がキャッシュメモリ部216に格納されてもよい。1又は複数のエンコード処理において、再帰的にデータモデルのエンコード処理が多段で適用されてもよい。
また、データモデルの生成では、上述したように、元になるデータセット群における最小値及び最大値がそれぞれ正規化された値である正規化最小値(例えば“0”)及び正規化最大値(例えば“1”)が使用されてもよい(すなわち、出力の値域が0−1に補正されてもよい)。そして、上述したように、正規化前の最小値及び最大値(及び、データセット群のデータセット範囲)が、入力ベクトルに含まれてよい。また、当該入力ベクトルは、データセット群とパターンとの差分を示す差分情報を含んでよい。「パターン」は、上述したように、データモデルに入力値を入力することで当該データモデルから出力されたデータセット群である。
また、入力ベクトルにおける差分情報は、ブロックストレージ層302により圧縮されていてもよい。これにより、入力ベクトルのデータ量を削減することができる。デコード処理では、当該差分情報が伸張された後に使用される。
図6は、モデルハッシュテーブル402の構成を示す。
モデルハッシュテーブル402は、データモデルのハッシュ値を格納する。具体的には、例えば、モデルハッシュテーブル402は、データモデル毎に、レコードを有する。各レコードは、モデルID及びモデルハッシュ(データモデルのハッシュ値)といった情報を格納する。
上述した一致判断は、ライト対象のデータセット群のデータモデルのモデルハッシュを、モデルハッシュテーブル402における各モデルハッシュと比較することで行われてよい。これにより、データモデルのリードのためにPDEV212にアクセスすることが不要となり、高速な一致判断が期待できる。
なお、モデルハッシュは、データモデルの類似性を検出するためのデータから計算したハッシュ値、ファジーハッシングやローリングハッシュなどを適用してもよい。また、モデルハッシュは、データモデルの特徴値(特徴量)の一例でよく、特徴値は、ハッシュ値以外の特徴値であってもよい(例えば、データモデルを一方向性関数に入力して得られた値でもよいし、パターン検出関連技術(Hopfieldネットワーク等)を用いて得られた値でもよい)。
図7は、キャッシュテーブル403の構成を示す。
キャッシュテーブル403は、キャッシュメモリ部216におけるキャッシュ領域毎の状況に関する情報を格納する。「キャッシュ領域」とは、キャッシュメモリ部216の一部領域である。キャッシュ領域のサイズは固定でも可変でもよい。
例えば、キャッシュテーブル403は、キャッシュ領域毎に、レコードを有する。各レコードは、論理アドレス、キャッシュデータ及びキャッシュ属性といった情報を格納する。
論理アドレスは、キャッシュ領域に関連付けられた論理アドレス(仮想ページに属するアドレス)を示す。
キャッシュデータは、データモデル又は1以上のデータセットである。データモデルもデータセットもキャッシュメモリ部216に存在するため、キャッシュデータは、テーブル403に格納されないでもよい。また、データモデル及び入力ベクトルの組が、PDEV部213にライトされてもよい。
キャッシュ属性は、キャッシュ領域の属性を示す。キャッシュ属性は、例えば、“クリーン”(キャッシュ領域内のデータ(データモデル又は1以上のデータセット)がPDEV部213にライト済である)、“ダーティ”(キャッシュ領域内のデータがPDEV部213に未ライトである)、“デコード済”(キャッシュ領域には1以上のデータセットが存在する)、及び、“未デコード”(キャッシュ領域にはデータモデルが存在する)のいずれかである。“クリーン”と“ダーティ”というキャッシュ属性と、“デコード済”と“未デコード”というキャッシュ属性は、独立であってもよい。同期ライト処理が完了した時点では、キャッシュ属性は、“ダーティ”かつ“デコード済”(モデル化されていない元の状態)であるが、非同期ライト処理が完了した時点で、キャッシュ属性は、“クリーン”かつ“未デコード”となる。“ダーティ”か“クリーン”かは、一般的に知られたストレージシステムのキャッシュ状態の遷移に従うことができる。その遷移と、“デコード済”か“未デコード”かは、独立であってもよい。例えば、キャッシュヒット率とアクセス特性、キャッシュメモリへのデータ格納効率の関係から、キャッシュ属性を“デコード済”とするか“未デコード”とするかが制御されてもよい。
図8は、ページマッピングテーブル404の構成を示す。
ページマッピングテーブル404は、仮想ページと物理ページの関係、及び、物理ページのアクセス特性を示す。例えば、ページマッピングテーブル404は、仮想ページ毎に、レコードを有する。各レコードは、VOL ID、仮想ページID、物理ページID及びアクセス特性といった情報を格納する。
VOL IDは、仮想ページを含む論理ボリュームのIDである。仮想ページIDは、仮想ページのID(例えばアドレス)である。プールIDは、仮想ページに割り当てられている物理ページを含んだプールのIDである。物理ページIDは、仮想ページに割り当てられている物理ページ(プール内の記憶領域)のIDである。アクセス特性は、当該物理ページのアクセス特性(例えばI/O負荷)を示す。なお、「I/O負荷」として、「I/O数」及び「I/Oサイズ」の少なくとも1つを採用することができる。「I/O数」は、単位時間当たりに発行されるI/O(例えばI/O要求)の数である。「I/Oサイズ」は、単位時間当たりに発行されるI/Oの対象データの合計サイズである。本実施例では、「I/O負荷」として、「I/O数」が採用される。ページマッピングテーブル404は、例えば、ライト先が、高I/O負荷の物理ページであれば、エンコード処理をしない、といったような類の制御に用いられる。なお、I/O負荷に代えて、プロセッサ部215の負荷が採用されてもよい。例えば、プロセッサ部215の負荷が高負荷(例えば、或る閾値以上)であれば、プロセッサ部215は、エンコード処理をしないでよい。言い換えれば、プロセッサ部215の負荷が低負荷(例えば、或る閾値未満)であれば、プロセッサ部215は、エンコード処理を行ってよい。
図9は、構成テーブル405の構成を示す。
構成テーブル405は、プールの構成に関する情報を格納する。例えば、構成テーブル405は、プール毎に、レコードを有する。各レコードは、プールID、PDEVリスト、外部リスト及びノードリストといった情報を格納する。
プールIDは、プールのIDである。PDEVリストは、プールの基になっているPDEV212のIDのリストである。外部リストは、プールの基になっている外部デバイスのIDのリストである。ここで言う「外部デバイス」は、当該プールを提供するノード201以外のノード201が提供するデバイス(例えば、論理ボリューム又はPDEV)である。ノードリストは、外部デバイスを提供するノードのIDのリストである。
すなわち、プールは、当該プールを提供するノード201内のPDEV212に代えて又は加えて、当該ノード201の外部のデバイスに基づいていてもよい。
以下、図10〜図14を参照して、ブロックストレージ層302が行う処理を説明する。
図10は、同期ライト処理の流れを示す。
同期ライト処理とは、ライト処理の一部であり、ライト要求を受信した場合に開始される。以下の説明において、同期ライト処理でのライト対象はデータセット群であるが、データセット群に代えてデータモデルのような他のデータがライト対象となることがあってもよい。
すなわち、ブロックストレージ層302は、ライト先の仮想ページ(ライト要求で指定されているアドレスが属する仮想ページ)に物理ページが割り当たっているか否かを、ページマッピングテーブル404を基に判断する(S1001)。S1001の判断結果が偽の場合(S1001:N)、ブロックストレージ層302は、ライト先の仮想ページに空きの物理ページ(いずれの仮想ページにも割り当てられていない物理ページ)を割り当てる(S1002)。
S1001の判断結果が真の場合(S1001:Y)、又は、S1002の後、ブロックストレージ層302は、キャッシュメモリ部216からキャッシュ領域を確保し、確保したキャッシュ領域に、ライト対象のデータセット群(ライト要求に付随するデータセット群)を格納する(S1003)。ブロックストレージ層302は、当該キャッシュ領域のキャッシュ属性を“ダーティ”とする(S1004)。その後、ブロックストレージ層302は、ライト要求に応答を返す(S1005)。
図11は、非同期ライト処理の流れを示す。
非同期ライト処理とは、ライト処理の残りの一部であり、ライト要求の受信とは非同期に行われる処理である。以下の説明では、“ダーティ”に対応したキャッシュ領域を「ダーティ領域」と言う。
ブロックストレージ層302は、キャッシュテーブル403を参照し、ダーティ領域があるか否かを判断する(S1101)。S1101の判断結果が偽の場合(S1101:N)、処理が終了する。
S1101の判断結果が真の場合(S1101:Y)、ブロックストレージ層302は、ダーティ領域に対応した仮想ページを、キャッシュテーブル403を基に特定し、特定した仮想ページに対応したI/O負荷(アクセス特性)を、ページマッピングテーブル404を基に特定し、特定したI/O負荷が低負荷か否か(所定値未満か否か)を判断する(S1102)。なお、ここで言う「ダーティ領域」の例として、以下、データセット群が格納された任意のダーティ領域とする。
S1102の判断結果が真の場合(S1102:Y)、ブロックストレージ層302は、ダーティ領域内のデータセット群についてエンコード処理(S1103)を行う。S1102の判断結果が偽の場合(S1102:N)、エンコード処理(S1103)はスキップされる。これにより、高I/O負荷の物理ページがライト先となるデータセット群についてまでエンコード処理を行うことでI/O性能が低下することを回避することが期待できる。
エンコード処理(S1103)の後、又は、S1102の判断結果が偽の場合(S11102:N)、ブロックストレージ層302は、ライト先のページ位置(物理ページにおけ位置)を特定する(S1104)。ブロックストレージ層302は、ライト対象があるか否かを判断する(S1105)。エンコード処理において一致データモデルが見つからなかった場合、又は、エンコード処理がスキップされた場合、S1105の判断結果が真となる。
S1105の判断結果が真の場合(S1105:Y)、ブロックストレージ層302は、デステージを行う(S1106)。すなわち、ブロックストレージ層302は、構成テーブル405を基に、S1104で特定したページ位置に、ライト対象(データモデル又はデータセット群)をライトする。
S1105の判断結果が偽の場合(S1105:N)、又は、S1106の後、ブロックストレージ層302は、ダーティ領域の属性を“クリーン”に更新する(S1107)。また、ブロックストレージ層302は、S1104で特定されたページ位置を持つ物理ページに対応したアクセス特性(I/O負荷)を更新する(S1108)。
図12は、エンコード処理の流れを示す。
ブロックストレージ層302は、ダーティ領域内のデータセット群のタイプ(例えば、動画、静止画、CSVデータといったタイプ)を識別する(S1201)。また、ブロックストレージ層302は、前処理(例えば、データタイプ毎のカラム分割やフレーム分割)を行う(S1202)。
ブロックストレージ層302は、ダーティ領域内のデータセット群のデータモデルとの一致度が第1閾値以上のデータモデルである一致データモデルが存在するか否かの一致判断を行う(S1203)。本実施例では、一致判断は、上述した通り、上述の(C1)の比較が採用される。すなわち、ブロックストレージ層302は、ダーティ領域内のデータセット群のデータモデルを生成し、当該データモデルのモデルハッシュを算出する。データモデルの生成は、例えばニューラルネットワークを採用した場合、その学習処理の実行に相当する。その場合、例えばバックプロパゲーションや数値微分法などの一般的に知られた学習処理を実行する。学習サイクルの繰り返し回数は、学習の進展や、期待のデータ削減効果などから、適切なタイミングで打ち切ってもよい。その他、メタ学習や転移学習などの技法を用いて学習速度を高速化してもよい。そして、ブロックストレージ層302は、算出したモデルハッシュとの一致度が第1閾値以上のモデルハッシュがモデルハッシュテーブル402に存在するか否かを判断する。一致度が第1閾値以上のデータモデルが2以上存在する場合、最も一致度が高いデータモデルが「一致データモデル」でよい。
S1203の判断結果が真の場合(S1203:Y)、ブロックストレージ層302は、ダーティ領域内のデータセット群とパターン(一致データモデルから出力されたデータセット群)との差分である差分情報を生成することで新たな入力ベクトルを完成させ(S1205)、キー変換テーブル401を更新する(S1206)。具体的には、例えば、ブロックストレージ層302は、ライト先のアドレスを含んだ新たなキーとS1205で生成した新たな入力ベクトル(差分情報を含む入力ベクトル)とを、一致データモデルのモデルIDに新たに関連付ける。
S1203の判断結果が偽の場合(S1203:N)、ブロックストレージ層302は、モデルハッシュテーブル402を更新する(S1204)。例えば、ブロックストレージ層302は、算出されたモデルハッシュと、生成されたデータモデルのモデルIDとを、モデルハッシュテーブル402に追加する。なお、S1204において、ブロックストレージ層302は、類似判断、すなわち、生成されたデータモデルとの一致度が第1閾値未満第2閾値以上(第1閾値>第2閾値)のデータモデルである類似データモデルがあるか否かを判断してもよい。類似判断の結果が真の場合、ブロックストレージ層302は、類似データモデルのモデルIDと、当該類似データモデルと生成されたデータモデルとの差分データとを含んだ差分データモデルを、ダーティ領域内のデータセット群のデータモデルとしてもよい。これにより、データモデルのデータ量を削減することが期待できる。また、差分データモデルの生成方法として、類似データモデルに積層させるデータモデルを生成し、それと類似データモデルのモデルIDとを含むデータモデルが差分データモデルとして採用されてもよい。具体的には、例えば、ブロックストレージ層302は、ベースとする類似データモデルを変更せずに、それに接続したニューラルネットワーク部分の学習処理により、積層させるデータモデルを生成してもよい。その他、一般的に知られた転移学習のような手法が適用されてもよい。本処理で生成する新たなモデル部分は、新規データモデルよりもサイズが小さい。差分データモデルは、当該新たなモデル部分を含み、また、ベースとする類似データモデルの代わりに当該類似データモデルの参照(モデルID)を含む。参照(モデルID)は、当然に、類似データモデルそれ自体よりも小さい。このため、格納するデータ量を削減することができる。ブロックストレージ層302は、類似データモデルのモデルIDを含んだデータモデルのモデルIDと、当該データモデルのモデルハッシュとを、S1204において、モデルハッシュテーブル402に追加することができる。
ブロックストレージ層302は、ダーティ領域内のデータセット群と、パターン(データモデルから出力されたデータセット群)との差分である差分情報を生成する(S1205)。S1205において生成された差分情報と、当該データセット群のデータセット範囲に基づく1以上の入力値と、当該データセット群における最大値及び最小値とを含んだデータが、入力ベクトルである。なお、ブロックストレージ層302は、差分情報を圧縮し、圧縮前の差分情報に代えて圧縮後の差分情報を入力ベクトルに含めてもよい。
ブロックストレージ層302は、入力ベクトルと、当該データセット群のデータモデルのモデルIDと、当該入力ベクトル及びモデルIDが関連付けられたキーとを、キー変換テーブル401に追加する(S1206)。
図13は、リード処理の流れを示す。
リード処理は、リード要求を受信した場合に開始される。リード要求には、リード元のアドレスが関連付けられている。
ブロックストレージ層302は、キャッシュヒットしたか否か(典型的には、リード対象のデータセット群がキャッシュメモリ部216に存在するか否か)を判断する(S1301)。
S1301の判断結果が偽の場合(S1301:N)、ブロックストレージ層302は、キャッシュ領域をキャッシュメモリ部216から確保する(S1302)。ブロックストレージ層302は、リード元のアドレスに基づきページ位置(リード元のアドレスが属する論理ページに割り当てられている物理ページにおける位置(リード元のアドレスに対応した位置))を、ページマッピングテーブル404を基に特定する(S1303)。
ブロックストレージ層302は、リード元のアドレスを含んだキーに対応するモデルIDを、キー変換テーブル401から特定する(S1304)。
ブロックストレージ層302は、ステージングを行う(S1305)。例えば、S1304でモデルIDが特定された場合、ブロックストレージ層302は、特定したモデルIDのデータモデルを、構成テーブル405を基に、S1303で特定したページ位置からキャッシュメモリ部216(S1302で確保したキャッシュ領域)にリードし、当該キャッシュ領域のキャッシュ属性を“未デコード”とする。一方、例えば、S1304でモデルIDが特定されなかった場合、ブロックストレージ層302は、S1303で特定したページ位置からキャッシュメモリ部216(S1302で確保したキャッシュ領域)にデータセット群をリードし、当該キャッシュ領域のキャッシュ属性を“デコード済”とする。
ブロックストレージ層302は、当該ページ位置を含む物理ページに対応したアクセス特性(I/O負荷)を更新する(S1306)。
S1306の後、又は、S1301の判断結果が真の場合(S1301:Y)、ブロックストレージ層302は、キャッシュ領域の属性が“デコード済”か否かを、キャッシュテーブル403を基に判断する(S1307)。
S1307の判断結果が偽の場合(S1307:N)、ブロックストレージ層302は、キャッシュ領域内のデータモデルのデコード処理(S1308)を行う。
ブロックストレージ層302は、キャッシュ領域内のデータセット群(S1305でリードされたデータセット群、又は、デコード処理において復元されたデータセット群)を返す(S1309)。
以上が、リード処理である。
なお、S1304の後、ブロックストレージ層302は、リード対象のデータモデルと一致度が第1閾値以上のデータモデル(一致データモデル)がキャッシュメモリ部216に既にあるか否かを判断してもよい。当該判断の結果が真の場合には、ブロックストレージ層302は、S1305をスキップしてもよい。これにより、キャッシュメモリ部216の利用効率が向上する。
また、データモデルと当該データモデルを用いて復元されたデータセット群は、同一のキャッシュ領域に格納されてもよいし、異なるキャッシュ領域に格納されてもよい。
また、ブロックストレージ層302は、キャッシュメモリ部216にリードされたデータモデルに対応した一致データモデル(例えば、同一モデルIDのデータモデル)がキャッシュメモリ部216に存在する場合、リード対象のデータモデルと一致データモデルとのうちのいずれかを削除し、削除されたデータモデルのキャッシュ領域に関連付けられているアドレスを、残されているデータモデルのキャッシュ領域に関連付けてよい。これにより、キャッシュメモリ部216の利用効率が向上する。
図14は、デコード処理の流れを示す。
ブロックストレージ層302は、キャッシュメモリ部216におけるデータモデルに入力ベクトル中の入力値105を入力することでデータセット群(パターン103)を得る(S1401)。当該入力ベクトルは、リード元のアドレスを含んだキーに対応した、キー変換テーブル401から特定された入力ベクトルである。なお、データモデルが、差分データモデルの場合、S1401において、下記が行われてよい。
・ブロックストレージ層302は、当該差分データモデル中のモデルIDに対応したデータモデルを取得する。
・ブロックストレージ層302は、当該取得したデータモデルに、当該差分データモデル中のモデル部分を適用することで、新たなデータモデルを取得する。
・ブロックストレージ層302は、当該取得した新たなデータモデルに、リード元のアドレスを含んだキーに対応した入力ベクトル中の入力値を入力する。
ブロックストレージ層302は、差分情報処理をする(S1402)。具体的には、ブロックストレージ層302は、入力ベクトル中の差分情報106、最小値107及び最大値108を、S1401で得られたパターン103に反映する。
ブロックストレージ層302は、S1402で得られたデータセット群のタイプ(例えば、動画、静止画、CSVデータといったタイプ)を識別する(S1403)。そして、ブロックストレージ層302は、後処理(例えば、データタイプ毎のカラム統合やフレーム統合)を行う(S1404)。
デコード処理により、データモデルからデータセット群が復元される。
実施例2を説明する。その際、実施例1との相違点を主に説明し、実施例1との共通点については説明を省略又は簡略する。
図15は、実施例2に係るシステムの論理階層構造を示す。
システム(実施例2に係るストレージシステム1510又はストレージシステム1510を含むシステム)が、ブロックストレージ層1502、データストア層1503及びアプリケーション層1504を提供する。アプリケーション層1504(又は、データストア層1503とアプリケーション層1504との間)に、クライアント層1505がある。ストレージシステム1510が少なくともデータストア層1503を提供する。サーバのようなホストとして機能する少なくとも1つのノード201が、アプリケーション層1504(及びクライアント層1505)を提供するが、ストレージシステム1510が、当該少なくとも1つのノード201を含んでもよい。これらの層1502〜1505の各々は、1以上のコンピュータプログラムが1以上のノード201のプロセッサ部215に実行されることで提供される機能でよい。例えば、ブロックストレージ層1502、データストア層1503、アプリケーション層1504及びクライアント層1505は、それぞれ、ブロックストレージプログラム、データストアプログラム、アプリケーションプログラム及びクライアントプログラムと読み替えられてもよい。アプリケーション層1504(及びクライアント層1505)が、入力されたデータセット群をメモリ部にライトするフロントエンド層の少なくとも一部である。データストア層1503が、データセット群のデータモデルと当該データモデルに対応した入力ベクトルとをPDEV部にライトするバックエンド層の少なくとも一部である。なお、ここで言う「メモリ部」は、クライアントメモリ領域部である。「クライアントメモリ領域部」は、クライアント層1505を提供するノード201におけるメモリ領域部であって、クライアント層1505が管理するメモリ領域部である。クライアントメモリ領域部は、例えば、いわゆる主記憶である。一方、データストア層1503を提供するノード201におけるメモリ領域部であって、データストア層1503が管理するメモリ領域部があり、当該メモリ領域部が、「ストアメモリ領域部」である。クライアントメモリ領域部及びストアメモリ領域部のうちの少なくとも1つが、ストレージシステム1510におけるメモリ部でよい。また、アプリケーション層1504(及びクライアント層1505)を提供するプロセッサ部と、データストア層1503を提供するプロセッサ部とが、ストレージシステム1510におけるプロセッサ部でよい。
データストア層1503及びクライアント層1505(又はアプリケーション層1504)のうちのいずれがエンコード処理を行ってもよい。また、本実施例では、データストア層1503が、デコード処理を行わず、クライアント層1505(又はアプリケーション層1504)が、デコード処理を行うことができる。すなわち、データストア層1503が、データモデル及び入力ベクトルをクライアント層1505に返し、クライアント層1505が、データモデル及び入力ベクトルをクライアントメモリ領域部にライトする。クライアント層1505が、データセット群を利用するときに、クライアントメモリ領域部におけるデータモデルからデータセット群を復元する処理を含むデコード処理を行うことで、データセット群を得る。これにより、クライアントメモリ領域部(主記憶)に常にデータセット群が展開されていることに比べて、クライアントメモリ領域部の使用記憶容量は少なく、故に、クライアントメモリ領域部(主記憶)の利用効率が高い。また、データストア層1503(例えば或るノード201)からクライアント層1505(例えば別のノード201)へ転送されるデータは、データセット群よりもデータ量の少ないことが期待されるデータモデル及び入力ベクトルなので、上り転送量(データストア層1503からクライアント層1505へ転送されるデータの量)を削減することも期待できる。なお、クライアント層1505(又はアプリケーション層1504)がエンコード処理を行うようになっていれば、下り転送量(クライアント層1505からデータストア層1503へ転送されるデータの量)も削減することが期待できる。
なお、実施例1に係るエンコード処理は、可逆変換のエンコード処理、具体的には、エンコード処理前のデータセット群と同一の(誤差の無い)データセット群がデコード処理で復元できるようなエンコード処理が行われる。ブロックストレージ層302より上の層303又は304に対して、実際に格納したデータと同一のデータを返すことを維持するためである。
一方、実施例2に係るエンコード処理は、可逆変換のエンコード処理でもよいし不可逆変換のエンコード処理でもよい。具体的には、実施例2に係るエンコード処理は、ライト対象のデータセット群とデータモデルからの出力としてのデータセット群との誤差と、許容誤差とに基づく情報である誤差情報を生成する処理を含む。すなわち、実施例2では、差分情報106に代えて、誤差情報が採用される。データストア層1503(又はクライアント層1505)は、ライト対象のデータセット群のキーが関連付けられたデータモデルに加えて、生成された誤差情報を含んだ入力ベクトルを、記憶部にライトする。実施例2に係るデコード処理において復元されたデータセット群は、データモデルから出力されたデータセット群が、当該データモデルに関連付いている入力ベクトル中の誤差情報を用いて補正されたデータセット群である。許容誤差が0(つまり、誤差が全く許容されない)であれば、復元されたデータセット群は、エンコード処理前のデータセット群と同一である。許容誤差が0より大きければ、復元されたデータセット群と、エンコード処理前のデータセット群との間では、許容誤差以下の誤差がある。本実施例では、第1閾値(一致判断で使用される閾値)は、可変値であり、許容誤差が大きいと小さい傾向にある。許容誤差が0より大きい場合、下記のうちの少なくとも1つが期待できるため、一層のデータ量の削減が期待できる。
・差分情報106よりも誤差情報の方が圧縮が効きやすい。
・データモデルの一致の範囲が広がり、結果として、削除可能なデータモデルが多くなる。
以下、実施例2をより詳細に説明する。
図16は、ストアメモリ領域部に格納されるテーブルを示す。
ストアメモリ領域部1600は、キー変換テーブル401、モデルハッシュテーブル402、モデルテーブル1601及びストア管理テーブル1602を格納する。
図17は、クライアントメモリ領域部に格納されるテーブルを示す。
クライアントメモリ領域部1700は、キー変換テーブル1701、モデルハッシュテーブル1702、モデルテーブル1703及びストア管理テーブル1704を格納する。
テーブル1701〜1704の各々の少なくとも一部と、テーブル401、402、1601及び1602の各々の少なくとも一部が、同期する(同じ内容である)。例えば、テーブル401又は1701の一方のテーブルが更新された場合、他方のテーブルも同じ内容に更新される。
図18は、ストア管理テーブル1602の構成を示す。
ストア管理テーブル1602は、データストア312に関する情報を格納する。例えば、ストア管理テーブル1602は、データストア312毎に、レコードを有する。各レコードは、ストアID(データストア312のID)、メタ情報、忘却制御情報及びアウトカム情報といった情報を格納する。
メタ情報は、データストア312のメタ情報であり、例えば、カラム数、カラム名、開始時刻及び入力周波数のうちの少なくとも1つを含む。メタ情報は、更に、許容誤差を含む。なお、許容誤差は、データストア312の単位で関連付けられることに代えて、データモデルの単位で関連付けられてもよい。また、メタ情報は、更に、第1閾値(一致判断で使用される閾値)を含んでもよい。
忘却制御情報は、データストア312の忘却を制御するための情報、具体的には、当該データストア312に対応した許容誤差、及び、当該データストア312に属するデータモデルから出力されたデータセット群のうち誤差が許容誤差の範囲外にあるデータセットの補正誤差を調整するための情報である。本実施例では、誤差が許容誤差の範囲にある出力データセットは、当該誤差と許容誤差の範囲とに基づき補正されるが、「補正誤差」は、当該補正後の出力データセットの誤差である。忘却制御情報は、例えば、忘却曲線情報でよい。忘却曲線情報は、記憶の度合い(例えば、レゾリューション、周波数など)の時間経過による動的な変化(例えば、エビングハウスの忘却曲線)を示す情報である。忘却曲線情報は、補正誤差の調整処理である第1の誤差調整処理において参照される。本実施例では、第1の誤差調整処理に加えて(又は代えて)、許容誤差の調整処理である第2の誤差調整処理を行うことができる。第1及び第2の誤差調整処理の少なくとも1つは、後述の利用処理の発生契機で行われてもよいし、アウトカム情報の更新の契機で行われてもよいし、全データストア312の使用率が閾値を超えたことを契機に行われてもよい。
アウトカム情報は、目的(例えば、データ分析アプリケーションのようなアプリケーション層1504の目的)を示す情報である目的情報(例えば、KPI(Key Performance Indicator))と、目的の達成度を示す情報である達成度情報とを含む。達成度情報は、例えば、アプリケーション層1504から設定されてよい。アウトカム情報は、更に、目的達成度の下限値を含んでいてもよい。
図19は、モデルテーブル1601の構成を示す。
モデルテーブル1601は、データモデル毎に、レコードを有する。各レコードは、モデルIDと、データモデルそれ自体とを格納する。
図20は、蓄積処理の流れを示す。
蓄積処理は、ライト処理の一例であり、データストア層1503のAPI(Application Programming Interface)に対して、データストア312を指定した蓄積要求が入力された場合に行われる処理である。蓄積要求には、ストアID、モードID、キー、及び蓄積対象(データモデル又はデータセット群)が関連付けられる。モードIDとしては、“モデル”(蓄積対象がデータモデル)と“データセット群”(蓄積対象がデータセット群)のいずれかが指定される。また、キーは、カラム名、時刻等のレコード情報の少なくとも一部(例えば、蓄積先のアドレス相当の情報)を含んでよい。
データストア層1503は、指定されたストアIDに対応するレコード(ストア管理テーブル1602におけるレコード)を参照し(S2001)、指定されたモードIDが“モデル”か否かを判断する(S2002)。S2002の判断結果が偽の場合(S2002:N)、データストア層1503は、蓄積対象のデータセット群のエンコード処理(図22参照)を行う(S2003)。
S2002の判断結果が真の場合(S2002:Y)、又は、S2003の後、データストア層1503は、蓄積か否かを判断する(S2004)。エンコード処理(S2003)において一致データモデルが見つかっていれば、S2004の判断結果が真となる。エンコード処理(S2003)において一致データモデルが見つかっていなければ、S2004の判断結果が偽となる。エンコード処理(S2003)が行われなかった場合、S2004において、蓄積対象のデータセット群と一致するデータセット群が存在するか否かの一致判断が行われてもよいし、或いは、そのような判断が行われることなくS2004の判断結果が真でもよい。
S2004の判断結果が真の場合(S2004:Y)、データストア層1503は、テーブル更新を行う(S2005)。具体的には、データストア層1503は、蓄積対象のデータモデル(蓄積要求に関連付いたデータモデル、又は、エンコード処理(S2003)において生成されたデータモデル)と、当該データモデルのモデルIDとを、モデルテーブル1601に追加する。また、データストア層1503は、蓄積要求に関連付けられているキーと、当該データモデルのモデルIDと、当該データモデルに対応した入力ベクトルとを、キー変換テーブル401に追加する。
図21は、利用処理の流れを示す。
利用処理は、リード処理の一例であり、データストア層1503のAPIに対して、データストア312を指定した利用要求が入力された場合に行われる処理である。利用要求には、ストアID、モードID及びキーが関連付けられる。モードIDとしては、“モデル”(データモデルの返却)と“データセット群”(データセット群の返却)のいずれかが指定される。また、キーは、カラム名、時刻等のレコード情報の少なくとも一部(例えば、蓄積先のアドレス相当の情報)を含んでよい。
データストア層1503は、指定されたストアIDに対応するレコード(ストア管理テーブル1602におけるレコード)を参照し(S2101)、利用要求に関連付いているキーに対応したモデルID及び入力ベクトルをキー変換テーブル401から特定する(S2102)。データストア層1503は、特定したモデルIDに対応したデータモデルをモデルテーブル1601から特定する(S2103)。データストア層1503は、モードIDが“モデル”か否かを判断する(S2104)。
S2104の判断結果が偽の場合(S2104:N)、データストア層1503は、特定した入力ベクトルを特定したデータモデルに入力してデータセット群を復元するデコード処理(図14参照)を行う(S2105)。そして、データストア層1503は、復元されたデータセット群を返す(S2106)。
S2104の判断結果が真の場合(S2104:Y)、データストア層1503は、特定されたデータモデル(及び入力ベクトル)を返す(S2107)。この場合、データストア層1503とクライアント層1505間の転送量は、S2106での転送量に比べて削減される。S2107で返されたデータモデル(及び入力ベクトル)は、クライアントメモリ領域部1700に格納される。クライアント層1505が、当該データモデル(及び入力ベクトル)から復元されるデータセット群の利用のときに、当該データモデル(及び入力ベクトル)を用いたデコード処理を行う。このため、クライアントメモリ領域部1700に常にデータセット群が展開されていることに比べて、クライアントメモリ領域部1700の使用記憶容量は少なく、故に、クライアントメモリ領域部1700の利用効率が高い。また、クライアント層1505は、利用対象のデータモデルがクライアントメモリ領域部1700に存在するか否かの判断を行うことができる。データセット群ではなくデータモデル(又はモデルハッシュ)が比較対象となるため、ヒット率の向上が期待できる。
図22は、実施例2に係るエンコード処理の流れを示す。
実施例2では、エンコード処理を行うのは、ブロックストレージ層1502より上の層であるため、図12のS1201及びS1202相当の処理は不要である。
データストア層1503は、蓄積対象のデータモデルとの一致度が第1閾値以上のデータモデルである一致データモデルが存在するか否かの一致判断を行う(S2201)。図12のS1203との主な相違点は、参照される第1閾値は、可変値であり、当該データモデルが属するデータストアに対応した許容誤差が大きいと小さい傾向にある点である。
S2201の判断結果が真の場合(S2201:Y)、データストア層1503は、データセット群とパターン(一致データモデルからの出力としてのデータセット群)との誤差と、許容誤差とに基づく情報である誤差情報を生成し、生成した誤差情報を圧縮することで、新たな入力ベクトルを完成させる(S2203)。データストア層1503は、キー変換テーブル401を更新する(S2204)。S2204は、図12のS1206と同様でよい。具体的には、例えば、データストア層1503は、ライト先のアドレスを含んだ新たなキーとS2203で生成した新たな入力ベクトル(圧縮した誤差情報を含んだ入力ベクトル)とを、一致データモデルのモデルIDに新たに関連付ける。
S2201の判断結果が偽の場合(S2201:N)、データストア層1503は、モデルハッシュテーブル402及びモデルテーブル1601を更新する(S2202)。例えば、データストア層1503は、算出されたモデルハッシュと、生成されたデータモデルのモデルIDとを、モデルハッシュテーブル402に追加し、且つ、生成されたデータモデルのモデルIDと、生成されたデータモデルそれ自体を、モデルテーブル1601に追加する。データストア層1503は、データセット群とパターン(データモデルからの出力としてのデータセット群)との誤差と、許容誤差とに基づく情報である誤差情報を生成し、生成した誤差情報を圧縮する(S2203)。誤差情報は、例えば、パターンを構成する複数のデータセット群にそれぞれ対応した複数の補正値の配列でよい。また、データストア層1503は、S2204を行う。
図23は、実施例2に係るデコード処理の流れを示す。デコード処理は、データストア層1503及びクライアント層1505のいずれも行うことができるが、ここでは、クライアント層1505を例に取る。
実施例2では、デコード処理を行うのは、ブロックストレージ層1502より上の層であるため、図14のS1403及びS1404相当の処理は不要である。
クライアント層1505は、クライアントメモリ領域部1700におけるデータモデルに入力ベクトル中の入力値を入力することでデータセット群(パターン)を得る(S2301)。
クライアント層1505は、誤差情報処理をする(S2302)。具体的には、クライアント層1505は、入力ベクトル中の誤差情報を用いて、S2301で得られたパターンを補正する。
図24は、モデル想起処理の流れを示す。
モデル想起処理は、検索処理の一例であり、データストア層1503のAPIに対して、データストア312を指定した想起要求が入力された場合に行われる処理である。想起要求には、モードID及び検索条件が関連付けられる。モードIDとしては、“モデル”(データモデルの入力)と“データセット群”(データセット群の入力)のいずれかが指定される。また、検索条件は、データモデル(又はそれのモデルハッシュ)又はデータセット群を含む。また、検索条件は、モデルID、カラム名及びデータセット範囲といった任意の種類の条件を含んでもよい。
データストア層1503は、ストア管理テーブル1602を参照し(S2401)、モードIDが“モデル”か否かを判断する(S2402)。S2402の判断結果が偽の場合(S2402:N)、データストア層1503は、検索条件に含まれるデータセット群のエンコード処理(図12参照)を行う(S2403)。
S2402の判断結果が真の場合(S2402:Y)、又は、S2403の後、データストア層1503は、比較対象のモデルハッシュ(入力されたデータモデルのモデルハッシュ、又は、S2403で生成されたデータモデルのモデルハッシュ)との一致度が所定値以上のモデルハッシュをモデルハッシュテーブル402から検索する(S2404)。データストア層1503は、見つかったモデルハッシュに対応したモデルIDに関連付いたキーをキー変換テーブル401から特定する(S2405)。データストア層1503は、特定されたキーを返す(S2406)。
このように、検索処理において参照される対象は、データセット群よりもデータ量の少ないモデルハッシュ(又はデータモデル)であるため、高速な処理が期待できる。また、返される対象は、データセット群ではなく、結果としてのキーであるため、転送量を削減することができる。
図25は、GUI(アウトカム設定)の一例を示す。
データストア層1503は、ストア管理テーブル1602に基づき図25に例示するGUI(Graphical User Interface)2500を表示する。GUIに代えて他種の画面が採用されてもよい。
データストア層1503は、データストア312毎に、例えば下記を表示する。
・アウトカム情報中の目的達成度、
・メタ情報中のデータ保持期間(データストア312にデータが格納された日時からの期間)、
・メタ情報中のデータ種別、
・メタ情報中の許容誤差、及び、
・メタ情報中の決定性。
目的達成度は、ユーザにより入力された情報でもよいし、所定の方法で定期的に計算され更新された情報でもよい。
「許容誤差」は、例えば、割合で指定されてもよいし、定数値(例えば、定数値0.01を指定すると、少数第2位までが有効)で指定されてもよい。
また、「決定性」とは、データストア312についていつ利用要求を受けても同じデータセット群を返すことを維持するか否かを意味する。“決定的”が、同じデータセット群を返すことの維持を意味する。“非決定的”が、同じデータセット群を返すことの維持をしないことを意味する。“決定的”が採用されたデータストア312に対応した忘却制御情報は、忘却が無いことを示す情報、すなわち、第1及び第2の誤差調整処理のいずれも行わないことを示す。補正誤差や許容誤差が動的に変わると、復元されるデータセット群が異なるためである。
図25において、下線が引かれた情報要素が、ユーザにより設定変更可能な情報要素の一例である。すなわち、本実施例では、許容誤差を割合や定数値のどちら(又は両方)で指定するか、及び、決定性が、ユーザにより設定変更可能な情報要素である。
なお、“データストア2”について、「ストレージを増設してください」のような、記憶容量の増設の提示があるが、これは、目的達成度をユーザ所望の達成度以上にするためには今後誤差を小さくすることが必須であり、結果として、データ量の削減の度合が下がることが見込まれるからである。既に十分な空きの記憶容量がある場合には、このような提示は無くてもよい。データストア層1503及びクライアント層1505のうちの少なくとも1つが、定期的に又は不定期的に(例えば、ユーザからGUI2500の表示要求を受けたときに、又は、第2の誤差調整処理を行ったときに)、データストア312に対応した目的達成度がユーザ所望の達成度以上か否かを判断し、当該判断の結果が偽の場合に上述のストレージ増設の提示をしてもよい。当該判断は、予め入力されているユーザ所望の達成度(アウトカム情報中の、目的達成度の下限値)を基に行われてもよいし、ユーザからユーザ所望の達成度が満たされているか否かの回答を受け当該回答を基に行われてもよい。
図26は、許容誤差と補正値との関係の一例を示す。なお、実施例2は、モデル化前のデータセット群を構成する各データセット(値)が正の実数であることを前提とするが、モデル化前のデーセット群のうちの少なくとも1つのデータセットが負の値でも正負の情報を保持することで本発明を適用することができる。また、図26は、誤差が割合(誤差率)で指定されるケースの例に基づくが、誤差が定数値で指定されるケースについても本発明を適用することができる。
図26において、K(K1〜K9の各々)は、r/pである。rは、モデル化前のデータセット群におけるデータセットであり、pは、パターンにおけるデータセットである。従って、誤差が無い場合、K=1である。従って、誤差=K−1である。Kが1から離れる程、誤差が大きいことになる。
また、図26において、許容誤差はαである。Kをベースにした場合、許容誤差範囲は、1/(1+α)以上1+α以下と表現される。
誤差情報は、パターン(データモデルからの出力データセット群)を構成する複数の出力データセットにそれぞれ対応した複数の補正値dの配列である。d(及びdの桁数)は、α又はe(補正誤差)が小さい程、大きい傾向にある。言い換えれば、d(及びdの桁数)は、α又はeが大きい程、小さい傾向にある。α又はeが小さくなるにつれて、dは0(所定値の一例)に近づく。従って、α又はeが小さい程、誤差情報には、0が多くなり、結果として、誤差情報の圧縮が効きやすくなる。誤差情報は、上述したように、エンコード処理において生成される。
本実施例では、許容誤差範囲内にあるKに対応した出力データセットについては、補正は不要、すなわち、d=0である。図26の例によれば、K2、K4、K8及びK9の各々に対応した出力データセットの補正は不要である。
一方、許容誤差範囲外にあるKに対応したデータセットについては、補正は必要、すなわち、d>0である。具体的には、Kが許容誤差範囲内に収まるK´となるようなdが決定される。K´=r/r´である。r´=pd、すなわち、r´は、dを用いて補正されたpである。補正後のデータセットr´に誤差が無ければ、K´=1となる。図26の例によれば、K1、K2、K5、K6及びK7がそれぞれ許容誤差範囲内のK1´、K2´、K5´、K6´及びK7´となるよう、K1、K2、K5、K6及びK7にそれぞれ対応した出力データセットの補正値dが決定される。具体的には、補正値dは、log(r/p,底:1+α*2)の値を小数点第1位で四捨五入することで得られた値である。r´は、p*(1+α*2)dである。補正誤差eは、K´−1=(r/r´)−1である。e≦αである。
以下、第1及び第2の誤差調整処理の流れを説明する。第1及び第2の誤差調整処理のいずれも、データストア層1503及びクライアント層1505のいずれが行ってもよいが、本実施例では、データストア層1503が行うものとする。
図27は、第1の誤差調整処理の流れを示す。第1の誤差調整処理は、例えばデータストア312毎に行われる。以下、1つのデータストア312を例に取る(図27の説明において、「対象データストア312」)。
データストア層1503は、許容誤差の範囲内で補正誤差を大きくする(S2701)。具体的には、例えば、データストア層1503は、下記の処理を行う。下記の処理により、大きくされた補正誤差に対応した出力データセットの補正値が更新される。
・データストア層1503は、対象データストア312に対応した許容誤差を、ストア管理テーブル1602から特定する。
・データストア層1503は、対象データストア312に属するデータモデルを、キー変換テーブル401を基に特定する。
・データストア層1503は、特定データモデルから出力されるデータセット群を構成する1以上の出力データセットのうち、補正誤差(図26の例によれば、e=r/r´−1)のある出力データセットについて、当該出力データセットの補正誤差を、所定の規則に従って、許容誤差の範囲内で大きくする。「所定の規則」は、対象データストア312に対応した忘却制御情報が示す規則である。
データストア層1503は、対象データストア312に属する各データモデルについて、キー変換テーブル401から入力ベクトルを誤差情報を読み出し、読み出した入力ベクトル中の誤差情報を伸張し、伸張された誤差情報を、S2701の結果に基づき更新し、更新された誤差情報を圧縮し、圧縮された誤差情報を含んだ入力ベクトルを、キー変換テーブル401にライト(例えば上書き)する(S2702)。
データストア層1503は、S2701の結果(例えば、補正誤差の平均値)を基に、第1閾値を小さくする(S2703)。補正誤差と第1閾値の関係は、例えば予め定義されていてよい。当該関係を基に、S2703が行われる。S2701が行われても第1閾値の変更が不要であれば(例えば、補正誤差の変化が第1閾値の変更が不要な程に小さければ)、S2703はスキップされてよい。
図28は、第2の誤差調整処理の流れを示す。第2の誤差調整処理は、例えばデータストア312毎に行われる。以下、1つのデータストア312を例に取る(図28の説明において、「対象データストア312」)。
データストア層1503は、許容誤差を大きくする(S2801)。具体的には、例えば、データストア層1503は、下記のうちのいずれかの処理を行う。下記の処理により、対象データストア312に属するデータモデルに対応した誤差情報中の各補正値が更新される。
・データストア層1503は、対象データストア312に対応した許容誤差として、ユーザにより大きくされた許容誤差を受けて、当該許容誤差を、ストア管理テーブル1602に設定する。
・データストア層1503は、対象データストア312に対応した許容誤差を、ストア管理テーブル1602から特定する。データストア層1503は、対象データストア312に対応したアウトカム情報中の目的達成度が相対的に高ければ(例えば、現在の目的達成度がユーザ所望の達成度よりも更に高くなっていれば)、許容誤差を大きくする。許容誤差の増加量は、目的達成度と許容誤差との予め定義された関係と、目的達成度と許容誤差との関係の過去の履歴とのうちの少なくとも1つを基に決定されてよい。
データストア層1503は、対象データストア312に属する各データモデルについて、キー変換テーブル401から入力ベクトルを誤差情報を読み出し、読み出した入力ベクトル中の誤差情報を伸張し、伸張された誤差情報を、S2801の結果に基づき更新し、更新された誤差情報を圧縮し、圧縮された誤差情報を含んだ入力ベクトルを、キー変換テーブル401にライト(例えば上書き)する(S2802)。
データストア層1503は、S2801の結果(例えば、更新後の許容誤差)を基に、第1閾値を小さくする(S2803)。許容誤差と第1閾値の関係は、例えば予め定義されていてよい。当該関係を基に、S2803が行われる。S2801が行われても第1閾値の変更が不要であれば(例えば、許容誤差の変化が第1閾値の変更が不要な程に小さければ)、S2803はスキップされてよい。
第2の誤差調整処理によれば、ユーザ所望の目的達成度に比してオーバースペックの記憶容量を削減することが期待できる。例えば、図29に示すように、ユーザ所望の目的達成度がvであるにも関わらず、現在の許容誤差がw1であるとすると、ユーザにとっては過剰に精度の高いデータが格納されていることになる。そこで、許容誤差を、w1から、目的達成度vに対応したw2に大きくすることで、データモデルから復元されるデータセット群の精度は落ちるものの、ユーザ所望の目的達成度を維持し、且つ、記憶容量を削減することが期待できる。
図30は、非同期重複排除処理の流れを示す。
上述したように、一致判断で使用される第1閾値は、補正誤差又は許容誤差が大きくされることで小さくされ得る。従って、蓄積処理においては一致データモデルがあると判断されなくても、蓄積処理から時間が経過した後では、一致データモデルが存在し得ることになる。定期的に又は非定期的に非同期重複排除処理が行われることで、一致データモデルに該当することにあったデータモデルが見つかり、見つかったデータモデルが削除される。結果として、データ量が削減される。非同期重複排除処理は、データストア層1503及びクライアント層1505のいずれが行ってもよいが、本実施例では、データストア層1503が行うものとする。
データストア層1503は、モデルテーブル1601に登録されている各データモデルについて、S3001及びS3002を行う。以下、1つのデータモデルを例に取る(図30の説明において「対象データモデル」)。
データストア層1503は、対象データモデルとの一致度が第1閾値以上のデータモデルである一致データモデルがモデルテーブル1601に格納済か否かの一致判断を行う(S3001)。
S3001の一致判断の結果が真の場合(S3002)、データストア層1503は、対象データモデルと一致データモデルとのうちのいずれかをモデルテーブル1601から削除し、テーブル401及び402を更新する(S3002)。例えば、データストア層1503は、キー変換テーブル401の更新では、削除したデータモデルのモデルIDを削除し、削除したデータモデルのキー及び入力ベクトルを、残ったデータモデルのキーに関連付ける。また、例えば、データストア層1503は、モデルハッシュテーブル402の更新では、削除したデータモデルに対応したレコードを削除する。すなわち、データモデルは削除されるが、削除されたデータモデルの入力ベクトル及びキーが、残ったデータモデルに関連付けられる。
データストア層1503による重複排除処理の結果は、クライアント層1505にもブロックストレージ層1502にも適用されてよい。例えば、データストア層1503は、重複排除処理の結果(削除したデータモデルのモデルIDと、残ったデータモデルのモデルIDとの組を含んだ情報)をクライアント層1505に通知し、クライアント層1505が、通知された結果を基に、テーブル1701〜1703を更新してよい。また、データストア層1503は、削除したデータモデルのアドレス(キーの少なくとも一部)を指定した削除要求をブロックストレージ層1502に送信し、ブロックストレージ層1502が、その削除要求で指定されたアドレスにあるデータを削除してよい。
本実施例では、第2閾値(類似判断で使用される閾値)も、可変値であり、許容誤差が大きいと小さい傾向にあってよい。
実施例3を説明する。その際、実施例1及び2との相違点を主に説明し、実施例1及び2との共通点については説明を省略又は簡略する。
図31は、実施例3に係るシステムの論理階層構造を示す。
実施例3では、エッジノード部250Aとコアノード部250Bとのうちの少なくともエッジノード部250Aがストレージシステム3110を構成する。エッジノード部250Aが、アプリケーション層1504(クライアント層1505)及びデータストア層3103を提供する。以下、エッジノード部250Aは1つのエッジノード201Aで構成され、コアノード部250Bは1つのコアノード201Bで構成されているとする。エッジノード201Aにおけるデータストア層3103が、コアノード201Bとの間でデータの送受信を行う。なお、コアノード201Bとの間でデータの送受信は、データストア層3103に代えて又は加えて、ブロックストレージ層1502やクライアント層1505といった他の層が行ってもよい。
図32は、蓄積処理の流れを示す。
データストア層3103は、S2001〜S2005と同様の処理を行う(S3201〜S3205)。
データストア層3103は、モデルテーブル1601を更新した場合、同一データモデルをコアノード201Bに送信済か否かを判断する(S3206)。例えば、アドレス毎に、送信済か否かの状態が管理されていて、当該状態を基に、S3206の判断が行われてよい。
S3206の判断結果が偽の場合(S3206:N)、データストア層3103は、ストアID、キー及びデータモデルをコアノード201Bに送信する(S3207)。この場合、コアノード201Bにおいて、当該データモデルが、モデルテーブル1601に格納される。
S3206の判断結果が真の場合(S3206:Y)、データストア層3103は、ストアID、キー及びモデルIDをコアノード201Bに送信する(S3208)。この場合、コアノード201Bにおいて、当該モデルIDと同一のモデルIDに対応したキー(キー変換テーブル401におけるキー)に、送信されたキーが追加される。このように、コアノード201Bに既に同一のデータモデルがある場合には、データモデルに代えてモデルIDが送信される。これにより、エッジノード201Aからコアノード201Bへのデータの転送量を削減できる。
以上、幾つかの実施例を説明したが、これらは本発明の説明のための例示であって、本発明の範囲をこれらの実施例にのみ限定する趣旨ではない。本発明は、他の種々の形態でも実施することが可能である。
例えば、実施例1〜3を、下記のように総括することができる。
「差分情報」とは、データモデルからの出力データセット群(生成値)と元のデータセット群(ライト対象のデータセット群)との誤差を表す情報(配列)であり、可逆のため正確な差分値である。
「誤差情報」とは、データモデルからの出力データセット群と元のデータセット群との誤差をログスケールで表す情報(配列)であり、非可逆なので正確ではないが(但し、許容誤差がゼロであれば正確である)、圧縮が効きやすい。
「データモデル」とは、データセット群の生成規則としてのモデルであり、実行主体に相当する。データモデルは、新規データモデル、差分データモデル、類似データモデル及び一致データモデルの総称とすることもできる。
「データセット」とは、データセット群の要素である。
「データセット群」とは、1個のデータモデルに対応するデータセットの集合である。
「一致度」とは、類似性を表す指標である。
「新規データモデル」とは、新たに生成されるデータモデルである(差分データモデルではない)。
「差分データモデル」とは、生成済みデータモデル(典型的には類似データモデル)に接続させるデータモデル(新規データモデルよりもサイズが小さいデータモデルであって、差分情報とは別)である。なお、生成済みデータモデルが「差分データモデル」であることもあり得る。つまり、1つの差分データモデルが、別の差分データモデルのモデルIDを含むこともあり得る。
対象データモデルに対して、「一致データモデル」とは、対象データモデルとの一致度が第1閾値以上のデータモデルのうちのいずれか(例えば、一致度が最も大きいデータモデル)である。一致データモデルが存在する場合、新たなデータモデルは作成されず、一致データモデルが、2以上のキーに共有されることになる。
対象データモデルに対して、「類似データモデル」とは、対象データモデルとの一致度が第1閾値未満であるが第2閾値以上であるデータモデルのうちのいずれか(例えば、一致度が最も大きいデータモデル)であり、差分データモデルのベースとなるデータモデルである。上述したように、類似データモデルが別の差分データモデルであることもあり得る。対象データモデルに対して一致データモデルも類似データモデルも存在しない場合(つまり、いずれの既存のデータモデルも、対象データモデルとの一致度が第2閾値未満の場合)、新たなデータモデルが生成される。
上述の通りのため、差分データモデルは、一致データモデル及び類似データモデルのいずれにも該当することがあり得る。つまり、一致データモデル又は類似データモデルとして特定されたデータモデルが、差分データモデルであることもある。
また、例えば、キー:入力ベクトルは、1:1、又は、多:1でよい。後者は、同一のデータセット群がライト対象とされることもあり得るためである(つまり、データモデルに加えて入力ベクトルも同一となることがあり得るためである)。
また、例えば、キー:モデルID(データモデル)は、1:1、又は、多:1でよい。すなわち、異なる2以上のキーが同一のモデルID(データモデル)を共有することがあり得る。
また、下記の表現が採用されてよい。
<表現1>
1以上のメモリであるメモリ部と1以上のPDEV(不揮発性の物理記憶デバイス)であるPDEV部とのうち少なくとも1つを含む記憶部と、
前記記憶部に接続された1以上のプロセッサであるプロセッサ部と
を有し、
前記プロセッサ部は、ライト対象の1以上のデータセットであるライト対象のデータセット群のライト処理において、
(W1)当該ライト対象のデータセット群の規則性を示し1以上の入力値を入力としデータセット群を出力とするデータモデルを生成する処理を含んだエンコード処理を行い、
(W2)前記エンコード処理において生成され、当該ライト対象のデータセット群のキーが関連付けられたデータモデルを、前記記憶部にライトする、
ストレージシステム。
<表現2>
各データセット群について、当該データセット群のキーは、当該データセット群のアドレスを含み、
前記プロセッサ部は、リード対象のデータセット群のリード処理において、
(R1)前記記憶部から、リード元のアドレスを含んだキーに対応したデータモデルを特定し、
(R2)前記特定されたデータモデルを用いてデータセット群を復元する処理を含んだデコード処理を行い、
(R3)前記デコード処理において復元されたデータセット群を返す、
表現1に記載のストレージシステム。
<表現3>
前記プロセッサ部は、
前記ライト対象のデータセット群のデータモデルとの一致度が第1閾値以上のデータモデルである一致データモデルが前記記憶部に格納済か否かの一致判断を行い、
当該一致判断の結果が真の場合、
前記ライト処理において、(W2)に代えて、当該一致データモデルに対して当該ライト対象データセット群のキーを関連付けることを行う、又は、
前記ライト対象のデータセット群のデータモデルと前記一致データモデルとのうちのいずれかを前記記憶部から削除する、
表現1に記載のストレージシステム。
<表現4>
前記一致判断の結果が偽の場合、前記プロセッサ部は、
前記ライト対象のデータセット群のデータモデルとの一致度が前記第1閾値未満第2閾値以上のデータモデルである類似データモデルがあれば、当該類似データモデルのモデルIDと、当該類似データモデルと前記ライト対象のデータセット群のデータモデルとの差分データとを含んだデータモデルを、前記ライト対象のデータセット群のデータモデルとして、生成する、
表現3に記載のストレージシステム。
<表現5>
前記プロセッサ部は、検索処理において、
検索条件に適合するデータモデルである対象データモデルを検索し、
見つかった当該対象データモデルに関連付けられているキーを返す、
表現1に記載のストレージシステム。
<表現6>
各データモデルは、当該データモデルに対応したデータセット群における最大値及び最小値の各々が正規化された値に基づく、
表現1に記載のストレージシステム。
<表現7>
前記プロセッサ部は、前記ライト対象のデータセット群のライト先のアドレスについてのI/O負荷が所定値未満である、又は、前記プロセッサ部の負荷が所定値未満である場合に、前記ライト対象のデータセット群について(W1)を行う、
表現1に記載のストレージシステム。
<表現8>
(W1)での前記エンコード処理は、前記ライト対象のデータセット群と、前記データモデルからの出力としてのデータセット群との差分である差分情報を生成する処理を含み、
(W2)において、前記プロセッサ部は、前記ライト対象のデータセット群のキーが関連付けられたデータモデルに加えて、前記生成された差分情報を、前記記憶部にライトし、
(R2)での前記デコード処理において復元されたデータセット群は、前記データモデルから出力されたデータセット群に、当該データモデルに関連付いている差分情報が反映されたデータセット群である、
表現2に記載のストレージシステム。
<表現9>
(W1)での前記エンコード処理は、前記ライト対象のデータセット群と、前記データモデルからの出力としてのデータセット群との誤差と許容誤差とに基づく情報である誤差情報を生成する処理を含み、
(W2)において、前記プロセッサ部は、前記ライト対象のデータセット群のキーが関連付けられたデータモデルに加えて、前記生成された誤差情報を、前記記憶部にライトし、
(R2)での前記デコード処理において復元されたデータセット群は、前記データモデルから出力されたデータセット群が、当該データモデルに関連付いている誤差情報を用いて補正されたデータセット群である、
表現2に記載のストレージシステム。
<表現10>
前記記憶部は、前記1以上のメモリであるメモリ部を含み、
前記プロセッサ部が、入力された前記ライト対象のデータセット群を前記メモリ部にライトするフロントエンド層を提供し、
前記フロントエンド層が、
当該ライト対象のデータセット群のデータモデルを1以上のPDEV(不揮発性の物理記憶デバイス)であるPDEV部にライトするバックエンド層を通じて、リード対象のデータセット群のデータモデルを前記メモリ部に読み出し、
(R2)を行う、
表現9に記載のストレージシステム。
<表現11>
前記プロセッサ部が、各データモデルについて、前記誤差情報を圧縮して前記記憶部にライトするようになっており、
各データモデルについて、
前記誤差情報は、当該データモデルから出力されたデータセット群を構成する1以上のデータセットである1以上の出力データセットにそれぞれ対応した1以上の補正値を含み、
補正誤差が大きくされた場合には当該大きくされた補正誤差に対応した補正値が所定値に近づく、及び、許容誤差が大きくされた場合には前記1以上の補正値の各々が所定値に近づく、のうちの少なくとも1つの傾向があり、
誤差が前記許容誤差の範囲にある出力データセットは、当該誤差と前記許容誤差の範囲とに基づき補正され、当該補正後の出力データセットの誤差が、当該出力データセットについての前記補正誤差であり、
前記プロセッサ部が、第1の誤差調整処理と第2の誤差調整処理とのうちの少なくとも1つの誤差調整処理を定期的に又は不定期的に行い、
前記記憶部に格納されている少なくとも1つのデータモデルについて、前記第1の誤差調整処理は、
当該データモデルから出力されるデータセット群を構成する1以上のデータセットである1以上の出力データセットのうち、補正誤差のある出力データセットについて、当該出力データセットの補正誤差を、所定の規則に従って前記許容誤差の範囲内で大きくする処理と、
当該データモデルに対応した誤差情報を伸張する処理と、
前記伸張された誤差情報を、前記大きくされた補正誤差に基づき更新する処理と、
前記更新された誤差情報を、圧縮してライトする処理と
を含み、
前記記憶部に格納されている少なくとも1つのデータモデルについて、前記第2の誤差調整処理は、
当該データモデルに対応した許容誤差を大きくする処理と、
当該データモデルに対応した誤差情報を伸張する処理と、
前記伸張された誤差情報を、前記大きくされた許容誤差に基づき更新する処理と、
前記更新された誤差情報を、圧縮してライトする処理と
を含む、
表現9に記載のストレージシステム。
<表現12>
前記プロセッサ部は、
前記ライト対象のデータセット群のデータモデルとの一致度が第1閾値以上のデータモデルである一致データモデルが前記記憶部に格納済か否かの一致判断を行い、
当該一致判断の結果が真の場合、
前記ライト処理において、(W2)に代えて、当該一致データモデルに対して当該ライト対象データセット群のキーを関連付けることを行う、又は、
前記ライト対象のデータセット群のデータモデルと前記一致データモデルとのうちのいずれかを前記記憶部から削除し、
前記第1閾値は、可変値であり、前記許容誤差が大きいと小さい傾向にある、
表現11に記載のストレージシステム。
<表現13>
1以上のコアノードであるコアノード部に接続された1以上のエッジノードであるエッジノード部を有し、
前記エッジノード部が、前記プロセッサ部及び前記記憶部を有し、
前記プロセッサ部が、
前記ライト対象のデータセット群のデータモデルと同一のデータモデルを前記コアノード部に送信済か否かの判断である送信判断を行い、
当該送信判断の結果が偽の場合、当該データセット群のキーと当該データモデルとを前記コアノード部に送信し、
当該送信判断の結果が真の場合、当該データセット群のキーと当該データモデルのモデルIDとを前記コアノード部に送信する、
表現1に記載のストレージシステム。
<表現14>
ライト対象の1以上のデータセットであるライト対象のデータセット群のライト処理において、
(W1)当該ライト対象のデータセット群の規則性を示し1以上の入力値を入力としデータセット群を出力とするデータモデルを生成する処理を含んだエンコード処理を行い、
(W2)前記エンコード処理において生成され、当該ライト対象のデータセット群のキーが関連付けられたデータモデルを、ライトする、
記憶制御方法。
<表現15>
ライト対象の1以上のデータセットであるライト対象のデータセット群のライト処理において、
(W1)当該ライト対象のデータセット群の規則性を示し1以上の入力値を入力としデータセット群を出力とするデータモデルを生成する処理を含んだエンコード処理を行い、
(W2)前記エンコード処理において生成され、当該ライト対象のデータセット群のキーが関連付けられたデータモデルを、ライトする、
ことをコンピュータに実行させるコンピュータプログラム。