(57)【要約】【課題】ライト対象のデータが、既存の圧縮方法による圧縮に不向きのデータであっても、データ量を削減する。【解決手段】ストレージシステムは、ライト対象の１以上のデータセットであるライト対象のデータセット群のライト処理において、当該ライト対象のデータセット群の規則性を示し１以上の入力値を入力としデータセット群を出力とするデータモデルを生成する処理を含んだエンコード処理を行う。当該ライト処理において、ストレージシステムは、エンコード処理において生成され、当該ライト対象のデータセット群のキーが関連付けられたデータモデルを、ライトする。【選択図】図１
2019095913.tif 000002
【特許請求の範囲】
【請求項１】
１以上のメモリであるメモリ部と１以上のＰＤＥＶ（不揮発性の物理記憶デバイス）であるＰＤＥＶ部とのうち少なくとも１つを含む記憶部と、
前記記憶部に接続された１以上のプロセッサであるプロセッサ部と
を有し、
前記プロセッサ部は、ライト対象の１以上のデータセットであるライト対象のデータセット群のライト処理において、
（Ｗ１）当該ライト対象のデータセット群の規則性を示し１以上の入力値を入力としデータセット群を出力とするデータモデルを生成する処理を含んだエンコード処理を行い、
（Ｗ２）前記エンコード処理において生成され、当該ライト対象のデータセット群のキーが関連付けられたデータモデルを、前記記憶部にライトする、
ストレージシステム。
【請求項２】
各データセット群について、当該データセット群のキーは、当該データセット群のアドレスを含み、
前記プロセッサ部は、リード対象のデータセット群のリード処理において、
（Ｒ１）前記記憶部から、リード元のアドレスを含んだキーに対応したデータモデルを特定し、
（Ｒ２）前記特定されたデータモデルを用いてデータセット群を復元する処理を含んだデコード処理を行い、
（Ｒ３）前記デコード処理において復元されたデータセット群を返す、
請求項１に記載のストレージシステム。
【請求項３】
前記プロセッサ部は、
前記ライト対象のデータセット群のデータモデルとの一致度が第１閾値以上のデータモデルである一致データモデルが前記記憶部に格納済か否かの一致判断を行い、
当該一致判断の結果が真の場合、
前記ライト処理において、（Ｗ２）に代えて、当該一致データモデルに対して当該ライト対象データセット群のキーを関連付けることを行う、又は、
前記ライト対象のデータセット群のデータモデルと前記一致データモデルとのうちのいずれかを前記記憶部から削除する、
請求項１に記載のストレージシステム。
【請求項４】
前記一致判断の結果が偽の場合、前記プロセッサ部は、
前記ライト対象のデータセット群のデータモデルとの一致度が前記第１閾値未満第２閾値以上のデータモデルである類似データモデルがあれば、当該類似データモデルのモデルＩＤと、当該類似データモデルと前記ライト対象のデータセット群のデータモデルとの差分データとを含んだデータモデルを、前記ライト対象のデータセット群のデータモデルとして、生成する、
請求項３に記載のストレージシステム。
【請求項５】
前記プロセッサ部は、検索処理において、
検索条件に適合するデータモデルである対象データモデルを検索し、
見つかった当該対象データモデルに関連付けられているキーを返す、
請求項１に記載のストレージシステム。
【請求項６】
各データモデルは、当該データモデルに対応したデータセット群における最大値及び最小値の各々が正規化された値に基づく、
請求項１に記載のストレージシステム。
【請求項７】
前記プロセッサ部は、前記ライト対象のデータセット群のライト先のアドレスについてのＩ／Ｏ負荷が所定値未満である、又は、前記プロセッサ部の負荷が所定値未満である場合に、前記ライト対象のデータセット群について（Ｗ１）を行う、
請求項１に記載のストレージシステム。
【請求項８】
（Ｗ１）での前記エンコード処理は、前記ライト対象のデータセット群と、前記データモデルからの出力としてのデータセット群との差分である差分情報を生成する処理を含み、
（Ｗ２）において、前記プロセッサ部は、前記ライト対象のデータセット群のキーが関連付けられたデータモデルに加えて、前記生成された差分情報を、前記記憶部にライトし、
（Ｒ２）での前記デコード処理において復元されたデータセット群は、前記データモデルから出力されたデータセット群に、当該データモデルに関連付いている差分情報が反映されたデータセット群である、
請求項２に記載のストレージシステム。
【請求項９】
（Ｗ１）での前記エンコード処理は、前記ライト対象のデータセット群と、前記データモデルからの出力としてのデータセット群との誤差と許容誤差とに基づく情報である誤差情報を生成する処理を含み、
（Ｗ２）において、前記プロセッサ部は、前記ライト対象のデータセット群のキーが関連付けられたデータモデルに加えて、前記生成された誤差情報を、前記記憶部にライトし、
（Ｒ２）での前記デコード処理において復元されたデータセット群は、前記データモデルから出力されたデータセット群が、当該データモデルに関連付いている誤差情報を用いて補正されたデータセット群である、
請求項２に記載のストレージシステム。
【請求項１０】
前記記憶部は、前記１以上のメモリであるメモリ部を含み、
前記プロセッサ部が、入力された前記ライト対象のデータセット群を前記メモリ部にライトするフロントエンド層を提供し、
前記フロントエンド層が、
当該ライト対象のデータセット群のデータモデルを１以上のＰＤＥＶ（不揮発性の物理記憶デバイス）であるＰＤＥＶ部にライトするバックエンド層を通じて、リード対象のデータセット群のデータモデルを前記メモリ部に読み出し、
（Ｒ２）を行う、
請求項９に記載のストレージシステム。
【請求項１１】
前記プロセッサ部が、各データモデルについて、前記誤差情報を圧縮して前記記憶部にライトするようになっており、
各データモデルについて、
前記誤差情報は、当該データモデルから出力されたデータセット群を構成する１以上のデータセットである１以上の出力データセットにそれぞれ対応した１以上の補正値を含み、
補正誤差が大きくされた場合には当該大きくされた補正誤差に対応した補正値が所定値に近づく、及び、許容誤差が大きくされた場合には前記１以上の補正値の各々が所定値に近づく、のうちの少なくとも１つの傾向があり、
誤差が前記許容誤差の範囲にある出力データセットは、当該誤差と前記許容誤差の範囲とに基づき補正され、当該補正後の出力データセットの誤差が、当該出力データセットについての前記補正誤差であり、
前記プロセッサ部が、第１の誤差調整処理と第２の誤差調整処理とのうちの少なくとも１つの誤差調整処理を定期的に又は不定期的に行い、
前記記憶部に格納されている少なくとも１つのデータモデルについて、前記第１の誤差調整処理は、
当該データモデルから出力されるデータセット群を構成する１以上のデータセットである１以上の出力データセットのうち、補正誤差のある出力データセットについて、当該出力データセットの補正誤差を、所定の規則に従って前記許容誤差の範囲内で大きくする処理と、
当該データモデルに対応した誤差情報を伸張する処理と、
前記伸張された誤差情報を、前記大きくされた補正誤差に基づき更新する処理と、
前記更新された誤差情報を、圧縮してライトする処理と
を含み、
前記記憶部に格納されている少なくとも１つのデータモデルについて、前記第２の誤差調整処理は、
当該データモデルに対応した許容誤差を大きくする処理と、
当該データモデルに対応した誤差情報を伸張する処理と、
前記伸張された誤差情報を、前記大きくされた許容誤差に基づき更新する処理と、
前記更新された誤差情報を、圧縮してライトする処理と
を含む、
請求項９に記載のストレージシステム。
【請求項１２】
前記プロセッサ部は、
前記ライト対象のデータセット群のデータモデルとの一致度が第１閾値以上のデータモデルである一致データモデルが前記記憶部に格納済か否かの一致判断を行い、
当該一致判断の結果が真の場合、
前記ライト処理において、（Ｗ２）に代えて、当該一致データモデルに対して当該ライト対象データセット群のキーを関連付けることを行う、又は、
前記ライト対象のデータセット群のデータモデルと前記一致データモデルとのうちのいずれかを前記記憶部から削除し、
前記第１閾値は、可変値であり、前記許容誤差が大きいと小さい傾向にある、
請求項１１に記載のストレージシステム。
【請求項１３】
１以上のコアノードであるコアノード部に接続された１以上のエッジノードであるエッジノード部を有し、
前記エッジノード部が、前記プロセッサ部及び前記記憶部を有し、
前記プロセッサ部が、
前記ライト対象のデータセット群のデータモデルと同一のデータモデルを前記コアノード部に送信済か否かの判断である送信判断を行い、
当該送信判断の結果が偽の場合、当該データセット群のキーと当該データモデルとを前記コアノード部に送信し、
当該送信判断の結果が真の場合、当該データセット群のキーと当該データモデルのモデルＩＤとを前記コアノード部に送信する、
請求項１に記載のストレージシステム。
【請求項１４】
ライト対象の１以上のデータセットであるライト対象のデータセット群のライト処理において、
（Ｗ１）当該ライト対象のデータセット群の規則性を示し１以上の入力値を入力としデータセット群を出力とするデータモデルを生成する処理を含んだエンコード処理を行い、
（Ｗ２）前記エンコード処理において生成され、当該ライト対象のデータセット群のキーが関連付けられたデータモデルを、ライトする、
記憶制御方法。
【請求項１５】
ライト対象の１以上のデータセットであるライト対象のデータセット群のライト処理において、
（Ｗ１）当該ライト対象のデータセット群の規則性を示し１以上の入力値を入力としデータセット群を出力とするデータモデルを生成する処理を含んだエンコード処理を行い、
（Ｗ２）前記エンコード処理において生成され、当該ライト対象のデータセット群のキーが関連付けられたデータモデルを、ライトする、
ことをコンピュータに実行させるコンピュータプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、概して、記憶制御、例えば、データ量の削減に関する。
【背景技術】
【０００２】
データ量を削減するストレージシステムが知られている（例えば特許文献１）。その種のストレージシステムは、一般に、圧縮によりデータ量を削減する。既存な圧縮方法の１つとして、ランレングス法のように、所定のブロック単位内で出現頻度の高い文字列を辞書化しより小さなサイズの符号に置換する方法が知られている。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２００７−１９９８９１号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
産業用途又は他の用途にＩｏＴが導入されてきている。ＩｏＴが導入された場合、一般に、多数のセンサからのセンサデータ（例えば、計測値の時系列データ）を格納し、格納されている大量のセンサデータを分析することが行われる。
【０００５】
限られた資源の中で大量のセンサデータを格納するためには、センサデータを圧縮して格納することが考えられる。
【０００６】
しかし、センサデータは、一般に、同じ値が連続して出現する可能性の低いデータであり、既存の圧縮方法による圧縮に不向きのデータの一種である。
【０００７】
将来、ますますＩｏＴの導入が進み利用されるセンサの数が膨大になると考えられる。故に、格納する必要のあるセンサデータの量が更に増え、大量の記憶資源が必要になってしまうと考えられる。
【０００８】
既存の圧縮方法による圧縮に不向きのデータは、単純な数字のみのセンサデータに限らない。例えば、或る種の製品番号のように、数値と記号が混在するデータも、同じ値が非連続の可能性が高いため、既存の圧縮方法による圧縮に不向きである。
【０００９】
ライト対象のデータが、既存の圧縮方法による圧縮に不向きのデータであっても、データ量を削減することが望まれる。
【課題を解決するための手段】
【００１０】
ストレージシステムは、ライト対象の１以上のデータセットであるライト対象のデータセット群のライト処理において、当該ライト対象のデータセット群の規則性を示し１以上の入力値を入力としデータセット群を出力とするデータモデルを生成する処理を含んだエンコード処理を行う。ストレージシステムは、エンコード処理において生成され、当該ライト対象のデータセット群のキーが関連付けられたデータモデルを、ライトする。
【発明の効果】
【００１１】
ライト対象のデータが、既存の圧縮方法による圧縮に不向きのデータであっても、データ量を削減することが期待できる。
【図面の簡単な説明】
【００１２】
【図１】実施例１に係るストレージシステムの概要図である。
【図２】システム構成の一例を示す。
【図３】システムの論理階層構造を示す。
【図４】ブロックメモリ領域部に格納されるテーブルを示す。
【図５】キー変換テーブルの構成を示す。
【図６】モデルハッシュテーブルの構成を示す。
【図７】キャッシュテーブルの構成を示す。
【図８】ページマッピングテーブルの構成を示す。
【図９】構成テーブルの構成を示す。
【図１０】同期ライト処理の流れを示す。
【図１１】非同期ライト処理の流れを示す。
【図１２】エンコード処理の流れを示す。
【図１３】リード処理の流れを示す。
【図１４】デコード処理の流れを示す。
【図１５】実施例２に係るシステムの論理階層構造を示す。
【図１６】ストアメモリ領域部に格納されるテーブルを示す。
【図１７】クライアントメモリ領域部に格納されるテーブルを示す。
【図１８】ストア管理テーブルの構成を示す。
【図１９】モデルテーブルの構成を示す。
【図２０】蓄積処理の流れを示す。
【図２１】利用処理の流れを示す。
【図２２】実施例２に係るエンコード処理の流れを示す。
【図２３】実施例２に係るデコード処理の流れを示す。
【図２４】モデル想起処理の流れを示す。
【図２５】ＧＵＩ（アウトカム設定）の一例を示す。
【図２６】許容誤差と補正値との関係の一例を示す。
【図２７】第１の誤差調整処理の流れを示す。
【図２８】第２の誤差調整処理の流れを示す。
【図２９】目標達成度と許容誤差との関係の一例を示す。
【図３０】非同期重複排除処理の流れを示す。
【図３１】実施例３に係るシステムの論理階層構造を示す。
【図３２】実施例３に係る蓄積処理の流れを示す。
【発明を実施するための形態】
【００１３】
以下の説明では、「インターフェース部」は、１以上のインターフェースでよい。当該１以上のインターフェースは、ユーザインターフェース部と、通信インターフェース部とのうちの少なくとも通信インターフェース部を含んでよい。ユーザインターフェース部は、１以上のＩ／Ｏデバイス（例えば入力デバイス（例えばキーボード及びポインティングデバイス）と出力デバイス（例えば表示デバイス））と表示用計算機とのうちの少なくとも１つのＩ／Ｏデバイスでもよいし、それに代えて又は加えて、当該少なくとも１つのＩ／Ｏデバイスに対するインターフェースデバイスでもよい。通信インターフェース部は、１以上の通信インターフェースデバイスでよい。１以上の通信インターフェースデバイスは、１以上の同種の通信インターフェースデバイス（例えば１以上のＮＩＣ（Network Interface Card））であってもよいし２以上の異種の通信インターフェースデバイス（例えばＮＩＣとＨＢＡ（Host Bus Adapter））であってもよい。
【００１４】
以下の説明では、「メモリ部」は、１以上のメモリでよい。少なくとも１つのメモリは、揮発性メモリであってもよいし不揮発性メモリであってもよい。メモリ部は、主に、プロセッサ部による処理の際に使用される。
【００１５】
また、以下の説明では、「ＰＤＥＶ部」は、１以上のＰＤＥＶでよい。「ＰＤＥＶ」は、物理的な記憶デバイスを意味し、典型的には、不揮発性の記憶デバイス（例えば補助記憶デバイス）、例えばＨＤＤ（Hard Disk Drive）又はＳＳＤ（Solid State Drive）である。ＰＤＥＶ部は、ＲＡＩＤグループであってもよい。「ＲＡＩＤ」は、Redundant Array of Independent (or Inexpensive) Disksの略である。
【００１６】
また、以下の説明では、「記憶部」は、メモリ部及びＰＤＥＶ部のうちの少なくとも１つ（典型的には、少なくともメモリ部）を含む。
【００１７】
また、以下の説明では、「プロセッサ部」は、１以上のプロセッサでよい。少なくとも１つのプロセッサは、典型的には、ＣＰＵ（Central Processing Unit）のようなマイクロプロセッサであるが、ＧＰＵ（Graphics Processing Unit）のような他種のプロセッサでもよい。１以上のプロセッサの各々は、シングルコアでもよいしマルチコアでもよい。一部のプロセッサは、処理の一部または全部を行うハードウェア回路でもよい。
【００１８】
また、以下の説明では、「ｋｋｋ層」の表現にて機能を説明することがあるが、機能は、１以上のコンピュータプログラムがプロセッサ部によって実行されることで実現されてもよいし、１以上のハードウェア回路（例えばＦＰＧＡ（Field-Programmable Gate Array）、ＡＳＩＣ（Application Specific Integrated Circuit）、ニューロモーフィックデバイス、又は、量子型デバイス）によって実現されてもよい。プログラムがプロセッサ部によって実行されることで機能が実現される場合、定められた処理が、適宜に記憶部及び／又はインターフェース部等を用いながら行われるため、機能はプロセッサ部の少なくとも一部とされてもよい。機能を主語として説明された処理は、プロセッサ部あるいはそのプロセッサ部を有する装置が行う処理としてもよい。プログラムは、プログラムソースからインストールされてもよい。プログラムソースは、例えば、プログラム配布計算機又は計算機が読み取り可能な記録媒体（例えば非一時的な記録媒体）であってもよい。各機能の説明は一例であり、複数の機能が１つの機能にまとめられたり、１つの機能が複数の機能に分割されたりしてもよい。
【００１９】
また、以下の説明では、「ｘｘｘテーブル」といった表現にて情報を説明することがあるが、情報は、どのようなデータ構造で表現されていてもよい。すなわち、情報がデータ構造に依存しないことを示すために、「ｘｘｘテーブル」を「ｘｘｘ情報」と言うことができる。また、以下の説明において、各テーブルの構成は一例であり、１つのテーブルは、２以上のテーブルに分割されてもよいし、２以上のテーブルの全部または一部が１つのテーブルであってもよい。
【００２０】
また、以下の説明では、同種の要素を区別して説明する場合は、その要素の参照符号を使用し（例えばノード２０１Ａ、２０１Ｂ）、同種の要素を区別しないで説明する場合は、その要素の参照符号の共通部分を使用することがある（例えばノード２０１）。
【００２１】
また、以下の説明では、「ストレージシステム」は、１以上の物理的なストレージ装置を含む。「物理的なストレージ装置」は、記憶部を有している装置であればよく、故に、例えば、物理的な汎用計算機でもよい。少なくとも１つの物理的なストレージ装置が、仮想的な計算機（例えばＶＭ（Virtual Machine））を実行してもよいし、ＳＤｘ（Software-Defined anything）を実行してもよい。ＳＤｘとしては、例えば、ＳＤＳ（Software Defined Storage）（仮想的なストレージ装置の一例）又はＳＤＤＣ（Software-defined Datacenter）を採用することができる。
【００２２】
また、以下の説明では、「データセット」とは、アプリケーションプログラムのようなプログラムから見た１つの論理的な電子データの塊であり、例えば、レコード、ファイル、キーバリューペア及びタプルのうちのいずれでもよい。
【００２３】
以下、図面を参照しながら、幾つかの実施例を説明する。なお、以下の説明において、データセット群は、複数のデータセットから構成されるが、データセット群を構成するデータセットの数が１でも本発明が適用されてよい。
【実施例１】
【００２４】
図１は、実施例１に係るストレージシステムの概要図である。
【００２５】
本実施例に係るストレージシステム１１０は、ライト対象の複数のデータセットであるライト対象のデータセット群を、当該ライト対象のデータセット群の規則性を示し１以上の入力値を入力としデータセット群を出力とするデータモデルと化し、当該データモデルを、当該ライト対象のデータセット群のキーに関連付けて辞書化する。データモデルの辞書化が、データセット群のライトに相当する。
【００２６】
データモデルは、典型的には、数式処理、波形の形状及び確率分布などの規則性を表現したバイナリ列である。データモデル（及び後述の入力ベクトル）のデータ量の増加量は、ライト対象のデータセット群のデータ量の増加量に比して小さい。このため、データ量の削減の効果は、ライト対象のデータセット群のデータ量が大きい程、高いことが期待される。
【００２７】
データモデルは、１以上の入力値のようなデータと違い、入力されたデータを処理する実行主体に相当する。データモデルとして、例えば、ニューラルネットワークのようなモデルを採用することができる。一般に、ニューラルネットワークのようなモデルは、故障率の算出や画像の認識といったような分析に使用される。本実施例は、そのようなモデルを、データセット群の規則性を示すデータモデルの一例として採用し、ストレージシステム１１０は、１以上のデータモデル（実行主体）を１以上のデータセット群に代えて保持する新規なストレージシステムである。
【００２８】
図１を参照して当該ストレージシステム１１０の概要をより詳細に説明する。なお、データモデルには、データモデルとして採用されるモデルの種類によっては必ずしも後述の入力ベクトルを必要としない（例えば、入力層のユニットが１個で、入力値として、０からＮまでの決められた整数値を用いる場合は、あえてそれを保存する必要はない）。
【００２９】
ストレージシステム１１０は、記憶部１６０と、記憶部１６０に接続されたプロセッサ部１８０とを有する。記憶部１６０は、１以上のキャッシュメモリであるキャッシュメモリ部１９５を含む。キャッシュメモリは、少なくとも１つのメモリに設けられたメモリ領域であり、Ｉ／Ｏ（Input/Output）対象のデータが一時的に格納されるメモリ領域である。
【００３０】
記憶部１６０は、モデル辞書１５０を格納する。モデル辞書１５０は、データモデルの辞書であり、キー毎に、データモデルと入力ベクトルを格納する。キーは、例えば、ライト先のアドレス（例えば、ライト先の論理ボリュームのＩＤと、当該論理ボリュームにおける領域のアドレス（例えばＬＢＡ（Logical Block Address）））を含む。
【００３１】
ストレージシステム１１０において、時系列データ１００（例えば、センサによって計測された値の時系列のデータなどの、数値化可能な情報を含む配列）の各部分が、ライト対象のデータセット群となる。以下、図１の説明において、主に１つのデータセット群１０１を例に取る。データセット群１０１は、所定のデータセット範囲（ここでは時刻範囲）に属する複数のデータセットである。ここで言う「データセット」は、時刻（計測時刻）と値（計測値）を含む。データセット範囲がｘ秒間であって、ｙ個のデータセットがデータセット群１０１を構成している場合、ｙ／ｘが、入力周波数である。例えば、ｘ＝１０、ｙ＝１０００の場合、入力周波数は、１００（１０００／１０）Ｈｚである。
【００３２】
以下、データセット群１０１のライト処理、リード処理及び検索処理の概要を説明する。
【００３３】
＜データセット群１０１のライト処理＞
【００３４】
プロセッサ部１８０は、データセット群１０１のライト要求を受ける（Ｓ１０１）。ライト要求には、ライト先のアドレスが関連付けられている。ライト対象のデータセット群１０１はキャッシュメモリ部１９５に格納される。
【００３５】
プロセッサ部１８０は、当該ライト要求を受けた場合、当該データセット群１０１との一致度がもっとも高いデータモデルである一致データモデルをモデル辞書１５０から検索し、その一致データモデルとの一致度と、第１閾値との比較により、一致判断を行う（Ｓ１０２）。
【００３６】
一致度とは、２個の、対象となるデータモデルやデータセット群やそれらから生成されるハッシュ値（ローリングハッシュ、ファジーハッシュ等）等について、その類似性を表す指標である。指標の例（例えば、複数値に対する指標の例）として、コサイン類似度などが挙げられる。その他、二乗平均誤差や、交差エントロピーなどの一般的に知られた手法を用いてもよい。
【００３７】
例えば、具体的な一致度の比較方法として、以下の（Ｃ１）及び（Ｃ２）の手法が考えられる。一致判断（及び後述の類似判断）は、下記の（Ｃ１）及び（Ｃ２）のいずれの比較を含んでもよいが、本実施例では、（Ｃ１）の比較が採用される。
（Ｃ１）データモデル比較。例えば、プロセッサ部１８０は、データセット群１０１のデータモデルを生成する処理と、当該データセット群１０１に基づく入力ベクトルを生成する処理とを含んだエンコード処理を行う。プロセッサ部１８０は、生成されたデータモデル（又はそれのハッシュ値）と、モデル辞書１５０における各データモデル（又はそれのハッシュ値）との一致度を計算する。
（Ｃ２）データセット群比較。例えば、プロセッサ部１８０は、モデル辞書１５０における各データモデルについて、当該データモデルに関連付いている入力ベクトルを用いてデータセット群を復元する。プロセッサ部１８０は、データセット群１０１と、復元された各データセット群との一致度を計算する。また、（Ｃ１）と同様に、復元したデータセット群で比較をせずに、あらかじめ計算しておいたハッシュ値（エンコード元のデータセット群の一部又は全部）で比較してもよい。ハッシュの手法は、ファジーハッシュやローリングハッシュなど、後述（  ）に記載の方法を用いてもよい。
【００３８】
モデル辞書１５０の検索処理について、具体的には、一般的に知られた技法（ハッシュテーブルなど）を用いて、高速に処理してもよい。また、Ｈｏｐｆｉｅｌｄネットワークなどを用いて、類似のモデルを想起するようにしてもよい。
【００３９】
また、一致判断における比較処理について、具体的には、一致データモデルについて、一致度が第１閾値以上のとき、一致すると判定する。
【００４０】
Ｓ１０２の判断結果が偽の場合（Ｓ１０２：Ｎ）、プロセッサ部１８０は、エンコード処理において生成され、当該データセット群１０１のキーが関連付けられた新規データモデル及び入力ベクトルを、モデル辞書１５０に追加する（Ｓ１０３）。
【００４１】
Ｓ１０２の判断結果が真の場合（Ｓ１０２：Ｙ）、プロセッサ部１８０は、一致データモデルに関連付いているキーと入力ベクトルを更新（例えば、ライト先のアドレスを当該キーに追加）する（Ｓ１０４）。入力ベクトルは、一致データモデルと当該データセットとの差分情報を含む。ただし、まったく差が無い場合などは、入力ベクトルの保存の必要が無い場合も考えられる。これにより、少なくとも重複したデータモデルのライトが回避され、さらに入力ベクトルのライトも場合によって回避される。これにより、データ量の一層の削減が期待できる。なお、Ｓ１０２の一致判断は、ライト処理とは非同期に行われてもよい。すなわち、プロセッサ部１８０は、一時、ライト対象のデータセット群１０１のデータモデル及び入力ベクトルがモデル辞書１５０に格納し、定期的に（又は不定期的に）、モデル辞書１５０に、データモデル及び入力ベクトルの重複があるか否かを判断してもよい。その判断結果が真の場合、プロセッサ部１８０は、重複したデータモデル及び入力ベクトルをモデル辞書１５０から削除してもよい。
【００４２】
プロセッサ部１８０は、ライト要求の完了応答を返す（Ｓ１０５）。なお、当該完了応答は、Ｓ１０３又はＳ１０４が行われた場合に返されてもよいし、データセット群１０１がキャッシュメモリ部１９５に格納された場合に返されてもよい。
【００４３】
なお、データモデルは、データセット群１０１における最大値１０８及び最小値１０７をそれぞれ正規化した値である正規化最大値（例えば“１”）及び正規化最小値（例えば“０”）に基づいてよい。これにより、一致データモデル（又は後述の類似データモデル）が見つかる確率が高まる。
【００４４】
そして、入力ベクトルは、下記（ａ）〜（ｄ）、
（ａ）データセット群１０１における最大値１０８（正規化前の最大値）、
（ｂ）データセット群１０１における最小値１０７（正規化前の最小値）、
（ｃ）データモデルに対する入力値１０５、及び、
（ｄ）データセット群１０１とパターン１０３との差分を示す差分情報１０６、
を含む。データモデルとして入力値が静的な（例えばデータ１００におけるｘ軸（図１では時間軸）の値を入力とする）ニューラルネットワークを用いる場合は、ｘ軸の値を覚える必要は無いため、入力ベクトルのうちの少なくとも入力値１０５は省略可能である。また、データモデルとしてオートエンコーダなどの生成モデルを用いる場合は、入力値１０５は、特徴量ベクトルなどでよい。パターン１０３は、データモデルに入力値１０５が入力されることにより当該データモデルから出力されたデータセット群である。（ａ）及び（ｂ）の情報は無くてもよいが、（ａ）及び（ｂ）があることで（ｄ）の情報量の削減が期待できる。
【００４５】
入力ベクトル中の入力値１０５をデータモデルに入力することで当該データモデルから出力されたパターン１０３（データセット群）に、当該入力ベクトル中の差分情報１０６（且つ、最小値１０７及び最大値１０８）を反映することで、誤差の無いデータセット群１０１の復元が可能である。なお、（ｄ）（差分情報１０６）は、圧縮され、入力ベクトルは、（ａ）〜（ｃ）と圧縮された（ｄ）とを含んでよい。これにより、入力ベクトルのデータ量を削減することが期待できる。（ｄ）の圧縮は、既存の圧縮方法に従う圧縮でよい。また、圧縮は、ソフトウェア処理であってもハードウェア処理であってもよい。
【００４６】
＜データセット群１０１のリード処理＞
【００４７】
プロセッサ部１８０は、データセット群１０１のリード要求を受ける（Ｓ１２１）。リード要求には、リード元のアドレスが関連付けられている。
【００４８】
プロセッサ部１８０は、リード元のアドレスを含んだキーに対応したデータモデル及び入力ベクトルをモデル辞書１５０から特定する。プロセッサ部１８０は、特定された入力ベクトルを特定されたデータモデルに入力することでデータセット群を復元する処理を含んだデコード処理を行う（Ｓ１２２）。実施例１では、データセット群とデータモデル及び入力ベクトルとの間の変換は、可逆変換であり、故に、復元されたデータセット群は、データセット群１０１である。プロセッサ部１８０は、復元されたデータセット群１０１を返す（Ｓ１２３）。
【００４９】
＜データセット群１０１の検索処理＞
【００５０】
プロセッサ部１８０は、検索要求を受ける（Ｓ１３１）。検索要求には、検索条件が関連付けられている。検索条件として、種々の条件を採用可能である。例えば、検索条件は、検索対象のデータセット群１０１それ自体、又は、当該データセット群１０１のデータモデルである。
【００５１】
プロセッサ部１８０は、当該検索条件に適合するデータモデルである対象データモデルをモデル辞書１５０から検索する（Ｓ１３２）。例えば、検索条件がデータセット群１０１の場合、プロセッサ部１８０は、エンコード処理を行うことで、検索条件（データセット群１０１）のデータモデルを生成し、当該データモデルに適合する（例えば一致度が第１閾値より小さい）対象データモデルを検索する。また、例えば、検索条件がデータセット群１０１のデータモデルの場合、プロセッサ部１８０は、当該データモデルに適合する（例えば一致度が第１閾値より小さい）対象データモデルを検索する。
【００５２】
対象データモデルが見つかった場合、プロセッサ部１８０は、見つかった当該対象データモデルに関連付けられているキーをモデル辞書１５０から取得し（Ｓ１３３）、取得したキーを返す（Ｓ１３４）。
【００５３】
つまり、検索処理によれば、プロセッサ部１８０は、対象データモデルからデータセット群を復元して返すことに代えて、対象データモデルに関連付いているキーを返す。これにより、検索要求元へのデータセット群の転送は不要である。また、検索処理では、データセット群の復元、及び、データセット群の比較が行われず、データモデルの比較が行われる。このため、検索処理の負荷は小さく、故に、検索処理の高速化が期待できる。また、検索処理に、後述するモデルハッシュテーブル４０２などが用いられてもよい。
【００５４】
以上が、データセット群１０１のライト処理、リード処理及び検索処理の概要である。
【００５５】
なお、データセット群１０１のデータモデルとの一致度が第１閾値未満第２閾値以上のデータモデルである類似データモデルがあれば（第１閾値＞第２閾値）、プロセッサ部１８０は、当該類似データモデルのモデルＩＤと、当該類似データモデルとデータセット群１０１のデータモデルとの差分データとを含んだデータモデルを、データセット群１０１のデータモデルとして、生成してもよい。これにより、データモデルのデータ量の削減が期待でき、以って、モデル辞書１５０のサイズの削減が期待できる。
【００５６】
また、ストレージシステム１１０が複数のノード（物理的なストレージ装置の一例）で構成されている場合、複数のノードが、モデル辞書１５０を共有してよい。これにより、データ格納の効率化が期待できる。
【００５７】
以下、実施例１を詳細に説明する。
【００５８】
図２は、システム構成の一例を示す。
【００５９】
通信ネットワーク２１０（例えば、ＬＡＮ（Local Area Network）、ＷＡＮ（Wide Area Network）又はインターネット）に接続された１以上のノード部２５０がある。ノード部２５０は、１以上のノード２０１である。ストレージシステム１１０は、少なくとも１つのノード部２５０である。
【００６０】
ノード部２５０として、エッジノード部２５０Ａ、コアノード部２５０Ｂ及びクラウドノード部２５０Ｃがある。エッジノード部２５０Ａは、１以上のホスト（図示せず）と通信する１以上のノード（以下、エッジノード）２０１Ａである。コアノード部２５０Ｂは、エッジノード部２５０Ａと通信する１以上のノード（以下、コアノード）２０１Ｂである。クラウドノード部２５０Ｃは、いわゆるクラウド基盤に相当し、１以上のホスト（図示せず）又は１以上のノード部２５０と通信する１以上のノード（以下、クラウドノード）２０１Ｃである。
【００６１】
例えば、コアノード２０１Ｂは、インターフェース部２１１、ＰＤＥＶ部２１３、メモリ部２１４及びそれらに接続されたプロセッサ部２１５を有する。メモリ部２１４が、キャッシュメモリ部２１６を含む。ＰＤＥＶ部２１３が、１以上のＰＤＥＶ２１２で構成される。
【００６２】
１以上のノード２０１のメモリ部２１４とＰＤＥＶ部２１３が、図１の記憶部１６０である。１以上のノード２０１のキャッシュメモリ部２１６が、図１のキャッシュメモリ部１９５である。１以上のノード２０１のプロセッサ部２１５が、図１のプロセッサ部１８０である。本実施例では、１以上のノード２０１が、図１のストレージシステム１１０である。
【００６３】
図３は、システムの論理階層構造を示す。
【００６４】
システム（ストレージシステム１１０又はストレージシステム１１０を含むシステム）が、ブロックストレージ層３０２、データストア層３０３及びアプリケーション層３０４を提供する。ストレージシステム１１０が少なくともブロックストレージ層３０２を提供する。これらの層３０２〜３０４は、１又は複数のノード２０１により提供される。すなわち、これらの層３０２〜３０４が、同一のノード２０１により提供されてもよいし、異なる２以上のノード２０１により提供されてもよい（例えば、層３０４及び３０３が、第１のノード２０１により提供され、層３０２が、第２のノード２０１により提供されてもよい）。層３０２〜３０４の各々は、１以上のコンピュータプログラムがプロセッサ部１８０（１以上のプロセッサ部２１５）に実行されることで提供される機能でよい。例えば、ブロックストレージ層３０２、データストア層３０３及びアプリケーション層３０４は、それぞれ、ブロックストレージプログラム、データストアプログラム及びアプリケーションプログラムと読み替えられてもよい。
【００６５】
ブロックストレージ層３０２は、１以上の論理ボリューム３１１を提供する。各論理ボリューム３１１は、論理的な記憶領域である。各論理ボリューム３１１は、実体的な論理ボリューム（例えば１以上のＰＤＥＶ２１２に基づく論理ボリューム）であってもよいが、本実施例では、各論理ボリューム３１１は、仮想的な論理ボリューム、具体的には、複数の仮想ページ（仮想的な記憶領域）で構成されており容量仮想化技術（典型的にはThin Provisioning）に従う論理ボリュームである。１以上のプールがブロックストレージ層３０２により管理される。各プールは、１以上のＰＤＥＶ２１２に基づく複数の物理ページ（実体的な記憶領域）で構成された記憶領域である。
【００６６】
データストア層３０３は、１以上のデータストア３１２を管理する。各データストア３１２は、同一の属性（例えば、データソース、種類）を持つ論理的なデータ格納領域である。データストア３１２に格納される１以上のデータセットは、例えば、データベース（例えばカラムストアデータベース）のような構造化データでもよいし、ファイルやディレクトリのような非構造データでもよい。データストア３１２におけるデータセットが論理ボリューム３１１にライトされたり論理ボリューム３１１からリードされたりする。
【００６７】
アプリケーション層３０４は、同期データ処理（例えばストリームデータ処理）及び非同期データ処理を行う。同期データ処理は、入力された時系列データ１００をデータセット群単位でデータストア３１２に蓄積したり、１以上のデータセット群の処理（例えば分析処理）をしたり、当該処理の結果を出力したりする処理である。非同期データ処理は、データストア３１２から１以上のデータセットをリードしたり、当該１以上のデータセットの処理（例えば分析処理）をしたり、当該処理の結果を出力したりする処理である。
【００６８】
少なくとも１つのノード２０１（例えばコアノード２０１Ｂ）が、ブロックストレージ層３０２を提供する。本実施例では、ブロックストレージ層３０２が、エンコード処理及びデコード処理（例えば、それらの処理を含む図１０〜図１４に示す処理）を実行する。このため、データセット群とデータモデル及び入力ベクトルとの間の変換は、可逆変換であることが好ましく、故に、本実施例では、上述したように可逆変換が採用される。以下、ブロックストレージ層３０２を提供する１つのノード２０１を例に取る。
【００６９】
図４は、ブロックメモリ領域部に格納されるテーブルを示す。
【００７０】
ブロックメモリ領域部４００は、ブロックストレージ層３０２に管理されるメモリ領域部である。「メモリ領域部」は、メモリ部２１４における１以上のメモリ領域である。ブロックメモリ領域部４００は、キー変換テーブル４０１、モデルハッシュテーブル４０２、キャッシュテーブル４０３、ページマッピングテーブル４０４及び構成テーブル４０５を格納する。これらのテーブル４０１〜４０５の少なくとも一部が、不揮発化やメモリ効率向上などを目的としてＰＤＥＶ部２１３に格納されてもよい。
【００７１】
図５は、キー変換テーブル４０１の構成を示す。
【００７２】
キー変換テーブル４０１は、キーとデータモデル及び入力ベクトルとの間の変換のためのテーブルである。例えば、キー変換テーブル４０１は、キー毎にレコードを有する。各レコードは、キー、モデルＩＤ及び入力ベクトルといった情報を格納する。
【００７３】
キーは、アドレス（例えば、物理アドレス（物理ページに属するアドレス））を含む。アドレスは、例えば、開始アドレスとアドレス範囲（データ長）とで定義されてよい。アドレス範囲は、固定でも可変でもよい。キー内の物理アドレスは、ページマッピングテーブル４０４を通じて論理アドレス（仮想ページに属するアドレス）に関連付けられている。このため、キー内の物理アドレスから、対応する論理アドレスを特定することができる。なお、容量仮想化技術（典型的にはThin Provisioning）が採用されていない場合、キーは、論理アドレス（例えば、ライト要求又はリード要求で指定されるアドレス）を含んでよい。
【００７４】
モデルＩＤは、データモデルのＩＤである。モデルＩＤは、例えば、インクリメンタルに加算されてよい（例えば通し番号でよい）。モデルＩＤからＰＤＥＶ位置を一意に算出可能でよい。
【００７５】
入力ベクトルは、対応するデータセット群に基づく。
【００７６】
なお、データモデルは、上述したように、数式処理、波形の形状、確率分布などの規則性を表現したバイナリ列である。データモデルは、入力ベクトルを入力としデータセット群を出力する。データモデルに、例えば、一般的なニューラルネットワークや、生成モデル（例えば、ＧＭＭ（Gaussian Mixture Models）、ＨＭＭ（Hidden Markov Model）、ＳＣＦＧ（Stochastic Context-Free Grammar）、ＧＡＮ（Generative Adversarial Nets）又はＶＡＥ（Variational Auto Encoder））、遺伝的プログラミングなどが用いられてもよい。また、データモデルの情報量削減のためにMimic Model等のモデル圧縮が適用されてもよい。ストレージに入力されるデータは、数値以外のものも含んでもよい（たとえば、装置ＩＤなど）ため、プログラミングで一般的に用いられるような型情報を付与してもよい。また、データモデル間の圧縮のため、データモデル内に別のデータモデルのモデルＩＤが参照のため含まれてもよい。データモデルは、ＰＤＥＶ部２１３に保存されるため、エンコード処理又はデコード処理のときにのみ、当該データモデルの少なくとも一部がキャッシュメモリ部２１６に格納されてもよい。１又は複数のエンコード処理において、再帰的にデータモデルのエンコード処理が多段で適用されてもよい。
【００７７】
また、データモデルの生成では、上述したように、元になるデータセット群における最小値及び最大値がそれぞれ正規化された値である正規化最小値（例えば“０”）及び正規化最大値（例えば“１”）が使用されてもよい（すなわち、出力の値域が０−１に補正されてもよい）。そして、上述したように、正規化前の最小値及び最大値（及び、データセット群のデータセット範囲）が、入力ベクトルに含まれてよい。また、当該入力ベクトルは、データセット群とパターンとの差分を示す差分情報を含んでよい。「パターン」は、上述したように、データモデルに入力値を入力することで当該データモデルから出力されたデータセット群である。
【００７８】
また、入力ベクトルにおける差分情報は、ブロックストレージ層３０２により圧縮されていてもよい。これにより、入力ベクトルのデータ量を削減することができる。デコード処理では、当該差分情報が伸張された後に使用される。
【００７９】
図６は、モデルハッシュテーブル４０２の構成を示す。
【００８０】
モデルハッシュテーブル４０２は、データモデルのハッシュ値を格納する。具体的には、例えば、モデルハッシュテーブル４０２は、データモデル毎に、レコードを有する。各レコードは、モデルＩＤ及びモデルハッシュ（データモデルのハッシュ値）といった情報を格納する。
【００８１】
上述した一致判断は、ライト対象のデータセット群のデータモデルのモデルハッシュを、モデルハッシュテーブル４０２における各モデルハッシュと比較することで行われてよい。これにより、データモデルのリードのためにＰＤＥＶ２１２にアクセスすることが不要となり、高速な一致判断が期待できる。
【００８２】
なお、モデルハッシュは、データモデルの類似性を検出するためのデータから計算したハッシュ値、ファジーハッシングやローリングハッシュなどを適用してもよい。また、モデルハッシュは、データモデルの特徴値（特徴量）の一例でよく、特徴値は、ハッシュ値以外の特徴値であってもよい（例えば、データモデルを一方向性関数に入力して得られた値でもよいし、パターン検出関連技術（Hopfieldネットワーク等）を用いて得られた値でもよい）。
【００８３】
図７は、キャッシュテーブル４０３の構成を示す。
【００８４】
キャッシュテーブル４０３は、キャッシュメモリ部２１６におけるキャッシュ領域毎の状況に関する情報を格納する。「キャッシュ領域」とは、キャッシュメモリ部２１６の一部領域である。キャッシュ領域のサイズは固定でも可変でもよい。
【００８５】
例えば、キャッシュテーブル４０３は、キャッシュ領域毎に、レコードを有する。各レコードは、論理アドレス、キャッシュデータ及びキャッシュ属性といった情報を格納する。
【００８６】
論理アドレスは、キャッシュ領域に関連付けられた論理アドレス（仮想ページに属するアドレス）を示す。
【００８７】
キャッシュデータは、データモデル又は１以上のデータセットである。データモデルもデータセットもキャッシュメモリ部２１６に存在するため、キャッシュデータは、テーブル４０３に格納されないでもよい。また、データモデル及び入力ベクトルの組が、ＰＤＥＶ部２１３にライトされてもよい。
【００８８】
キャッシュ属性は、キャッシュ領域の属性を示す。キャッシュ属性は、例えば、“クリーン”（キャッシュ領域内のデータ（データモデル又は１以上のデータセット）がＰＤＥＶ部２１３にライト済である）、“ダーティ”（キャッシュ領域内のデータがＰＤＥＶ部２１３に未ライトである）、“デコード済”（キャッシュ領域には１以上のデータセットが存在する）、及び、“未デコード”（キャッシュ領域にはデータモデルが存在する）のいずれかである。“クリーン”と“ダーティ”というキャッシュ属性と、“デコード済”と“未デコード”というキャッシュ属性は、独立であってもよい。同期ライト処理が完了した時点では、キャッシュ属性は、“ダーティ”かつ“デコード済”（モデル化されていない元の状態）であるが、非同期ライト処理が完了した時点で、キャッシュ属性は、“クリーン”かつ“未デコード”となる。“ダーティ”か“クリーン”かは、一般的に知られたストレージシステムのキャッシュ状態の遷移に従うことができる。その遷移と、“デコード済”か“未デコード”かは、独立であってもよい。例えば、キャッシュヒット率とアクセス特性、キャッシュメモリへのデータ格納効率の関係から、キャッシュ属性を“デコード済”とするか“未デコード”とするかが制御されてもよい。
【００８９】
図８は、ページマッピングテーブル４０４の構成を示す。
【００９０】
ページマッピングテーブル４０４は、仮想ページと物理ページの関係、及び、物理ページのアクセス特性を示す。例えば、ページマッピングテーブル４０４は、仮想ページ毎に、レコードを有する。各レコードは、ＶＯＬ  ＩＤ、仮想ページＩＤ、物理ページＩＤ及びアクセス特性といった情報を格納する。
【００９１】
ＶＯＬ  ＩＤは、仮想ページを含む論理ボリュームのＩＤである。仮想ページＩＤは、仮想ページのＩＤ（例えばアドレス）である。プールＩＤは、仮想ページに割り当てられている物理ページを含んだプールのＩＤである。物理ページＩＤは、仮想ページに割り当てられている物理ページ（プール内の記憶領域）のＩＤである。アクセス特性は、当該物理ページのアクセス特性（例えばＩ／Ｏ負荷）を示す。なお、「Ｉ／Ｏ負荷」として、「Ｉ／Ｏ数」及び「Ｉ／Ｏサイズ」の少なくとも１つを採用することができる。「Ｉ／Ｏ数」は、単位時間当たりに発行されるＩ／Ｏ（例えばＩ／Ｏ要求）の数である。「Ｉ／Ｏサイズ」は、単位時間当たりに発行されるＩ／Ｏの対象データの合計サイズである。本実施例では、「Ｉ／Ｏ負荷」として、「Ｉ／Ｏ数」が採用される。ページマッピングテーブル４０４は、例えば、ライト先が、高Ｉ／Ｏ負荷の物理ページであれば、エンコード処理をしない、といったような類の制御に用いられる。なお、Ｉ／Ｏ負荷に代えて、プロセッサ部２１５の負荷が採用されてもよい。例えば、プロセッサ部２１５の負荷が高負荷（例えば、或る閾値以上）であれば、プロセッサ部２１５は、エンコード処理をしないでよい。言い換えれば、プロセッサ部２１５の負荷が低負荷（例えば、或る閾値未満）であれば、プロセッサ部２１５は、エンコード処理を行ってよい。
【００９２】
図９は、構成テーブル４０５の構成を示す。
【００９３】
構成テーブル４０５は、プールの構成に関する情報を格納する。例えば、構成テーブル４０５は、プール毎に、レコードを有する。各レコードは、プールＩＤ、ＰＤＥＶリスト、外部リスト及びノードリストといった情報を格納する。
【００９４】
プールＩＤは、プールのＩＤである。ＰＤＥＶリストは、プールの基になっているＰＤＥＶ２１２のＩＤのリストである。外部リストは、プールの基になっている外部デバイスのＩＤのリストである。ここで言う「外部デバイス」は、当該プールを提供するノード２０１以外のノード２０１が提供するデバイス（例えば、論理ボリューム又はＰＤＥＶ）である。ノードリストは、外部デバイスを提供するノードのＩＤのリストである。
【００９５】
すなわち、プールは、当該プールを提供するノード２０１内のＰＤＥＶ２１２に代えて又は加えて、当該ノード２０１の外部のデバイスに基づいていてもよい。
【００９６】
以下、図１０〜図１４を参照して、ブロックストレージ層３０２が行う処理を説明する。
【００９７】
図１０は、同期ライト処理の流れを示す。
【００９８】
同期ライト処理とは、ライト処理の一部であり、ライト要求を受信した場合に開始される。以下の説明において、同期ライト処理でのライト対象はデータセット群であるが、データセット群に代えてデータモデルのような他のデータがライト対象となることがあってもよい。
【００９９】
すなわち、ブロックストレージ層３０２は、ライト先の仮想ページ（ライト要求で指定されているアドレスが属する仮想ページ）に物理ページが割り当たっているか否かを、ページマッピングテーブル４０４を基に判断する（Ｓ１００１）。Ｓ１００１の判断結果が偽の場合（Ｓ１００１：Ｎ）、ブロックストレージ層３０２は、ライト先の仮想ページに空きの物理ページ（いずれの仮想ページにも割り当てられていない物理ページ）を割り当てる（Ｓ１００２）。
【０１００】
Ｓ１００１の判断結果が真の場合（Ｓ１００１：Ｙ）、又は、Ｓ１００２の後、ブロックストレージ層３０２は、キャッシュメモリ部２１６からキャッシュ領域を確保し、確保したキャッシュ領域に、ライト対象のデータセット群（ライト要求に付随するデータセット群）を格納する（Ｓ１００３）。ブロックストレージ層３０２は、当該キャッシュ領域のキャッシュ属性を“ダーティ”とする（Ｓ１００４）。その後、ブロックストレージ層３０２は、ライト要求に応答を返す（Ｓ１００５）。
【０１０１】
図１１は、非同期ライト処理の流れを示す。
【０１０２】
非同期ライト処理とは、ライト処理の残りの一部であり、ライト要求の受信とは非同期に行われる処理である。以下の説明では、“ダーティ”に対応したキャッシュ領域を「ダーティ領域」と言う。
【０１０３】
ブロックストレージ層３０２は、キャッシュテーブル４０３を参照し、ダーティ領域があるか否かを判断する（Ｓ１１０１）。Ｓ１１０１の判断結果が偽の場合（Ｓ１１０１：Ｎ）、処理が終了する。
【０１０４】
Ｓ１１０１の判断結果が真の場合（Ｓ１１０１：Ｙ）、ブロックストレージ層３０２は、ダーティ領域に対応した仮想ページを、キャッシュテーブル４０３を基に特定し、特定した仮想ページに対応したＩ／Ｏ負荷（アクセス特性）を、ページマッピングテーブル４０４を基に特定し、特定したＩ／Ｏ負荷が低負荷か否か（所定値未満か否か）を判断する（Ｓ１１０２）。なお、ここで言う「ダーティ領域」の例として、以下、データセット群が格納された任意のダーティ領域とする。
【０１０５】
Ｓ１１０２の判断結果が真の場合（Ｓ１１０２：Ｙ）、ブロックストレージ層３０２は、ダーティ領域内のデータセット群についてエンコード処理（Ｓ１１０３）を行う。Ｓ１１０２の判断結果が偽の場合（Ｓ１１０２：Ｎ）、エンコード処理（Ｓ１１０３）はスキップされる。これにより、高Ｉ／Ｏ負荷の物理ページがライト先となるデータセット群についてまでエンコード処理を行うことでＩ／Ｏ性能が低下することを回避することが期待できる。
【０１０６】
エンコード処理（Ｓ１１０３）の後、又は、Ｓ１１０２の判断結果が偽の場合（Ｓ１１１０２：Ｎ）、ブロックストレージ層３０２は、ライト先のページ位置（物理ページにおけ位置）を特定する（Ｓ１１０４）。ブロックストレージ層３０２は、ライト対象があるか否かを判断する（Ｓ１１０５）。エンコード処理において一致データモデルが見つからなかった場合、又は、エンコード処理がスキップされた場合、Ｓ１１０５の判断結果が真となる。
【０１０７】
Ｓ１１０５の判断結果が真の場合（Ｓ１１０５：Ｙ）、ブロックストレージ層３０２は、デステージを行う（Ｓ１１０６）。すなわち、ブロックストレージ層３０２は、構成テーブル４０５を基に、Ｓ１１０４で特定したページ位置に、ライト対象（データモデル又はデータセット群）をライトする。
【０１０８】
Ｓ１１０５の判断結果が偽の場合（Ｓ１１０５：Ｎ）、又は、Ｓ１１０６の後、ブロックストレージ層３０２は、ダーティ領域の属性を“クリーン”に更新する（Ｓ１１０７）。また、ブロックストレージ層３０２は、Ｓ１１０４で特定されたページ位置を持つ物理ページに対応したアクセス特性（Ｉ／Ｏ負荷）を更新する（Ｓ１１０８）。
【０１０９】
図１２は、エンコード処理の流れを示す。
【０１１０】
ブロックストレージ層３０２は、ダーティ領域内のデータセット群のタイプ（例えば、動画、静止画、ＣＳＶデータといったタイプ）を識別する（Ｓ１２０１）。また、ブロックストレージ層３０２は、前処理（例えば、データタイプ毎のカラム分割やフレーム分割）を行う（Ｓ１２０２）。
【０１１１】
ブロックストレージ層３０２は、ダーティ領域内のデータセット群のデータモデルとの一致度が第１閾値以上のデータモデルである一致データモデルが存在するか否かの一致判断を行う（Ｓ１２０３）。本実施例では、一致判断は、上述した通り、上述の（Ｃ１）の比較が採用される。すなわち、ブロックストレージ層３０２は、ダーティ領域内のデータセット群のデータモデルを生成し、当該データモデルのモデルハッシュを算出する。データモデルの生成は、例えばニューラルネットワークを採用した場合、その学習処理の実行に相当する。その場合、例えばバックプロパゲーションや数値微分法などの一般的に知られた学習処理を実行する。学習サイクルの繰り返し回数は、学習の進展や、期待のデータ削減効果などから、適切なタイミングで打ち切ってもよい。その他、メタ学習や転移学習などの技法を用いて学習速度を高速化してもよい。そして、ブロックストレージ層３０２は、算出したモデルハッシュとの一致度が第１閾値以上のモデルハッシュがモデルハッシュテーブル４０２に存在するか否かを判断する。一致度が第１閾値以上のデータモデルが２以上存在する場合、最も一致度が高いデータモデルが「一致データモデル」でよい。
【０１１２】
Ｓ１２０３の判断結果が真の場合（Ｓ１２０３：Ｙ）、ブロックストレージ層３０２は、ダーティ領域内のデータセット群とパターン（一致データモデルから出力されたデータセット群）との差分である差分情報を生成することで新たな入力ベクトルを完成させ（Ｓ１２０５）、キー変換テーブル４０１を更新する（Ｓ１２０６）。具体的には、例えば、ブロックストレージ層３０２は、ライト先のアドレスを含んだ新たなキーとＳ１２０５で生成した新たな入力ベクトル（差分情報を含む入力ベクトル）とを、一致データモデルのモデルＩＤに新たに関連付ける。
【０１１３】
Ｓ１２０３の判断結果が偽の場合（Ｓ１２０３：Ｎ）、ブロックストレージ層３０２は、モデルハッシュテーブル４０２を更新する（Ｓ１２０４）。例えば、ブロックストレージ層３０２は、算出されたモデルハッシュと、生成されたデータモデルのモデルＩＤとを、モデルハッシュテーブル４０２に追加する。なお、Ｓ１２０４において、ブロックストレージ層３０２は、類似判断、すなわち、生成されたデータモデルとの一致度が第１閾値未満第２閾値以上（第１閾値＞第２閾値）のデータモデルである類似データモデルがあるか否かを判断してもよい。類似判断の結果が真の場合、ブロックストレージ層３０２は、類似データモデルのモデルＩＤと、当該類似データモデルと生成されたデータモデルとの差分データとを含んだ差分データモデルを、ダーティ領域内のデータセット群のデータモデルとしてもよい。これにより、データモデルのデータ量を削減することが期待できる。また、差分データモデルの生成方法として、類似データモデルに積層させるデータモデルを生成し、それと類似データモデルのモデルＩＤとを含むデータモデルが差分データモデルとして採用されてもよい。具体的には、例えば、ブロックストレージ層３０２は、ベースとする類似データモデルを変更せずに、それに接続したニューラルネットワーク部分の学習処理により、積層させるデータモデルを生成してもよい。その他、一般的に知られた転移学習のような手法が適用されてもよい。本処理で生成する新たなモデル部分は、新規データモデルよりもサイズが小さい。差分データモデルは、当該新たなモデル部分を含み、また、ベースとする類似データモデルの代わりに当該類似データモデルの参照（モデルＩＤ）を含む。参照（モデルＩＤ）は、当然に、類似データモデルそれ自体よりも小さい。このため、格納するデータ量を削減することができる。ブロックストレージ層３０２は、類似データモデルのモデルＩＤを含んだデータモデルのモデルＩＤと、当該データモデルのモデルハッシュとを、Ｓ１２０４において、モデルハッシュテーブル４０２に追加することができる。
【０１１４】
ブロックストレージ層３０２は、ダーティ領域内のデータセット群と、パターン（データモデルから出力されたデータセット群）との差分である差分情報を生成する（Ｓ１２０５）。Ｓ１２０５において生成された差分情報と、当該データセット群のデータセット範囲に基づく１以上の入力値と、当該データセット群における最大値及び最小値とを含んだデータが、入力ベクトルである。なお、ブロックストレージ層３０２は、差分情報を圧縮し、圧縮前の差分情報に代えて圧縮後の差分情報を入力ベクトルに含めてもよい。
【０１１５】
ブロックストレージ層３０２は、入力ベクトルと、当該データセット群のデータモデルのモデルＩＤと、当該入力ベクトル及びモデルＩＤが関連付けられたキーとを、キー変換テーブル４０１に追加する（Ｓ１２０６）。
【０１１６】
図１３は、リード処理の流れを示す。
【０１１７】
リード処理は、リード要求を受信した場合に開始される。リード要求には、リード元のアドレスが関連付けられている。
【０１１８】
ブロックストレージ層３０２は、キャッシュヒットしたか否か（典型的には、リード対象のデータセット群がキャッシュメモリ部２１６に存在するか否か）を判断する（Ｓ１３０１）。
【０１１９】
Ｓ１３０１の判断結果が偽の場合（Ｓ１３０１：Ｎ）、ブロックストレージ層３０２は、キャッシュ領域をキャッシュメモリ部２１６から確保する（Ｓ１３０２）。ブロックストレージ層３０２は、リード元のアドレスに基づきページ位置（リード元のアドレスが属する論理ページに割り当てられている物理ページにおける位置（リード元のアドレスに対応した位置））を、ページマッピングテーブル４０４を基に特定する（Ｓ１３０３）。
【０１２０】
ブロックストレージ層３０２は、リード元のアドレスを含んだキーに対応するモデルＩＤを、キー変換テーブル４０１から特定する（Ｓ１３０４）。
【０１２１】
ブロックストレージ層３０２は、ステージングを行う（Ｓ１３０５）。例えば、Ｓ１３０４でモデルＩＤが特定された場合、ブロックストレージ層３０２は、特定したモデルＩＤのデータモデルを、構成テーブル４０５を基に、Ｓ１３０３で特定したページ位置からキャッシュメモリ部２１６（Ｓ１３０２で確保したキャッシュ領域）にリードし、当該キャッシュ領域のキャッシュ属性を“未デコード”とする。一方、例えば、Ｓ１３０４でモデルＩＤが特定されなかった場合、ブロックストレージ層３０２は、Ｓ１３０３で特定したページ位置からキャッシュメモリ部２１６（Ｓ１３０２で確保したキャッシュ領域）にデータセット群をリードし、当該キャッシュ領域のキャッシュ属性を“デコード済”とする。
【０１２２】
ブロックストレージ層３０２は、当該ページ位置を含む物理ページに対応したアクセス特性（Ｉ／Ｏ負荷）を更新する（Ｓ１３０６）。
【０１２３】
Ｓ１３０６の後、又は、Ｓ１３０１の判断結果が真の場合（Ｓ１３０１：Ｙ）、ブロックストレージ層３０２は、キャッシュ領域の属性が“デコード済”か否かを、キャッシュテーブル４０３を基に判断する（Ｓ１３０７）。
【０１２４】
Ｓ１３０７の判断結果が偽の場合（Ｓ１３０７：Ｎ）、ブロックストレージ層３０２は、キャッシュ領域内のデータモデルのデコード処理（Ｓ１３０８）を行う。
【０１２５】
ブロックストレージ層３０２は、キャッシュ領域内のデータセット群（Ｓ１３０５でリードされたデータセット群、又は、デコード処理において復元されたデータセット群）を返す（Ｓ１３０９）。
【０１２６】
以上が、リード処理である。
【０１２７】
なお、Ｓ１３０４の後、ブロックストレージ層３０２は、リード対象のデータモデルと一致度が第１閾値以上のデータモデル（一致データモデル）がキャッシュメモリ部２１６に既にあるか否かを判断してもよい。当該判断の結果が真の場合には、ブロックストレージ層３０２は、Ｓ１３０５をスキップしてもよい。これにより、キャッシュメモリ部２１６の利用効率が向上する。
【０１２８】
また、データモデルと当該データモデルを用いて復元されたデータセット群は、同一のキャッシュ領域に格納されてもよいし、異なるキャッシュ領域に格納されてもよい。
【０１２９】
また、ブロックストレージ層３０２は、キャッシュメモリ部２１６にリードされたデータモデルに対応した一致データモデル（例えば、同一モデルＩＤのデータモデル）がキャッシュメモリ部２１６に存在する場合、リード対象のデータモデルと一致データモデルとのうちのいずれかを削除し、削除されたデータモデルのキャッシュ領域に関連付けられているアドレスを、残されているデータモデルのキャッシュ領域に関連付けてよい。これにより、キャッシュメモリ部２１６の利用効率が向上する。
【０１３０】
図１４は、デコード処理の流れを示す。
【０１３１】
ブロックストレージ層３０２は、キャッシュメモリ部２１６におけるデータモデルに入力ベクトル中の入力値１０５を入力することでデータセット群（パターン１０３）を得る（Ｓ１４０１）。当該入力ベクトルは、リード元のアドレスを含んだキーに対応した、キー変換テーブル４０１から特定された入力ベクトルである。なお、データモデルが、差分データモデルの場合、Ｓ１４０１において、下記が行われてよい。
・ブロックストレージ層３０２は、当該差分データモデル中のモデルＩＤに対応したデータモデルを取得する。
・ブロックストレージ層３０２は、当該取得したデータモデルに、当該差分データモデル中のモデル部分を適用することで、新たなデータモデルを取得する。
・ブロックストレージ層３０２は、当該取得した新たなデータモデルに、リード元のアドレスを含んだキーに対応した入力ベクトル中の入力値を入力する。
【０１３２】
ブロックストレージ層３０２は、差分情報処理をする（Ｓ１４０２）。具体的には、ブロックストレージ層３０２は、入力ベクトル中の差分情報１０６、最小値１０７及び最大値１０８を、Ｓ１４０１で得られたパターン１０３に反映する。
【０１３３】
ブロックストレージ層３０２は、Ｓ１４０２で得られたデータセット群のタイプ（例えば、動画、静止画、ＣＳＶデータといったタイプ）を識別する（Ｓ１４０３）。そして、ブロックストレージ層３０２は、後処理（例えば、データタイプ毎のカラム統合やフレーム統合）を行う（Ｓ１４０４）。
【０１３４】
デコード処理により、データモデルからデータセット群が復元される。
【実施例２】
【０１３５】
実施例２を説明する。その際、実施例１との相違点を主に説明し、実施例１との共通点については説明を省略又は簡略する。
【０１３６】
図１５は、実施例２に係るシステムの論理階層構造を示す。
【０１３７】
システム（実施例２に係るストレージシステム１５１０又はストレージシステム１５１０を含むシステム）が、ブロックストレージ層１５０２、データストア層１５０３及びアプリケーション層１５０４を提供する。アプリケーション層１５０４（又は、データストア層１５０３とアプリケーション層１５０４との間）に、クライアント層１５０５がある。ストレージシステム１５１０が少なくともデータストア層１５０３を提供する。サーバのようなホストとして機能する少なくとも１つのノード２０１が、アプリケーション層１５０４（及びクライアント層１５０５）を提供するが、ストレージシステム１５１０が、当該少なくとも１つのノード２０１を含んでもよい。これらの層１５０２〜１５０５の各々は、１以上のコンピュータプログラムが１以上のノード２０１のプロセッサ部２１５に実行されることで提供される機能でよい。例えば、ブロックストレージ層１５０２、データストア層１５０３、アプリケーション層１５０４及びクライアント層１５０５は、それぞれ、ブロックストレージプログラム、データストアプログラム、アプリケーションプログラム及びクライアントプログラムと読み替えられてもよい。アプリケーション層１５０４（及びクライアント層１５０５）が、入力されたデータセット群をメモリ部にライトするフロントエンド層の少なくとも一部である。データストア層１５０３が、データセット群のデータモデルと当該データモデルに対応した入力ベクトルとをＰＤＥＶ部にライトするバックエンド層の少なくとも一部である。なお、ここで言う「メモリ部」は、クライアントメモリ領域部である。「クライアントメモリ領域部」は、クライアント層１５０５を提供するノード２０１におけるメモリ領域部であって、クライアント層１５０５が管理するメモリ領域部である。クライアントメモリ領域部は、例えば、いわゆる主記憶である。一方、データストア層１５０３を提供するノード２０１におけるメモリ領域部であって、データストア層１５０３が管理するメモリ領域部があり、当該メモリ領域部が、「ストアメモリ領域部」である。クライアントメモリ領域部及びストアメモリ領域部のうちの少なくとも１つが、ストレージシステム１５１０におけるメモリ部でよい。また、アプリケーション層１５０４（及びクライアント層１５０５）を提供するプロセッサ部と、データストア層１５０３を提供するプロセッサ部とが、ストレージシステム１５１０におけるプロセッサ部でよい。
【０１３８】
データストア層１５０３及びクライアント層１５０５（又はアプリケーション層１５０４）のうちのいずれがエンコード処理を行ってもよい。また、本実施例では、データストア層１５０３が、デコード処理を行わず、クライアント層１５０５（又はアプリケーション層１５０４）が、デコード処理を行うことができる。すなわち、データストア層１５０３が、データモデル及び入力ベクトルをクライアント層１５０５に返し、クライアント層１５０５が、データモデル及び入力ベクトルをクライアントメモリ領域部にライトする。クライアント層１５０５が、データセット群を利用するときに、クライアントメモリ領域部におけるデータモデルからデータセット群を復元する処理を含むデコード処理を行うことで、データセット群を得る。これにより、クライアントメモリ領域部（主記憶）に常にデータセット群が展開されていることに比べて、クライアントメモリ領域部の使用記憶容量は少なく、故に、クライアントメモリ領域部（主記憶）の利用効率が高い。また、データストア層１５０３（例えば或るノード２０１）からクライアント層１５０５（例えば別のノード２０１）へ転送されるデータは、データセット群よりもデータ量の少ないことが期待されるデータモデル及び入力ベクトルなので、上り転送量（データストア層１５０３からクライアント層１５０５へ転送されるデータの量）を削減することも期待できる。なお、クライアント層１５０５（又はアプリケーション層１５０４）がエンコード処理を行うようになっていれば、下り転送量（クライアント層１５０５からデータストア層１５０３へ転送されるデータの量）も削減することが期待できる。
【０１３９】
なお、実施例１に係るエンコード処理は、可逆変換のエンコード処理、具体的には、エンコード処理前のデータセット群と同一の（誤差の無い）データセット群がデコード処理で復元できるようなエンコード処理が行われる。ブロックストレージ層３０２より上の層３０３又は３０４に対して、実際に格納したデータと同一のデータを返すことを維持するためである。
【０１４０】
一方、実施例２に係るエンコード処理は、可逆変換のエンコード処理でもよいし不可逆変換のエンコード処理でもよい。具体的には、実施例２に係るエンコード処理は、ライト対象のデータセット群とデータモデルからの出力としてのデータセット群との誤差と、許容誤差とに基づく情報である誤差情報を生成する処理を含む。すなわち、実施例２では、差分情報１０６に代えて、誤差情報が採用される。データストア層１５０３（又はクライアント層１５０５）は、ライト対象のデータセット群のキーが関連付けられたデータモデルに加えて、生成された誤差情報を含んだ入力ベクトルを、記憶部にライトする。実施例２に係るデコード処理において復元されたデータセット群は、データモデルから出力されたデータセット群が、当該データモデルに関連付いている入力ベクトル中の誤差情報を用いて補正されたデータセット群である。許容誤差が０（つまり、誤差が全く許容されない）であれば、復元されたデータセット群は、エンコード処理前のデータセット群と同一である。許容誤差が０より大きければ、復元されたデータセット群と、エンコード処理前のデータセット群との間では、許容誤差以下の誤差がある。本実施例では、第１閾値（一致判断で使用される閾値）は、可変値であり、許容誤差が大きいと小さい傾向にある。許容誤差が０より大きい場合、下記のうちの少なくとも１つが期待できるため、一層のデータ量の削減が期待できる。
・差分情報１０６よりも誤差情報の方が圧縮が効きやすい。
・データモデルの一致の範囲が広がり、結果として、削除可能なデータモデルが多くなる。
【０１４１】
以下、実施例２をより詳細に説明する。
【０１４２】
図１６は、ストアメモリ領域部に格納されるテーブルを示す。
【０１４３】
ストアメモリ領域部１６００は、キー変換テーブル４０１、モデルハッシュテーブル４０２、モデルテーブル１６０１及びストア管理テーブル１６０２を格納する。
【０１４４】
図１７は、クライアントメモリ領域部に格納されるテーブルを示す。
【０１４５】
クライアントメモリ領域部１７００は、キー変換テーブル１７０１、モデルハッシュテーブル１７０２、モデルテーブル１７０３及びストア管理テーブル１７０４を格納する。
【０１４６】
テーブル１７０１〜１７０４の各々の少なくとも一部と、テーブル４０１、４０２、１６０１及び１６０２の各々の少なくとも一部が、同期する（同じ内容である）。例えば、テーブル４０１又は１７０１の一方のテーブルが更新された場合、他方のテーブルも同じ内容に更新される。
【０１４７】
図１８は、ストア管理テーブル１６０２の構成を示す。
【０１４８】
ストア管理テーブル１６０２は、データストア３１２に関する情報を格納する。例えば、ストア管理テーブル１６０２は、データストア３１２毎に、レコードを有する。各レコードは、ストアＩＤ（データストア３１２のＩＤ）、メタ情報、忘却制御情報及びアウトカム情報といった情報を格納する。
【０１４９】
メタ情報は、データストア３１２のメタ情報であり、例えば、カラム数、カラム名、開始時刻及び入力周波数のうちの少なくとも１つを含む。メタ情報は、更に、許容誤差を含む。なお、許容誤差は、データストア３１２の単位で関連付けられることに代えて、データモデルの単位で関連付けられてもよい。また、メタ情報は、更に、第１閾値（一致判断で使用される閾値）を含んでもよい。
【０１５０】
忘却制御情報は、データストア３１２の忘却を制御するための情報、具体的には、当該データストア３１２に対応した許容誤差、及び、当該データストア３１２に属するデータモデルから出力されたデータセット群のうち誤差が許容誤差の範囲外にあるデータセットの補正誤差を調整するための情報である。本実施例では、誤差が許容誤差の範囲にある出力データセットは、当該誤差と許容誤差の範囲とに基づき補正されるが、「補正誤差」は、当該補正後の出力データセットの誤差である。忘却制御情報は、例えば、忘却曲線情報でよい。忘却曲線情報は、記憶の度合い（例えば、レゾリューション、周波数など）の時間経過による動的な変化（例えば、エビングハウスの忘却曲線）を示す情報である。忘却曲線情報は、補正誤差の調整処理である第１の誤差調整処理において参照される。本実施例では、第１の誤差調整処理に加えて（又は代えて）、許容誤差の調整処理である第２の誤差調整処理を行うことができる。第１及び第２の誤差調整処理の少なくとも１つは、後述の利用処理の発生契機で行われてもよいし、アウトカム情報の更新の契機で行われてもよいし、全データストア３１２の使用率が閾値を超えたことを契機に行われてもよい。
【０１５１】
アウトカム情報は、目的（例えば、データ分析アプリケーションのようなアプリケーション層１５０４の目的）を示す情報である目的情報（例えば、ＫＰＩ（Key Performance Indicator））と、目的の達成度を示す情報である達成度情報とを含む。達成度情報は、例えば、アプリケーション層１５０４から設定されてよい。アウトカム情報は、更に、目的達成度の下限値を含んでいてもよい。
【０１５２】
図１９は、モデルテーブル１６０１の構成を示す。
【０１５３】
モデルテーブル１６０１は、データモデル毎に、レコードを有する。各レコードは、モデルＩＤと、データモデルそれ自体とを格納する。
【０１５４】
図２０は、蓄積処理の流れを示す。
【０１５５】
蓄積処理は、ライト処理の一例であり、データストア層１５０３のＡＰＩ（Application Programming Interface）に対して、データストア３１２を指定した蓄積要求が入力された場合に行われる処理である。蓄積要求には、ストアＩＤ、モードＩＤ、キー、及び蓄積対象（データモデル又はデータセット群）が関連付けられる。モードＩＤとしては、“モデル”（蓄積対象がデータモデル）と“データセット群”（蓄積対象がデータセット群）のいずれかが指定される。また、キーは、カラム名、時刻等のレコード情報の少なくとも一部（例えば、蓄積先のアドレス相当の情報）を含んでよい。
【０１５６】
データストア層１５０３は、指定されたストアＩＤに対応するレコード（ストア管理テーブル１６０２におけるレコード）を参照し（Ｓ２００１）、指定されたモードＩＤが“モデル”か否かを判断する（Ｓ２００２）。Ｓ２００２の判断結果が偽の場合（Ｓ２００２：Ｎ）、データストア層１５０３は、蓄積対象のデータセット群のエンコード処理（図２２参照）を行う（Ｓ２００３）。
【０１５７】
Ｓ２００２の判断結果が真の場合（Ｓ２００２：Ｙ）、又は、Ｓ２００３の後、データストア層１５０３は、蓄積か否かを判断する（Ｓ２００４）。エンコード処理（Ｓ２００３）において一致データモデルが見つかっていれば、Ｓ２００４の判断結果が真となる。エンコード処理（Ｓ２００３）において一致データモデルが見つかっていなければ、Ｓ２００４の判断結果が偽となる。エンコード処理（Ｓ２００３）が行われなかった場合、Ｓ２００４において、蓄積対象のデータセット群と一致するデータセット群が存在するか否かの一致判断が行われてもよいし、或いは、そのような判断が行われることなくＳ２００４の判断結果が真でもよい。
【０１５８】
Ｓ２００４の判断結果が真の場合（Ｓ２００４：Ｙ）、データストア層１５０３は、テーブル更新を行う（Ｓ２００５）。具体的には、データストア層１５０３は、蓄積対象のデータモデル（蓄積要求に関連付いたデータモデル、又は、エンコード処理（Ｓ２００３）において生成されたデータモデル）と、当該データモデルのモデルＩＤとを、モデルテーブル１６０１に追加する。また、データストア層１５０３は、蓄積要求に関連付けられているキーと、当該データモデルのモデルＩＤと、当該データモデルに対応した入力ベクトルとを、キー変換テーブル４０１に追加する。
【０１５９】
図２１は、利用処理の流れを示す。
【０１６０】
利用処理は、リード処理の一例であり、データストア層１５０３のＡＰＩに対して、データストア３１２を指定した利用要求が入力された場合に行われる処理である。利用要求には、ストアＩＤ、モードＩＤ及びキーが関連付けられる。モードＩＤとしては、“モデル”（データモデルの返却）と“データセット群”（データセット群の返却）のいずれかが指定される。また、キーは、カラム名、時刻等のレコード情報の少なくとも一部（例えば、蓄積先のアドレス相当の情報）を含んでよい。
【０１６１】
データストア層１５０３は、指定されたストアＩＤに対応するレコード（ストア管理テーブル１６０２におけるレコード）を参照し（Ｓ２１０１）、利用要求に関連付いているキーに対応したモデルＩＤ及び入力ベクトルをキー変換テーブル４０１から特定する（Ｓ２１０２）。データストア層１５０３は、特定したモデルＩＤに対応したデータモデルをモデルテーブル１６０１から特定する（Ｓ２１０３）。データストア層１５０３は、モードＩＤが“モデル”か否かを判断する（Ｓ２１０４）。
【０１６２】
Ｓ２１０４の判断結果が偽の場合（Ｓ２１０４：Ｎ）、データストア層１５０３は、特定した入力ベクトルを特定したデータモデルに入力してデータセット群を復元するデコード処理（図１４参照）を行う（Ｓ２１０５）。そして、データストア層１５０３は、復元されたデータセット群を返す（Ｓ２１０６）。
【０１６３】
Ｓ２１０４の判断結果が真の場合（Ｓ２１０４：Ｙ）、データストア層１５０３は、特定されたデータモデル（及び入力ベクトル）を返す（Ｓ２１０７）。この場合、データストア層１５０３とクライアント層１５０５間の転送量は、Ｓ２１０６での転送量に比べて削減される。Ｓ２１０７で返されたデータモデル（及び入力ベクトル）は、クライアントメモリ領域部１７００に格納される。クライアント層１５０５が、当該データモデル（及び入力ベクトル）から復元されるデータセット群の利用のときに、当該データモデル（及び入力ベクトル）を用いたデコード処理を行う。このため、クライアントメモリ領域部１７００に常にデータセット群が展開されていることに比べて、クライアントメモリ領域部１７００の使用記憶容量は少なく、故に、クライアントメモリ領域部１７００の利用効率が高い。また、クライアント層１５０５は、利用対象のデータモデルがクライアントメモリ領域部１７００に存在するか否かの判断を行うことができる。データセット群ではなくデータモデル（又はモデルハッシュ）が比較対象となるため、ヒット率の向上が期待できる。
【０１６４】
図２２は、実施例２に係るエンコード処理の流れを示す。
【０１６５】
実施例２では、エンコード処理を行うのは、ブロックストレージ層１５０２より上の層であるため、図１２のＳ１２０１及びＳ１２０２相当の処理は不要である。
【０１６６】
データストア層１５０３は、蓄積対象のデータモデルとの一致度が第１閾値以上のデータモデルである一致データモデルが存在するか否かの一致判断を行う（Ｓ２２０１）。図１２のＳ１２０３との主な相違点は、参照される第１閾値は、可変値であり、当該データモデルが属するデータストアに対応した許容誤差が大きいと小さい傾向にある点である。
【０１６７】
Ｓ２２０１の判断結果が真の場合（Ｓ２２０１：Ｙ）、データストア層１５０３は、データセット群とパターン（一致データモデルからの出力としてのデータセット群）との誤差と、許容誤差とに基づく情報である誤差情報を生成し、生成した誤差情報を圧縮することで、新たな入力ベクトルを完成させる（Ｓ２２０３）。データストア層１５０３は、キー変換テーブル４０１を更新する（Ｓ２２０４）。Ｓ２２０４は、図１２のＳ１２０６と同様でよい。具体的には、例えば、データストア層１５０３は、ライト先のアドレスを含んだ新たなキーとＳ２２０３で生成した新たな入力ベクトル（圧縮した誤差情報を含んだ入力ベクトル）とを、一致データモデルのモデルＩＤに新たに関連付ける。
【０１６８】
Ｓ２２０１の判断結果が偽の場合（Ｓ２２０１：Ｎ）、データストア層１５０３は、モデルハッシュテーブル４０２及びモデルテーブル１６０１を更新する（Ｓ２２０２）。例えば、データストア層１５０３は、算出されたモデルハッシュと、生成されたデータモデルのモデルＩＤとを、モデルハッシュテーブル４０２に追加し、且つ、生成されたデータモデルのモデルＩＤと、生成されたデータモデルそれ自体を、モデルテーブル１６０１に追加する。データストア層１５０３は、データセット群とパターン（データモデルからの出力としてのデータセット群）との誤差と、許容誤差とに基づく情報である誤差情報を生成し、生成した誤差情報を圧縮する（Ｓ２２０３）。誤差情報は、例えば、パターンを構成する複数のデータセット群にそれぞれ対応した複数の補正値の配列でよい。また、データストア層１５０３は、Ｓ２２０４を行う。
【０１６９】
図２３は、実施例２に係るデコード処理の流れを示す。デコード処理は、データストア層１５０３及びクライアント層１５０５のいずれも行うことができるが、ここでは、クライアント層１５０５を例に取る。
【０１７０】
実施例２では、デコード処理を行うのは、ブロックストレージ層１５０２より上の層であるため、図１４のＳ１４０３及びＳ１４０４相当の処理は不要である。
【０１７１】
クライアント層１５０５は、クライアントメモリ領域部１７００におけるデータモデルに入力ベクトル中の入力値を入力することでデータセット群（パターン）を得る（Ｓ２３０１）。
【０１７２】
クライアント層１５０５は、誤差情報処理をする（Ｓ２３０２）。具体的には、クライアント層１５０５は、入力ベクトル中の誤差情報を用いて、Ｓ２３０１で得られたパターンを補正する。
【０１７３】
図２４は、モデル想起処理の流れを示す。
【０１７４】
モデル想起処理は、検索処理の一例であり、データストア層１５０３のＡＰＩに対して、データストア３１２を指定した想起要求が入力された場合に行われる処理である。想起要求には、モードＩＤ及び検索条件が関連付けられる。モードＩＤとしては、“モデル”（データモデルの入力）と“データセット群”（データセット群の入力）のいずれかが指定される。また、検索条件は、データモデル（又はそれのモデルハッシュ）又はデータセット群を含む。また、検索条件は、モデルＩＤ、カラム名及びデータセット範囲といった任意の種類の条件を含んでもよい。
【０１７５】
データストア層１５０３は、ストア管理テーブル１６０２を参照し（Ｓ２４０１）、モードＩＤが“モデル”か否かを判断する（Ｓ２４０２）。Ｓ２４０２の判断結果が偽の場合（Ｓ２４０２：Ｎ）、データストア層１５０３は、検索条件に含まれるデータセット群のエンコード処理（図１２参照）を行う（Ｓ２４０３）。
【０１７６】
Ｓ２４０２の判断結果が真の場合（Ｓ２４０２：Ｙ）、又は、Ｓ２４０３の後、データストア層１５０３は、比較対象のモデルハッシュ（入力されたデータモデルのモデルハッシュ、又は、Ｓ２４０３で生成されたデータモデルのモデルハッシュ）との一致度が所定値以上のモデルハッシュをモデルハッシュテーブル４０２から検索する（Ｓ２４０４）。データストア層１５０３は、見つかったモデルハッシュに対応したモデルＩＤに関連付いたキーをキー変換テーブル４０１から特定する（Ｓ２４０５）。データストア層１５０３は、特定されたキーを返す（Ｓ２４０６）。
【０１７７】
このように、検索処理において参照される対象は、データセット群よりもデータ量の少ないモデルハッシュ（又はデータモデル）であるため、高速な処理が期待できる。また、返される対象は、データセット群ではなく、結果としてのキーであるため、転送量を削減することができる。
【０１７８】
図２５は、ＧＵＩ（アウトカム設定）の一例を示す。
【０１７９】
データストア層１５０３は、ストア管理テーブル１６０２に基づき図２５に例示するＧＵＩ（Graphical User Interface）２５００を表示する。ＧＵＩに代えて他種の画面が採用されてもよい。
【０１８０】
データストア層１５０３は、データストア３１２毎に、例えば下記を表示する。
・アウトカム情報中の目的達成度、
・メタ情報中のデータ保持期間（データストア３１２にデータが格納された日時からの期間）、
・メタ情報中のデータ種別、
・メタ情報中の許容誤差、及び、
・メタ情報中の決定性。
【０１８１】
目的達成度は、ユーザにより入力された情報でもよいし、所定の方法で定期的に計算され更新された情報でもよい。
【０１８２】
「許容誤差」は、例えば、割合で指定されてもよいし、定数値（例えば、定数値0.01を指定すると、少数第２位までが有効）で指定されてもよい。
【０１８３】
また、「決定性」とは、データストア３１２についていつ利用要求を受けても同じデータセット群を返すことを維持するか否かを意味する。“決定的”が、同じデータセット群を返すことの維持を意味する。“非決定的”が、同じデータセット群を返すことの維持をしないことを意味する。“決定的”が採用されたデータストア３１２に対応した忘却制御情報は、忘却が無いことを示す情報、すなわち、第１及び第２の誤差調整処理のいずれも行わないことを示す。補正誤差や許容誤差が動的に変わると、復元されるデータセット群が異なるためである。
【０１８４】
図２５において、下線が引かれた情報要素が、ユーザにより設定変更可能な情報要素の一例である。すなわち、本実施例では、許容誤差を割合や定数値のどちら（又は両方）で指定するか、及び、決定性が、ユーザにより設定変更可能な情報要素である。
【０１８５】
なお、“データストア２”について、「ストレージを増設してください」のような、記憶容量の増設の提示があるが、これは、目的達成度をユーザ所望の達成度以上にするためには今後誤差を小さくすることが必須であり、結果として、データ量の削減の度合が下がることが見込まれるからである。既に十分な空きの記憶容量がある場合には、このような提示は無くてもよい。データストア層１５０３及びクライアント層１５０５のうちの少なくとも１つが、定期的に又は不定期的に（例えば、ユーザからＧＵＩ２５００の表示要求を受けたときに、又は、第２の誤差調整処理を行ったときに）、データストア３１２に対応した目的達成度がユーザ所望の達成度以上か否かを判断し、当該判断の結果が偽の場合に上述のストレージ増設の提示をしてもよい。当該判断は、予め入力されているユーザ所望の達成度（アウトカム情報中の、目的達成度の下限値）を基に行われてもよいし、ユーザからユーザ所望の達成度が満たされているか否かの回答を受け当該回答を基に行われてもよい。
【０１８６】
図２６は、許容誤差と補正値との関係の一例を示す。なお、実施例２は、モデル化前のデータセット群を構成する各データセット（値）が正の実数であることを前提とするが、モデル化前のデーセット群のうちの少なくとも１つのデータセットが負の値でも正負の情報を保持することで本発明を適用することができる。また、図２６は、誤差が割合（誤差率）で指定されるケースの例に基づくが、誤差が定数値で指定されるケースについても本発明を適用することができる。
【０１８７】
図２６において、Ｋ（Ｋ１〜Ｋ９の各々）は、ｒ／ｐである。ｒは、モデル化前のデータセット群におけるデータセットであり、ｐは、パターンにおけるデータセットである。従って、誤差が無い場合、Ｋ＝１である。従って、誤差＝Ｋ−１である。Ｋが１から離れる程、誤差が大きいことになる。
【０１８８】
また、図２６において、許容誤差はαである。Ｋをベースにした場合、許容誤差範囲は、１／（１＋α）以上１＋α以下と表現される。
【０１８９】
誤差情報は、パターン（データモデルからの出力データセット群）を構成する複数の出力データセットにそれぞれ対応した複数の補正値ｄの配列である。ｄ（及びｄの桁数）は、α又はｅ（補正誤差）が小さい程、大きい傾向にある。言い換えれば、ｄ（及びｄの桁数）は、α又はｅが大きい程、小さい傾向にある。α又はｅが小さくなるにつれて、ｄは０（所定値の一例）に近づく。従って、α又はｅが小さい程、誤差情報には、０が多くなり、結果として、誤差情報の圧縮が効きやすくなる。誤差情報は、上述したように、エンコード処理において生成される。
【０１９０】
本実施例では、許容誤差範囲内にあるＫに対応した出力データセットについては、補正は不要、すなわち、ｄ＝０である。図２６の例によれば、Ｋ２、Ｋ４、Ｋ８及びＫ９の各々に対応した出力データセットの補正は不要である。
【０１９１】
一方、許容誤差範囲外にあるＫに対応したデータセットについては、補正は必要、すなわち、ｄ＞０である。具体的には、Ｋが許容誤差範囲内に収まるＫ´となるようなｄが決定される。Ｋ´＝ｒ／ｒ´である。ｒ´＝ｐｄ、すなわち、ｒ´は、ｄを用いて補正されたｐである。補正後のデータセットｒ´に誤差が無ければ、Ｋ´＝１となる。図２６の例によれば、Ｋ１、Ｋ２、Ｋ５、Ｋ６及びＫ７がそれぞれ許容誤差範囲内のＫ１´、Ｋ２´、Ｋ５´、Ｋ６´及びＫ７´となるよう、Ｋ１、Ｋ２、Ｋ５、Ｋ６及びＫ７にそれぞれ対応した出力データセットの補正値ｄが決定される。具体的には、補正値ｄは、ｌｏｇ（ｒ／ｐ，底：１＋α＊２）の値を小数点第１位で四捨五入することで得られた値である。ｒ´は、ｐ＊（１＋α＊２）ｄである。補正誤差ｅは、Ｋ´−１＝（ｒ／ｒ´）−１である。ｅ≦αである。
【０１９２】
以下、第１及び第２の誤差調整処理の流れを説明する。第１及び第２の誤差調整処理のいずれも、データストア層１５０３及びクライアント層１５０５のいずれが行ってもよいが、本実施例では、データストア層１５０３が行うものとする。
【０１９３】
図２７は、第１の誤差調整処理の流れを示す。第１の誤差調整処理は、例えばデータストア３１２毎に行われる。以下、１つのデータストア３１２を例に取る（図２７の説明において、「対象データストア３１２」）。
【０１９４】
データストア層１５０３は、許容誤差の範囲内で補正誤差を大きくする（Ｓ２７０１）。具体的には、例えば、データストア層１５０３は、下記の処理を行う。下記の処理により、大きくされた補正誤差に対応した出力データセットの補正値が更新される。
・データストア層１５０３は、対象データストア３１２に対応した許容誤差を、ストア管理テーブル１６０２から特定する。
・データストア層１５０３は、対象データストア３１２に属するデータモデルを、キー変換テーブル４０１を基に特定する。
・データストア層１５０３は、特定データモデルから出力されるデータセット群を構成する１以上の出力データセットのうち、補正誤差（図２６の例によれば、ｅ＝ｒ／ｒ´−１）のある出力データセットについて、当該出力データセットの補正誤差を、所定の規則に従って、許容誤差の範囲内で大きくする。「所定の規則」は、対象データストア３１２に対応した忘却制御情報が示す規則である。
【０１９５】
データストア層１５０３は、対象データストア３１２に属する各データモデルについて、キー変換テーブル４０１から入力ベクトルを誤差情報を読み出し、読み出した入力ベクトル中の誤差情報を伸張し、伸張された誤差情報を、Ｓ２７０１の結果に基づき更新し、更新された誤差情報を圧縮し、圧縮された誤差情報を含んだ入力ベクトルを、キー変換テーブル４０１にライト（例えば上書き）する（Ｓ２７０２）。
【０１９６】
データストア層１５０３は、Ｓ２７０１の結果（例えば、補正誤差の平均値）を基に、第１閾値を小さくする（Ｓ２７０３）。補正誤差と第１閾値の関係は、例えば予め定義されていてよい。当該関係を基に、Ｓ２７０３が行われる。Ｓ２７０１が行われても第１閾値の変更が不要であれば（例えば、補正誤差の変化が第１閾値の変更が不要な程に小さければ）、Ｓ２７０３はスキップされてよい。
【０１９７】
図２８は、第２の誤差調整処理の流れを示す。第２の誤差調整処理は、例えばデータストア３１２毎に行われる。以下、１つのデータストア３１２を例に取る（図２８の説明において、「対象データストア３１２」）。
【０１９８】
データストア層１５０３は、許容誤差を大きくする（Ｓ２８０１）。具体的には、例えば、データストア層１５０３は、下記のうちのいずれかの処理を行う。下記の処理により、対象データストア３１２に属するデータモデルに対応した誤差情報中の各補正値が更新される。
・データストア層１５０３は、対象データストア３１２に対応した許容誤差として、ユーザにより大きくされた許容誤差を受けて、当該許容誤差を、ストア管理テーブル１６０２に設定する。
・データストア層１５０３は、対象データストア３１２に対応した許容誤差を、ストア管理テーブル１６０２から特定する。データストア層１５０３は、対象データストア３１２に対応したアウトカム情報中の目的達成度が相対的に高ければ（例えば、現在の目的達成度がユーザ所望の達成度よりも更に高くなっていれば）、許容誤差を大きくする。許容誤差の増加量は、目的達成度と許容誤差との予め定義された関係と、目的達成度と許容誤差との関係の過去の履歴とのうちの少なくとも１つを基に決定されてよい。
【０１９９】
データストア層１５０３は、対象データストア３１２に属する各データモデルについて、キー変換テーブル４０１から入力ベクトルを誤差情報を読み出し、読み出した入力ベクトル中の誤差情報を伸張し、伸張された誤差情報を、Ｓ２８０１の結果に基づき更新し、更新された誤差情報を圧縮し、圧縮された誤差情報を含んだ入力ベクトルを、キー変換テーブル４０１にライト（例えば上書き）する（Ｓ２８０２）。
【０２００】
データストア層１５０３は、Ｓ２８０１の結果（例えば、更新後の許容誤差）を基に、第１閾値を小さくする（Ｓ２８０３）。許容誤差と第１閾値の関係は、例えば予め定義されていてよい。当該関係を基に、Ｓ２８０３が行われる。Ｓ２８０１が行われても第１閾値の変更が不要であれば（例えば、許容誤差の変化が第１閾値の変更が不要な程に小さければ）、Ｓ２８０３はスキップされてよい。
【０２０１】
第２の誤差調整処理によれば、ユーザ所望の目的達成度に比してオーバースペックの記憶容量を削減することが期待できる。例えば、図２９に示すように、ユーザ所望の目的達成度がｖであるにも関わらず、現在の許容誤差がｗ１であるとすると、ユーザにとっては過剰に精度の高いデータが格納されていることになる。そこで、許容誤差を、ｗ１から、目的達成度ｖに対応したｗ２に大きくすることで、データモデルから復元されるデータセット群の精度は落ちるものの、ユーザ所望の目的達成度を維持し、且つ、記憶容量を削減することが期待できる。
【０２０２】
図３０は、非同期重複排除処理の流れを示す。
【０２０３】
上述したように、一致判断で使用される第１閾値は、補正誤差又は許容誤差が大きくされることで小さくされ得る。従って、蓄積処理においては一致データモデルがあると判断されなくても、蓄積処理から時間が経過した後では、一致データモデルが存在し得ることになる。定期的に又は非定期的に非同期重複排除処理が行われることで、一致データモデルに該当することにあったデータモデルが見つかり、見つかったデータモデルが削除される。結果として、データ量が削減される。非同期重複排除処理は、データストア層１５０３及びクライアント層１５０５のいずれが行ってもよいが、本実施例では、データストア層１５０３が行うものとする。
【０２０４】
データストア層１５０３は、モデルテーブル１６０１に登録されている各データモデルについて、Ｓ３００１及びＳ３００２を行う。以下、１つのデータモデルを例に取る（図３０の説明において「対象データモデル」）。
【０２０５】
データストア層１５０３は、対象データモデルとの一致度が第１閾値以上のデータモデルである一致データモデルがモデルテーブル１６０１に格納済か否かの一致判断を行う（Ｓ３００１）。
【０２０６】
Ｓ３００１の一致判断の結果が真の場合（Ｓ３００２）、データストア層１５０３は、対象データモデルと一致データモデルとのうちのいずれかをモデルテーブル１６０１から削除し、テーブル４０１及び４０２を更新する（Ｓ３００２）。例えば、データストア層１５０３は、キー変換テーブル４０１の更新では、削除したデータモデルのモデルＩＤを削除し、削除したデータモデルのキー及び入力ベクトルを、残ったデータモデルのキーに関連付ける。また、例えば、データストア層１５０３は、モデルハッシュテーブル４０２の更新では、削除したデータモデルに対応したレコードを削除する。すなわち、データモデルは削除されるが、削除されたデータモデルの入力ベクトル及びキーが、残ったデータモデルに関連付けられる。
【０２０７】
データストア層１５０３による重複排除処理の結果は、クライアント層１５０５にもブロックストレージ層１５０２にも適用されてよい。例えば、データストア層１５０３は、重複排除処理の結果（削除したデータモデルのモデルＩＤと、残ったデータモデルのモデルＩＤとの組を含んだ情報）をクライアント層１５０５に通知し、クライアント層１５０５が、通知された結果を基に、テーブル１７０１〜１７０３を更新してよい。また、データストア層１５０３は、削除したデータモデルのアドレス（キーの少なくとも一部）を指定した削除要求をブロックストレージ層１５０２に送信し、ブロックストレージ層１５０２が、その削除要求で指定されたアドレスにあるデータを削除してよい。
【０２０８】
本実施例では、第２閾値（類似判断で使用される閾値）も、可変値であり、許容誤差が大きいと小さい傾向にあってよい。
【実施例３】
【０２０９】
実施例３を説明する。その際、実施例１及び２との相違点を主に説明し、実施例１及び２との共通点については説明を省略又は簡略する。
【０２１０】
図３１は、実施例３に係るシステムの論理階層構造を示す。
【０２１１】
実施例３では、エッジノード部２５０Ａとコアノード部２５０Ｂとのうちの少なくともエッジノード部２５０Ａがストレージシステム３１１０を構成する。エッジノード部２５０Ａが、アプリケーション層１５０４（クライアント層１５０５）及びデータストア層３１０３を提供する。以下、エッジノード部２５０Ａは１つのエッジノード２０１Ａで構成され、コアノード部２５０Ｂは１つのコアノード２０１Ｂで構成されているとする。エッジノード２０１Ａにおけるデータストア層３１０３が、コアノード２０１Ｂとの間でデータの送受信を行う。なお、コアノード２０１Ｂとの間でデータの送受信は、データストア層３１０３に代えて又は加えて、ブロックストレージ層１５０２やクライアント層１５０５といった他の層が行ってもよい。
【０２１２】
図３２は、蓄積処理の流れを示す。
【０２１３】
データストア層３１０３は、Ｓ２００１〜Ｓ２００５と同様の処理を行う（Ｓ３２０１〜Ｓ３２０５）。
【０２１４】
データストア層３１０３は、モデルテーブル１６０１を更新した場合、同一データモデルをコアノード２０１Ｂに送信済か否かを判断する（Ｓ３２０６）。例えば、アドレス毎に、送信済か否かの状態が管理されていて、当該状態を基に、Ｓ３２０６の判断が行われてよい。
【０２１５】
Ｓ３２０６の判断結果が偽の場合（Ｓ３２０６：Ｎ）、データストア層３１０３は、ストアＩＤ、キー及びデータモデルをコアノード２０１Ｂに送信する（Ｓ３２０７）。この場合、コアノード２０１Ｂにおいて、当該データモデルが、モデルテーブル１６０１に格納される。
【０２１６】
Ｓ３２０６の判断結果が真の場合（Ｓ３２０６：Ｙ）、データストア層３１０３は、ストアＩＤ、キー及びモデルＩＤをコアノード２０１Ｂに送信する（Ｓ３２０８）。この場合、コアノード２０１Ｂにおいて、当該モデルＩＤと同一のモデルＩＤに対応したキー（キー変換テーブル４０１におけるキー）に、送信されたキーが追加される。このように、コアノード２０１Ｂに既に同一のデータモデルがある場合には、データモデルに代えてモデルＩＤが送信される。これにより、エッジノード２０１Ａからコアノード２０１Ｂへのデータの転送量を削減できる。
【０２１７】
以上、幾つかの実施例を説明したが、これらは本発明の説明のための例示であって、本発明の範囲をこれらの実施例にのみ限定する趣旨ではない。本発明は、他の種々の形態でも実施することが可能である。
【０２１８】
例えば、実施例１〜３を、下記のように総括することができる。
【０２１９】
「差分情報」とは、データモデルからの出力データセット群（生成値）と元のデータセット群（ライト対象のデータセット群）との誤差を表す情報（配列）であり、可逆のため正確な差分値である。
【０２２０】
「誤差情報」とは、データモデルからの出力データセット群と元のデータセット群との誤差をログスケールで表す情報（配列）であり、非可逆なので正確ではないが（但し、許容誤差がゼロであれば正確である）、圧縮が効きやすい。
【０２２１】
「データモデル」とは、データセット群の生成規則としてのモデルであり、実行主体に相当する。データモデルは、新規データモデル、差分データモデル、類似データモデル及び一致データモデルの総称とすることもできる。
【０２２２】
「データセット」とは、データセット群の要素である。
【０２２３】
「データセット群」とは、１個のデータモデルに対応するデータセットの集合である。
【０２２４】
「一致度」とは、類似性を表す指標である。
【０２２５】
「新規データモデル」とは、新たに生成されるデータモデルである（差分データモデルではない）。
【０２２６】
「差分データモデル」とは、生成済みデータモデル（典型的には類似データモデル）に接続させるデータモデル（新規データモデルよりもサイズが小さいデータモデルであって、差分情報とは別）である。なお、生成済みデータモデルが「差分データモデル」であることもあり得る。つまり、１つの差分データモデルが、別の差分データモデルのモデルＩＤを含むこともあり得る。
【０２２７】
対象データモデルに対して、「一致データモデル」とは、対象データモデルとの一致度が第１閾値以上のデータモデルのうちのいずれか（例えば、一致度が最も大きいデータモデル）である。一致データモデルが存在する場合、新たなデータモデルは作成されず、一致データモデルが、２以上のキーに共有されることになる。
【０２２８】
対象データモデルに対して、「類似データモデル」とは、対象データモデルとの一致度が第１閾値未満であるが第２閾値以上であるデータモデルのうちのいずれか（例えば、一致度が最も大きいデータモデル）であり、差分データモデルのベースとなるデータモデルである。上述したように、類似データモデルが別の差分データモデルであることもあり得る。対象データモデルに対して一致データモデルも類似データモデルも存在しない場合（つまり、いずれの既存のデータモデルも、対象データモデルとの一致度が第２閾値未満の場合）、新たなデータモデルが生成される。
【０２２９】
上述の通りのため、差分データモデルは、一致データモデル及び類似データモデルのいずれにも該当することがあり得る。つまり、一致データモデル又は類似データモデルとして特定されたデータモデルが、差分データモデルであることもある。
【０２３０】
また、例えば、キー：入力ベクトルは、１：１、又は、多：１でよい。後者は、同一のデータセット群がライト対象とされることもあり得るためである（つまり、データモデルに加えて入力ベクトルも同一となることがあり得るためである）。
【０２３１】
また、例えば、キー：モデルＩＤ（データモデル）は、１：１、又は、多：１でよい。すなわち、異なる２以上のキーが同一のモデルＩＤ（データモデル）を共有することがあり得る。
【符号の説明】
【０２３２】
１１０…ストレージシステム
【図１】
2019095913.tif 000003
【図２】
2019095913.tif 000004
【図３】
2019095913.tif 000005
【図４】
2019095913.tif 000006
【図５】
2019095913.tif 000007
【図６】
2019095913.tif 000008
【図７】
2019095913.tif 000009
【図８】
2019095913.tif 000010
【図９】
2019095913.tif 000011
【図１０】
2019095913.tif 000012
【図１１】
2019095913.tif 000013
【図１２】
2019095913.tif 000014
【図１３】
2019095913.tif 000015
【図１４】
2019095913.tif 000016
【図１５】
2019095913.tif 000017
【図１６】
2019095913.tif 000018
【図１７】
2019095913.tif 000019
【図１８】
2019095913.tif 000020
【図１９】
2019095913.tif 000021
【図２０】
2019095913.tif 000022
【図２１】
2019095913.tif 000023
【図２２】
2019095913.tif 000024
【図２３】
2019095913.tif 000025
【図２４】
2019095913.tif 000026
【図２５】
2019095913.tif 000027
【図２６】
2019095913.tif 000028
【図２７】
2019095913.tif 000029
【図２８】
2019095913.tif 000030
【図２９】
2019095913.tif 000031
【図３０】
2019095913.tif 000032
【図３１】
2019095913.tif 000033
【図３２】
2019095913.tif 000034