JP2022074807A - ファイルストレージ及びコンピュータシステム - Google Patents
ファイルストレージ及びコンピュータシステム Download PDFInfo
- Publication number
- JP2022074807A JP2022074807A JP2020185166A JP2020185166A JP2022074807A JP 2022074807 A JP2022074807 A JP 2022074807A JP 2020185166 A JP2020185166 A JP 2020185166A JP 2020185166 A JP2020185166 A JP 2020185166A JP 2022074807 A JP2022074807 A JP 2022074807A
- Authority
- JP
- Japan
- Prior art keywords
- chunk
- file
- data
- storage
- read
- 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.)
- Pending
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input 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/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0655—Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
- G06F3/0659—Command handling arrangements, e.g. command buffers, queues, command scheduling
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input 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/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0668—Interfaces specially adapted for storage systems adopting a particular infrastructure
- G06F3/067—Distributed or networked storage systems, e.g. storage area networks [SAN], network attached storage [NAS]
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input 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/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0602—Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
- G06F3/0604—Improving or facilitating administration, e.g. storage management
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input 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/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0602—Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
- G06F3/061—Improving I/O performance
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input 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/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0638—Organizing or formatting or addressing of data
- G06F3/0643—Management of files
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input 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/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0638—Organizing or formatting or addressing of data
- G06F3/0644—Management of space entities, e.g. partitions, extents, pools
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Human Computer Interaction (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
- Information Transfer Between Computers (AREA)
Abstract
【課題】ファイルのデータに対して符号化を行うことができるとともに、ファイルストレージとデータストレージとの間のデータ通信を効率化することができる。【解決手段】ファイルストレージ20において、CPUを、ファイルを複数のチャンクに分割して、チャンクの中の少なくとも1つに対して符号化処理を実行して符号化チャンクとし、符号化チャンクを含むファイルの複数のチャンクをクラウドストレージ30に格納させ、クラウドストレージ30に格納させたファイルの一部のデータを対象とするリード命令を受け付けた場合に、リード命令の対象となるデータを含むリード対象チャンクをクラウドストレージ30から取得し、リード対象チャンクの中に符号化チャンクが含まれている場合に、符号化チャンクに対して逆符号化処理を実行し、逆符号化処理されたチャンクを含むリード対象チャンクからリード対象のデータを特定してリード命令の命令元に渡すようにする。【選択図】図1
Description
本発明は、ファイルを管理するファイルストレージ等に関し、管理するファイルをデータストレージに格納させて利用する技術に関する。
ファイルストレージにおいて管理されているファイルのデータを、遠隔バックアップ、マイグレーション、ファイル仮想化、データの集約等の用途により、ネットワークを介して接続されたクラウドストレージ(データストレージの一例)に格納させることが行われている。この場合、例えば、ファイルストレージは、ファイルを単位として、クラウドストレージにデータを格納させる。
クラウドストレージにデータを格納させて利用する場合には、ファイルストレージとクラウドストレージとの間の通信コストや、通信の所要時間を抑えることが要請されている。したがって、ファイルストレージとクラウドストレージ間での転送するデータ量を削減することが重要である。特に、クラウドストレージとファイルストレージとの間に使用されるネットワークは、WAN(Wide Area Network)であり、一般的には、通信の帯域幅が狭くなっているので、データ量の削減は重要である。
これに対して、ファイルを複数のパートに分割して、ファイルが更新された場合に更新された部分を含むパートをクラウドストレージに転送するようにして、ファイル更新時のデータ量を削減することが行われている。
例えば、特許文献1には、ファイルをパート分割して転送する場合において、転送済みのパートが更新された場合に、効率よくデータを再送することができる技術が開示されている。
また、転送するデータ量を削減する技術としては、ファイルのデータを圧縮することによりデータ量を削減する技術が知られている。
また、クラウドストレージからデータが漏洩してしまうことを防止するために、ファイルのデータを暗号化させて、クラウドストレージに格納する技術が知られている。
例えば、圧縮したり、暗号化したり等の符号化されたファイルをクラウドストレージに格納している場合において、ファイルストレージ側でファイルの一部のデータが必要となった場合においては、例えば、ファイル全体をファイルストレージ側に読み出して逆符号化(伸長及び/又は復号)を行って必要なデータを取得するか、或いは、クラウドストレージ側でファイルに対して逆符号化を行って、逆符号化後のファイルから必要なデータを取得してファイルストレージに送信する必要がある。例えば、前者であれば、ファイル全体を転送する必要があるので、通信のデータ量が大きいという問題がある。一方、クラウドストレージ側で逆符号化を行うようにする場合には、クラウドストレージ側で逆符号化の機能を備えておかなければならず、また、逆符号化の処理の負荷や時間等が掛かるという問題がある。さらに、クラウドストレージ側で暗号化したファイルを管理している場合においては、クラウドストレージ側で復号処理できるようにすると、クラウドストレージ側からのデータの漏洩の危険性が高くなるという問題がある。
これに対して、符号化されたファイルに対しては、特許文献1の技術をそのまま用いることができない。例えば、ファイルの一部に更新があった場合には、符号化されたファイルに対しては、パートが特定できなかったり、ファイルに対して逆符号化をしなければならなかったりするので特許文献1の技術をそのまま利用できない。
本発明は、上記事情に鑑みなされたものであり、その目的は、ファイルのデータに対して符号化を行うことができるとともに、ファイルストレージとデータストレージとの間のデータ通信を効率化することのできる技術を提供することにある。
上記目的を達成するため、一観点に係るファイルストレージは、データを格納するデータストレージに接続され、ファイルを管理するファイルストレージであって、前記ファイルストレージはプロセッサを有し、前記プロセッサは、前記ファイルを複数のチャンクに分割して、前記チャンクの中の少なくとも1つに対して符号化処理を実行して符号化チャンクとし、前記符号化チャンクを含む前記ファイルの複数のチャンクを前記データストレージに格納させ、前記データストレージに格納させたファイルの一部のデータを対象とするリード命令を受け付けた場合に、前記リード命令の対象となるデータを含むリード対象チャンクを前記データストレージから取得し、前記リード対象チャンクの中に符号化チャンクが含まれている場合に、前記符号化チャンクに対して逆符号化処理を実行し、逆符号化処理されたチャンクを含むリード対象チャンクからリード対象のデータを特定して前記リード命令の命令元に渡す。
本発明によれば、ファイルのデータに対して符号化を行うことができるとともに、ファイルストレージとデータストレージとの間のデータ通信を効率化することができる。上記した以外の課題、構成及び効果は、以下の発明を実施するための形態の説明により明らかにされる。
実施形態について、図面を参照して説明する。なお、以下に説明する実施形態は特許請求の範囲に係る発明を限定するものではなく、また実施形態の中で説明されている諸要素及びその組み合わせの全てが発明の解決手段に必須であるとは限らない。
以下の説明では、「AAAテーブル」の表現にて情報を説明することがあるが、情報は、どのようなデータ構造で表現されていてもよい。すなわち、情報がデータ構造に依存しないことを示すために、「AAAテーブル」を「AAA情報」と呼ぶことができる。
また、以下の説明では、「プログラム」を動作主体として処理を説明する場合があるが、プログラムは、プロセッサによって実行されることで、定められた処理を、適宜に記憶部及びインターフェース部のうちの少なくとも1つを用いながら行うため、処理の主語が、プロセッサ(或いは、プロセッサを有するコンピュータ又はコンピュータシステム)とされてもよい。プログラムは、プログラムソースから計算機にインストールされてもよい。プログラムソースは、例えば、プログラム配布サーバ又はコンピュータが読み取り可能な記憶メディア(例えば可搬型の記憶メディア)であってもよい。また、以下の説明において、2以上のプログラムが1つのプログラムとして実現されてもよいし、1つのプログラムが2以上のプログラムとして実現されてもよい。また、プログラムが実行されることによって実現される処理のうちの少なくとも一部が、ハードウェア回路(例えば、ASIC(Application Specific Integrated Circuit)又はFPGA(Field-Programmable Gate Array))によって実現されてもよい。
図1は、一実施形態に係るコンピュータシステムの全体構成図である。
コンピュータシステム1は、1以上のコンピュータ10と、1以上のファイルストレージ20と、データストレージの一例としてのクラウドストレージ30とを備える。
コンピュータ10と、ファイルストレージ20とは、例えば、クライアント側となる拠点(拠点A、拠点B等)に設けられており、拠点のLAN(Local Area Network)40を介して接続されている。
コンピュータ10は、ファイルストレージ20が管理するファイルを使用してユーザが各種処理を実行する装置である。ファイルストレージ20は、コンピュータ10により使用されるファイルを管理するファイルシステムを有する。
クラウドストレージ30は、例えば、サーバ側となるデータセンタに設けられ、ネットワーク50に接続されている。ネットワーク50は、例えば、WAN(Wide Area Network)であり、各拠点のLAN40と接続されている。
クラウドストレージ30は、データストレージの一例であり、ファイルストレージ20で管理される複数のファイルの少なくとも一部のデータを格納する。
次に、ファイルストレージ20の構成について詳細に説明する。
図2は、一実施形態に係るファイルストレージの構成図である。
ファイルストレージ20は、例えば、PC(Personal Computer)や、メインフレーム、サーバ等で構成され、処理装置21と周辺装置22とを有する。処理装置21は、主記憶装置(メインメモリ)23と、プロセッサの一例としての中央演算処理装置(CPU:Central Processing Unit)24とを有する。
CPU24は、主記憶装置23に格納されているプログラムに従って各種処理を実行する。
主記憶装置23は、例えば、RAM(Random Access Memory)であり、CPU24で実行されるプログラムや、必要な情報を記憶する。主記憶装置23は、ファイルシステム管理プログラム231と、ファイル操作プログラム232と、ファイル操作監視プログラム233と、ファイル分割/結合プログラム234と、伸長/圧縮プログラム235と、復号/暗号化プログラム236と、データ通信・ファイル転送プログラム237と、ファイル共有プログラム238と、クラウドストレージ操作プログラム239と、ハッシュ値生成/比較プログラム240と、差分検出プログラム241と、ファイルマップ管理プログラム242と、チャンクマップマップ管理/操作プログラム243と、ファイル識別子生成/管理プログラム244と、チャンクマップ管理/操作プログラム245と、スタブファイルリード処理プログラム246と、排他制御プログラム247と、を含む。
ファイルシステム管理プログラム231は、ファイルを管理するファイルシステムを管理する。ファイル操作プログラム232は、ファイルに対する操作(作成、リード、更新、消去等)を実行する。ファイル操作監視プログラム233は、ファイルに対する操作を監視する。ファイル分割/結合プログラム234は、ファイルをチャンクに分割したり、チャンクを結合したりする。伸長/圧縮プログラム235は、データに対する伸長処理と、圧縮処理とを実行する。復号/暗号化プログラム236は、暗号化データの復号処理と、データの暗号化処理とを実行する。データ通信・ファイル転送プログラム237は、ネットワーク50を介してのデータ通信や、ファイルの転送処理を実行する。ファイル共有プログラム238は、複数の拠点のファイルストレージ20との間でのファイル共有に関する処理を行う。クラウドストレージ操作プログラム239は、クラウドストレージ30を操作する処理、例えば、クラウドストレージ30に対して各種命令を行う処理を実行する。ハッシュ値生成/比較プログラム240は、データに対するハッシュ値の生成処理や、ハッシュ値の比較処理を行う。差分検出プログラム241は、データ間の差分を検出する。ファイルマップ管理プログラム242は、ファイルストレージ20におけるローカルファイルと、クラウドストレージ30のデータ(オブジェクト又はファイル)との対応関係を管理する。チャンクマップマップ管理プログラム243は、後述するチャンクマップマップ255を管理する処理を行う。ファイル識別子生成/管理プログラム244は、クラウトストレージ30で識別するためのファイル識別子を生成して管理する処理を行う。チャンクマップ操作プログラム245は、後述するチャンクマップ257(257A、257B)に対する操作(作成、リード、更新、消去等)を行う。スタブファイルリードプログラム246は、スタブ化されたファイル(スタブファイル)の本体をクラウドストレージ30から読み出す処理を実行する。排他制御プログラム247は、ファイルにアクセスする際の排他制御を行う。
周辺機器22は、記憶部の一例としての補助記憶装置25と、ネットワークカード(NIC:Network Interface Card)26とを有する。主記憶装置23と、CPU24と、補助記憶装置25と、ネットワークカード26とは、バス27を介して接続されている。
補助記憶装置25は、例えば、HDD(Hard Disk Drive)やフラッシュメモリ、ブロックストレージ等の不揮発性の記憶装置であり、CPU24で実行されるプログラムや、CPU24に利用される各種データを格納する。本実施形態では、補助記憶装置25は、ファイルシステム251を構成する情報を格納する。
ファイルシステム251は、ルートディレクトリ252と、1以上のディレクトリ253と、ファイルマップ254と、チャンクマップマップ255と、ファイル256と、符号化処理情報の一例としてのチャンクマップ257とを格納する。
ルートディレクトリ252は、ファイルシステムのルートとなるディレクトリの情報であり、ルートディレクトリに含まれるディレクトリやファイルの情報を格納する。ディレクトリ253は、自身に含まれるディレクトリやファイルの情報を格納する。
ファイルマップ254は、ファイルストレージ20が管理しているローカルファイルの識別情報(ディレクトリ情報)と、ファイルをクラウドストレージ30で特定可能な識別情報(ファイル識別子:厳密には、例えば、クラウドストレージ30がオブジェクトストレージであればオブジェクト識別子であり、クラウドストレージ30がファイルストレージであればファイル識別子である。)との対応関係を記憶する。
チャンクマップマップ255は、ファイルのクラウドストレージ30でのファイル識別子と、このファイルのチャンクマップ257のファイル(チャンクマップファイル)の識別子との対応関係を管理するテーブルである。なお、チャンクマップマップ255については、図7を参照して後述する。ファイル256は、ファイルシステム251で管理するファイルである。チャンクマップ257は、ファイルを分割したチャンクのオフセット(ファイル内での位置情報)等を管理するテーブルである。チャンクマップ257としては、チャンクを個別に(独立して)クラウドサーバ30で保存する場合に使用するチャンク個別保存用のチャンクマップ257Aと、チャンクを結合してクラウドサーバ30で保存する場合に使用するチャンク結合保存用のチャンクマップ257Bとがある。なお、チャンクマップ257(257A、257B)については、図5、図6を参照して後述する。
次に、クラウドストレージ30の構成について詳細に説明する。
図3は、一実施形態に係るクラウドストレージの第1の構成図である。図3に示すクラウドストレージ30は、データをオブジェクトとして管理するオブジェクトストレージとした場合の構成図である。
クラウドストレージ30は、例えば、PCや、メインフレーム、サーバ等で構成され、処理装置31と周辺装置32とを有する。処理装置31は、主記憶装置(メインメモリ)33と、プロセッサの一例としてのCPU34とを有する。
CPU34は、主記憶装置33に格納されているプログラムに従って各種処理を実行する。
主記憶装置33は、例えば、RAMであり、CPU34で実行されるプログラムや、必要な情報を記憶する。主記憶装置33は、オブジェクトシステム管理プログラム331と、オブジェクト操作プログラム332と、ファイル操作プログラム333と、ファイル分割/結合プログラム334と、データ通信・ファイル転送プログラム335と、を含む。
オブジェクトシステム管理プログラム331は、オブジェクトを管理するオブジェクトシステムを管理する。オブジェクト操作プログラム332は、オブジェクトに対する操作(ライト、リード、消去等)を実行する。ファイル操作プログラム333は、オブジェクトに含まれるファイルに対する操作(ライト、リード、消去等)を実行する。ファイル分割/結合プログラム334は、ファイルをチャンクに分割したり、チャンクを結合したりする。データ通信・ファイル転送プログラム335は、ネットワーク50を介してのデータ通信や、ファイルの転送処理を実行する。
周辺機器32は、補助記憶装置35と、ネットワークカード(NIC)36とを備える。主記憶装置33と、CPU34と、補助記憶装置35と、ネットワークカード36とは、バス37を介して接続されている。
補助記憶装置35は、例えば、HDDやフラッシュメモリ、ブロックストレージ等の不揮発性の記憶装置であり、CPU34で実行されるプログラムや、CPU34に利用される各種データや、オブジェクトシステム351を構成する情報(オブジェクトも含む)を格納する。
オブジェクトシステム351は、バケット352を格納する。バケット352は、1以上のオブジェクト353を格納する。オブジェクト353は、ユーザデータファイル354や、メタデータファイル355を含む。ユーザデータファイル354は、ファイルストレージ20で管理されているファイル又はそのファイルのチャンクのファイルである。メタデータファイル355は、ユーザデータファイル354に関するオブジェクトシステム351におけるメタデータである。
図4は、一実施形態に係るクラウドストレージの第2の構成図である。図4に示すクラウドストレージ30は、データをファイルとして管理するファイルストレージとした場合の構成図である。なお、図3に示す構成と同様な部分については同一の符号を付して重複する説明を省略する場合がある。
主記憶装置33は、ファイルシステム管理プログラム341と、ファイル操作プログラム333と、ファイル分割/結合プログラム334と、データ通信・ファイル転送プログラム335と、ファイル共有プログラム342とを含む。
ファイルシステム管理プログラム341は、ファイルを管理するファイルシステムを管理する。ファイル共有プログラム342は、複数の拠点のファイルストレージ20との間でのファイル共有に関する処理を行う。
次に、チャンク個別保存用のチャンクマップ257Aについて説明する。
図5は、一実施形態に係るチャンク個別保存用のチャンクマップの構成図である。
チャンク個別保存用のチャンクマップ257Aは、クラウドストレージ30においてチャンクを個別にファイル(クラウドストレージ30がオブジェクトストレージであればオブジェクト)として格納する場合のチャンクマップである。チャンクマップ257Aは、ファイルストレージ20における各ファイル毎に対応して設けられる。チャンクマップ257Aは、このチャンクマップ257Aに対応するファイルのチャンク毎のエントリを有する。チャンクマップ257Aのエントリは、無処理開始オフセット2571と、無処理終了オフセット(無処理チャンクサイズ)2572と、チャンクファイル識別子2573と、チャンクファイルサイズ2574と、処理内容2575と、チャンクハッシュ値2576と、のフィールドを含む。なお、無処理終了オフセット(無処理チャンクサイズ)2572と、チャンクファイルサイズ2574と、チャンクハッシュ値2576とは、動作上、必須のフィールドではない。
無処理開始オフセット2571には、エントリに対応するチャンクの無処理ファイルの先頭からのチャンクの開始位置(開始オフセット)が格納される。ここで、無処理とは、圧縮や暗号化等の符号化が行われていない状態のことをいい、無処理ファイルとは、無処理のファイル、すなわち、非圧縮且つ平文のファイルのことをいう。無処理終了オフセット(無処理チャンクサイズ)2572には、エントリに対応するチャンクの無処理ファイルの先頭からの終了位置(終了オフセット)が格納されるとともに、無処理のチャンクのサイズ(チャンクサイズ)が格納される。なお、無処理終了オフセット(無処理チャンクサイズ)2572に、終了オフセット又はチャンクサイズのいずれか一方のみを格納してもよい。チャンクファイル識別子2573には、エントリに対応するチャンクをクラウドストレージ30で識別するための識別子(本例では、ファイル識別子)が格納される。チャンクファイルサイズ2574は、クラウドストレージ30に格納されるチャンクのファイルサイズ、すなわち、チャンクに対応する所定の処理後のチャンクのチャンクサイズが格納される。処理内容2575には、エントリに対応するチャンクに対して実行される処理の内容が格納される。処理の内容としては、符号化処理(圧縮処理及び/又は暗号化処理等)の内容又は無処理であることであり、例えば、圧縮処理を実行する場合には、その圧縮処理を示す名称であり、暗号化処理を実行する場合には、その暗号化処理を示す名称であり、処理を行わない場合には、「無処理」である。チャンクハッシュ値2576には、エントリに対応するチャンクのハッシュ値が格納される。
次に、チャンク結合保存用のチャンクマップ257Bについて説明する。
図6は、一実施形態に係るチャンク結合保存用のチャンクマップの構成図である。
チャンク結合保存用のチャンクマップ257Bは、クラウドストレージ30においてチャンクを結合して1つのファイル(クラウドストレージ30がオブジェクトストレージであればオブジェクト)として格納する場合のチャンクマップである。チャンクマップ257Bは、ファイルストレージ20の各ファイル毎に対応して設けられる。チャンクマップ257Bは、このチャンクマップ257Bに対応するファイルのチャンク毎のエントリを有する。チャンクマップ257Bのエントリは、無処理開始オフセット2571と、無処理終了オフセット(無処理チャンクサイズ)2572と、処理後開始オフセット2591と、処理後終了オフセット(処理後チャンクサイズ)2592と、処理内容2575と、チャンクハッシュ値2576と、のフィールドを含む。なお、チャンクマップ257Aと同じフィールドには、同一の符号を付して重複する説明を省略する。無処理終了オフセット(無処理チャンクサイズ)2572と、処理後終了オフセット(処理後チャンクサイズ)2592と、チャンクハッシュ値2576とは、動作上、必須のフィールドではない。
処理後開始オフセット2591には、エントリに対応するチャンクの処理後、すなわち、圧縮や暗号化等の符号化が行われて結合された状態におけるファイルの先頭からのチャンクの開始位置(開始オフセット)が格納される。処理後終了オフセット(処理後チャンクサイズ)2592には、エントリに対応するチャンクの処理後におけるファイルの先頭からの終了位置(終了オフセット)が格納されるとともに、処理後のチャンクのサイズ(処理後チャンクサイズ)が格納される。なお、処理後終了オフセット(処理後チャンクサイズ)2592に、終了オフセット又は処理後チャンクサイズのいずれか一方のみを格納してもよい。
次に、チャンクマップマップ255について説明する。
図7は、一実施形態に係るチャンクマップマップの構成図である。
チャンクマップマップ255は、ユーザが使用するファイル(ユーザファイル)に対応するチャンクマップ257のファイル(チャンクマップファイル)の識別子を管理する。チャンクマップマップ255は、ユーザファイル毎のエントリを格納する。なお、チャンクマップマップ255の対象となるファイルは、チャンクに対して保存する際の処理が設定されて利用される方法(本方法)の対象となるファイルである。チャンクマップマップ255のエントリは、ファイル識別子2551と、チャンクマップのファイル識別子2552と、保存状態2553とのフィールドを含む。
ファイル識別子2551には、エントリに対応するファイルのクラウドストレージ30でのファイル識別子が格納される。チャンクマップのファイル識別子2552には、エントリに対応するファイルのチャンクマップ257のファイルのファイル識別子が格納される。保存状態2553には、エントリに対応するファイルについてのクラウドストレージ30への保存状態(格納状態)が格納される。保存状態は、例えば、チャンクをそれぞれ個別に格納する場合には、分割であり、チャンクを結合して格納する場合には、結合である。
なお、チャンクマップマップ255は、動作上、必須ではない。例えば、チャンクマップファイルの識別子を例えば、「ファイルパス/map」として名付けるようにしておくことで、ファイルパスから、チャンクマップのファイル識別子を特定することができる。この場合において、ファイルについてのクラウドストレージ30への保存状態(分割/結合)は、チャンクマップのテーブル形式等から判断するようにすればよい。また、ファイルパスから特定したチャンクマップのファイル識別子によってチャンクマップにアクセスできない場合は、既存のリード/ライトを実行すればよい。また、本実施形態では、チャンクマップマップ255の対象となるファイルは、チャンクに対して保存する際の処理が設定されて利用される方法(本方法)の対象となるファイルとしていたが、これに限られず、本方法の対象となるファイル以外のファイルも対象としてもよく、本方法の対象となるファイル以外のファイルについては、対応するエントリのチャンクマップのファイル識別子2552に、値を設定しなくてもよい。
次に、本実施形態に係るコンピュータシステム1における処理動作について説明する。
まず、クラウドストレージ30にチャンクを個別に保存する設定がされている場合(チャンク個別保存設定時)におけるファイル初回保存処理について説明する。
図8は、一実施形態に係るチャンク個別保存設定時のファイル初回保存処理のシーケンス図である。
ファイルストレージ20において、CPU24は、例えば、コンピュータ10からのユーザによるファイル作成の指示に従って、ファイルの作成を行う。ここで作成されたファイルは、符号化処理(圧縮処理、暗号化処理等)がされていない無処理のファイル(無処理ファイル)である(図8(1))。なお、ファイル作成の指示は、コンピュータ10からのユーザによる指示以外に、ファイルストレージ20内での処理に基づく指示がある。
次いで、CPU24は、作成されたファイルを複数のチャンクに分割する処理を行う(図8(2))。ここで、チャンクは、予め決められた範囲のサイズであればよく、一定のサイズであっても、任意のサイズであってもよい。図8(2)の例では、無処理ファイルをオフセットが0-100KBまでのチャンクAと、オフセットが100KB-300KBまでのチャンクBと、オフセットが300KB-600KBまでのチャンクCとに分割している。ここで、0-100KBの表記は、0以上100KB未満の範囲、すなわち、0~99999Byte(99KB)までの範囲を示している。他のオフセットの範囲の表記も同様である。
次いで、CPU24は、チャンクのそれぞれをファイル(チャンクファイル)として作成する(図8(3))。なお、この状態のチャンクファイルを無処理チャンクファイルという。
次いで、CPU24は、チャンクファイル毎に、チャンクに対して設定された処理内容に対応する処理を行う(図8(4))。ここで、チャンクに対する処理内容は、予めファイルの全てのチャンクに対して同一の処理内容が設定されていてもよく、ユーザの指示によってチャンク毎に処理内容が設定されてもよい。なお、チャンクが所定サイズ以上であれば圧縮するように決定してもよい。処理内容としては、符号化処理(圧縮処理、暗号化処理等)がある。図8(4)の例では、全てのチャンクに対して圧縮処理を行うものとして説明する。なお、処理内容として無処理である場合には、何もしない。ここで、符号化処理が行われたチャンクが、符号化チャンクに対応する。
次いで、CPU24は、作成するファイル名としてコンピュータ10から受け取ったファイル識別子から、チャンクファイルのファイル識別子と、チャンクマップ257Aのファイル識別子とを生成する(図8(5))。図8(5)の例では、CPU24は、「/file」とのファイル識別子に基づいて、チャンクファイルのファイル識別子として、「/file/a」,「/file/b」,「/file/c」を生成し、チャンクマップ257Aのファイル識別子として、「/file/map」を生成する。
次いで、CPU24は、チャンクマップ257Aを作成する(図8(6))。なお、このチャンクマップ257Aのファイルは、符号化処理がされていない状態(無処理)となっている。
次いで、CPU24は、チャンクマップ257Aを、そのまま(無処理)とするか、符号化処理(圧縮処理、暗号化処理等)するのかを決定し、決定した処理を実行する(図8(7))。なお、チャンクマップ257Aをそのままか、符号化処理するかについては、デフォルトの設定に従ってもよいし、ユーザの設定や指示に従ってもよく、チャンクマップ257Aが所定サイズ以上であれば圧縮するように決定してもよい。本例では、チャンクマップ257Aを圧縮すると決定されたものとし、チャンクマップ257Aを圧縮する。
次いで、CPU24は、チャンクファイルとチャンクマップとの保存要求を送信し、チャンクファイルとチャンクマップのデータをクラウドストレージ30に送信する(図8(8))。
本例では、チャンクマップ257Aには、無処理開始オフセットが0Byteであり、チャンクファイルのファイル識別子が「/file/a」であるエントリと、無処理開始オフセットが100KBであり、チャンクファイルのファイル識別子が「/file/b」であるエントリと、無処理開始オフセットが300KBであり、チャンクファイルのファイル識別子が「/file/c」であるエントリと、が含まれている。
クラウドストレージ30では、CPU34が、ファイルストレージ20から送信された各チャンクファイルと、チャンクマップとをそれぞれ別に補助記憶装置35に格納する(図8(9))。ここで、クラウドストレージ30がオブジェクトストレージであれば、各チャンクファイルとチャンクマップとをそれぞれ別のオブジェクトとして格納する。一方、ファイルストレージであれば、各チャンクファイルとチャンクマップとをそれぞれファイルとして格納する。なお、クラウドストレージ30では、チャンクファイルやチャンクマップに対しては符号化することなく格納する。このクラウドストレージ30側における処理の機能は、一般的なクラウドストレージが備えている基本的な機能で実現できる。
次に、チャンク個別保存設定時におけるファイルの一部分をリードする処理(部分リード処理)について説明する。
図9は、一実施形態に係るチャンク個別保存設定時の部分リード処理のシーケンス図である。
部分リード処理は、ファイルストレージ20が、例えば、コンピュータ10からファイルの一部のデータを対象とするリード命令を受信した場合に実行される。ここで、リード命令には、リード対象のファイルのファイル識別子と、無処理ファイルにおけるリード対象となる部分(リード部分)のオフセットとが含まれている。本例では、ファイル識別子が「/file」であり、オフセットが200KB-400KBであるとして説明する。なお、リード命令は、コンピュータ10からのユーザによる指示に基づく命令以外に、ファイルストレージ20内での処理に基づく命令がある。
ファイルストレージ20のCPU24は、リード命令からファイル識別子と、オフセットを受け付ける(図9(10))。
次いで、CPU24は、リード対象のファイルのファイル識別子から、チャンクマップ257Aのファイル識別子を特定する。本例では、CPU24は、ファイル識別子「/file」からチャンクマップ257Aのファイル識別子「/file/map」を特定する(図9(11))。なお、チャンクマップ257Aのファイル識別子の特定としては、チャンクマップ257のファイル識別子の作成方法に基づいて特定してもよく、チャンクマップマップ255を参照して特定してもよい。
次いで、CPU24は、チャンクマップ257Aのファイル識別子を指定したチャンクマップの取得要求をクラウドストレージ30に送信する(図9(12))。
クラウドストレージ30のCPU34は、チャンクマップの取得要求に応答して、取得要求に対応するチャンクマップ257Aを補助記憶装置35から取得して、ファイルストレージ20に送信する(図9(13))。なお、チャンクマップ257Aをクラウドストレージ30から取得するのは、同一のファイルを他のファイルストレージ20と共用している場合において、最新のチャンクマップ257Aを取得するためである。
ファイルストレージ20のCPU24は、クラウドストレージ30から送信されたチャンクマップ257Aを取得する(図9(14))。ここで、本例においては、取得したチャンクマップは、図8(9)で格納されている圧縮されたチャンクマップ257Aである。なお、チャンクマップ257Aをクラウドストレージ30から取得するのは、同一のファイルを他のファイルストレージ20と共用している場合において、最新のチャンクマップ257Aを取得するためである。
次いで、CPU24は、チャンクマップ257Aに対して逆符号化処理(符号化処理の逆変換処理、本例では、伸長処理)を実行する。これにより、無処理のチャンクマップ257Aを取得することができる(図9(15))。
次いで、CPU24は、チャンクマップ257Aを参照して、リード部分を含む1以上のチャンクファイルのファイル識別子を特定する(図9(16))。本例では、オフセットが200KB-400KBであるので、この範囲を含むチャンクファイルのファイル識別子「/file/b」と、「/file/c」とが特定される。
次いで、CPU24は、特定したチャンクファイルのファイル識別子を指定したチャンクファイルの取得要求をクラウドストレージ30に送信する(図9(17))。
クラウドストレージ30のCPU34は、チャンクファイルの取得要求に応答して、取得要求に対応するチャンクファイルを補助記憶装置35から取得して、ファイルストレージ20に送信する(図9(18))。ここで、チャンクファイルB,Cの中のチャンクファイルBの中の部分aと、チャンクファイルCの中の部分bとを合わせた部分がリード部分である。
次いで、ファイルストレージ20のCPU24は、クラウドストレージ30から送信されたチャンクファイルを取得する(図9(19))。
次いで、CPU24は、各チャンクファイルを無処理チャンクファイルとする。具体的には、CPU24は、各チャンクファイル毎に、符号化処理をしたファイルであれば、逆符号化処理を行う。本例では、各チャンクファイルが圧縮されているので、チャンクファイル毎に伸長処理を実行する(図9(20))。ここで、本実施形態では、チャンクファイルを単位として符号化処理をしているので、チャンクファイル毎に逆符号化処理を行って、各チャンクファイルを無処理チャンクファイルとすることができる。
次いで、CPU24は、無処理チャンクファイルとされた各チャンクファイルを結合し(図9(21))、結合したチャンクファイルからリード命令のオフセットに対応するリード部分を特定して抽出し、抽出したリード部分のデータをリード命令の命令元(例えば、コンピュータ10)に送信する(図9(22))。
上記した部分リード処理によると、ファイルの中のリード部分を含むチャンクファイルのみをクラウドストレージ30から読み出せばよいので、クラウドストレージ30とファイルストレージ20との間の通信のデータ量を削減することができる。また、チャンクファイル毎に逆符号化処理を行うことにより、無処理チャンクファイルを得ることができ、その無処理チャンクファイルから、無処理状態のリード部分のデータを抽出することができる。
次に、チャンク個別保存設定時におけるファイルの一部分を更新する処理(部分更新処理)について説明する。
図10は、一実施形態に係るチャンク個別保存設定時の部分更新処理のシーケンス図である。
部分更新処理は、リード命令に基づいて、リード部分を、例えば、コンピュータ10にファイルストレージ20から送信した後、コンピュータ10からリード部分のデータに対する更新を受け取ったときに実行される処理である。本例では、図9に示す部分リード処理が行われた後に、リード部分に対して更新がされる場合の処理について説明する。
CPU24は、コンピュータ10からのユーザによるリード部分に対するデータの更新を受け取ると、リード部分に対する更新を行う(図10(23))。本例では、オフセットが200KB-300KBの100KBのデータが200KBのデータに更新されたものとする。ここで、この更新された部分のデータを更新差分という。
CPU24は、リード部分を含んでいたチャンクに更新差分を反映する(図10(24))。本例では、CPU24は、チャンクBのリード部分以外の部分と、更新差分を含むリード部分と、チャンクCのリード部分以外の部分とを結合したファイルを作成する。
次いで、CPU24は、差分のあるチャンクを検出する(図10(25))。本例では、チャンクBと、チャンクCとが検出されることとなる。
次いで、CPU24は、差分を含むチャンクを分割して新たなチャンク(更新チャンク)を作成する(図10(26))。なお、チャンクを分割するか否かについては、デフォルトの設定に従ってもよいし、ユーザの設定や指示に従ってもよく、チャンクが所定サイズ以上であれば分割するように決定してもよい。本例では、CPU24は、各チャンクが所定範囲のサイズに収まるように分割を行う。本例では、この処理により、チャンクB’、D、C’が作成される。チャンクB’の無処理ファイルにおけるオフセットは、100KB-300KBとなり、チャンクDの無処理ファイルにおけるオフセットは、300KB-400KBとなり、チャンクD’の無処理ファイルにおけるオフセットは、400KB-700KBとなる。なお、差分を含むチャンクを新たなチャンクに分割しなくてもよい。
次いで、CPU24は、作成した各チャンク毎のファイル(チャンクファイル)を作成する(図10(27))。
次いで、CPU24は、作成した各チャンクファイル毎に、チャンクに対して設定された処理内容に対応する処理を行う(図10(28))。ここで、本例では、各チャンクに対しては、圧縮が設定されているので、CPU24は、各チャンクファイルに対して圧縮処理を行う。なお、チャンクが所定サイズ以上であれば圧縮するように決定してもよい。
次いで、CPU24は、リード部分を含むファイルのファイル識別子から、チャンクファイルのファイル識別子と、チャンクマップ257Aのファイル識別子とを生成する(図10(29))。本例では、CPU24は、「/file」とのファイル識別子に基づいて、チャンクファイルのファイル識別子として、「/file/b」,「/file/d」,「/file/c」を生成し、チャンクマップ257Aのファイル識別子として、「/file/map」を生成する。
次いで、CPU24は、チャンクマップ257Aを新たなチャンクファイルの内容に更新する(図10(30))。本例では、チャンクマップ257Aには、無処理開始オフセットが0Byteであり、チャンクファイルのファイル識別子が「/file/a」であるエントリと、無処理開始オフセットが100KBであり、チャンクファイルのファイル識別子が「/file/b」であるエントリと、無処理開始オフセットが300KBであり、チャンクファイルのファイル識別子が「/file/d」であるエントリと、無処理開始オフセットが400KBであり、チャンクファイルのファイル識別子が「/file/c」であるエントリと、が含まれている。
次いで、CPU24は、チャンクマップ257Aを、そのままとするか、符号化(圧縮又は暗号化)するのかを決定し、決定した処理を実行する(図10(31))。なお、チャンクマップ257Aをそのままか、符号化処理するかについては、デフォルトの設定又はユーザの指定や設定に従ってもよく、チャンクマップ257Aが所定サイズ以上であれば圧縮するように決定してもよい。本例では、チャンクマップ257Aを圧縮すると決定されたものとし、チャンクマップ257Aを圧縮する。
次いで、CPU24は、チャンクファイルとチャンクマップとの保存要求を送信し、チャンクファイルとチャンクマップのデータをクラウドストレージ30に送信する(図10(32))。
クラウドストレージ30では、CPU34が、ファイルストレージ20から送信された各チャンクファイルと、チャンクマップとをそれぞれ別に補助記憶装置35に格納する(図10(33))。この処理により、チャンクファイルBが更新後のチャンクファイルB’に更新され、チャンクファイルCが更新後のチャンクファイルC’に更新され、新たにチャンクファイルDが格納される。
以上説明したように、本実施形態に係る部分更新処理によると、チャンクを符号化している場合であっても、更新差分を含むチャンクのみをクラウドストレージ30に送信すれば、クラウドストレージ30においては、更新差分を含むチャンクを更新等して、更新後のファイルのデータが格納されることとなる。
次に、クラウドストレージ30にチャンクを結合して保存する設定がされている場合(チャンク結合保存設定時)におけるファイル初回保存処理について説明する。
図11は、一実施形態に係るチャンク結合保存設定時のファイル初回保存処理のシーケンス図である。
ファイルストレージ20において、CPU24は、例えば、コンピュータ10からのユーザによる指示に従って、ファイルの作成を行う。ここで作成されたファイルは、圧縮処理や、暗号化処理がされていない無処理ファイルである(図11(1))。なお、ファイル作成の指示は、コンピュータ10からのユーザによる指示以外に、ファイルストレージ20内での処理に基づく指示がある。
次いで、CPU24は、作成された無処理ファイルを複数のチャンクに分割する処理を行う(図11(2))。ここで、チャンクは、予め決められた範囲のサイズであればよく、一定のサイズであっても、任意のサイズであってもよい。本例では、ファイルをオフセットが0-100KBまでのチャンクAと、オフセットが100KB-300KBまでのチャンクBと、オフセットが300KB-600KBまでのチャンクCとに分割している。
次いで、CPU24は、チャンクのそれぞれをファイル(チャンクファイル)として作成する(図11(3))。なお、この状態のチャンクファイルを無処理チャンクファイルという。
次いで、CPU24は、チャンクファイル毎に、チャンクに対して設定された処理内容に対応する処理を行う(図11(4))。ここで、チャンクに対する処理内容は、予め全体として同一の処理内容が設定されていてもよく、ユーザの指示によってチャンク毎に処理内容が設定されてもよい。本例では、全てのチャンクに対して圧縮処理を行うものとして説明する。
次いで、CPU24は、設定された処理内容に対応する処理が行われたチャンクファイルを結合して1つのファイルとする(図11(5))。ここで、本例では、処理後においては、各チャンクのサイズが変わり、処理後のチャンクAのオフセットは、0-80KBであり、チャンクBのオフセットは、80KB-240KBであり、チャンクCのオフセットは、240KB-480KBとなる。
次いで、CPU24は、作成するファイルのファイル名としてコンピュータ10から受け取ったファイル識別子から、チャンクマップ257Bのファイル識別子を生成する(図11(6))。本例では、CPU24は、「/file」とのファイル識別子に基づいて、チャンクマップ257Bのファイル識別子として、「/file/map」を生成する。
次いで、CPU24は、チャンクマップ257Bを生成する(図11(7))。なお、このチャンクマップ257Bのファイルは、符号化処理がされていないファイルである。
次いで、CPU24は、チャンクマップ257Bを、そのままとするか、符号化(圧縮又は暗号化)するのかを決定し、決定した処理を実行する(図11(8))。なお、チャンクマップ257Bをそのままか、符号化処理するかについては、デフォルトの設定に従ってもよいし、ユーザの設定や指定に従ってもよく、チャンクマップ257Bが所定サイズ以上であれば圧縮するように決定してもよい。本例では、チャンクマップ257Bを圧縮すると決定されたものとし、チャンクマップ257Bを圧縮する。
次いで、CPU24は、ファイルとチャンクマップとの保存要求を送信し、ファイルとチャンクマップのデータをクラウドストレージ30に送信する(図11(9))。
本例では、チャンクマップ257Bには、無処理開始オフセットが0Byteであり、処理後オフセットが0KBであるチャンクAのエントリと、無処理開始オフセットが100KBであり、処理後オフセットが80KBであるチャンクBのエントリと、無処理開始オフセットが300KBであり、処理後オフセットが240KBであるチャンクCのエントリが含まれている。
クラウドストレージ30では、CPU34が、ファイルストレージ20から送信されたファイルと、チャンクマップとをそれぞれ別に補助記憶装置35に格納する(図11(10))。ここで、クラウドストレージ30がオブジェクトストレージであれば、ファイルとチャンクマップとをそれぞれ別のオブジェクトとして格納する。一方、ファイルストレージであれば、ファイルとチャンクマップとをそれぞれファイルとして格納する。なお、クラウドストレージ30では、チャンクファイルやチャンクマップに対しては符号化することなく格納する。
次に、チャンク結合保存設定時におけるファイルの一部分をリードする処理(部分リード処理)について説明する。
図12は、一実施形態に係るチャンク結合保存設定時の部分リード処理のシーケンス図である。
部分リード処理は、ファイルストレージ20が、例えば、コンピュータ10からのユーザによるリード命令を受信した場合に実行される。ここで、リード命令には、リード対象のファイルのファイル識別子と、無処理ファイルにおけるリード部分のオフセットとが含まれている。本例では、ファイル識別子が「/file」であり、オフセットが200KB-400KBであるとして説明する。なお、リード命令は、コンピュータ10からのユーザによる指示に基づく命令以外に、ファイルストレージ20内での処理に基づく命令がある。
ファイルストレージ20のCPU24は、リード命令からファイル識別子と、オフセットを受け付ける(図12(11))。
次いで、CPU24は、リード対象のファイルのファイル識別子から、チャンクマップ257Bのファイル識別子を特定する。本例では、CPU24は、ファイル識別子「/file」からチャンクマップ257Bのファイル識別子「/file/map」を特定する(図12(12))。
次いで、CPU24は、チャンクマップ257Bのファイル識別子を指定したチャンクマップの取得要求をクラウドストレージ30に送信する(図12(13))。
クラウドストレージ30のCPU34は、チャンクマップ257Bの取得要求に応答して、対応するチャンクマップ257Bを補助記憶装置35から取得して、ファイルストレージ20に送信する(図12(14))。
ファイルストレージ20のCPU24は、クラウドストレージ30から送信されたチャンクマップ257Bを取得する(図12(15))。ここで、本例においては、取得したチャンクマップは、図11(10)で格納されている圧縮されたチャンクマップ257Bである。なお、チャンクマップ257Bをクラウドストレージ30から取得するのは、同一のファイルを他のファイルストレージ20と共用している場合において、最新のチャンクマップ257Bを取得するためである。
次いで、CPU24は、チャンクマップ257Bに対して逆符号化処理(本例では、伸長処理)を実行する。これにより、無処理のチャンクマップ257Bを取得することができる(図12(16))。
次いで、CPU24は、チャンクマップ257Bを参照して、リード部分を含む1以上のチャンクファイルの無処理ファイルにおけるオフセット(無処理開始終了オフセット)から、チャンクファイルの処理後における開始及び終了のオフセット(処理後開始終了オフセット)を特定する(図12(17))。本例では、リード部分の無処理オフセットである200KB-400KBを含むチャンクの処理後開始終了オフセットとして、80KB-240KBと特定される。
次いで、CPU24は、リード対象のファイルのファイル識別子と、処理後開始終了オフセットとを指定したチャンクファイルの取得要求をクラウドストレージ30に送信する(図12(18))。
クラウドストレージ30のCPU34は、チャンクファイルの取得要求に応答して、処理後開始終了オフセットに対応するチャンクB,Cを補助記憶装置35から取得して、チャンクファイルとしてファイルストレージ20に送信する(図12(19))。ここで、取得したチャンクファイル中のチャンクBの中の一部分と、チャンクCの中の一部分とを合わせた部分がリード部分である。
次いで、ファイルストレージ20のCPU24は、クラウドストレージ30から送信されたチャンクファイルを取得する(図12(20))。
次いで、CPU24は、取得したチャンクファイルの中の各チャンクを無処理チャンクファイルとする。具体的には、各チャンク毎に、符号化処理をしたチャンクであれば、逆符号化処理を行う。本例では、チャンク単位に符号化した場合であっても、複数のチャンクを一括して逆符号化できる符号化処理をしているので、取得したチャンクファイル単位で一括して逆符号化処理をする(図12(21))。
なお、チャンクを単位として符号化処理をし、各チャンクをそれぞれ逆符号化処理しなければならない場合には、処理後開始オフセット及び処理後終了オフセットから各チャンクを特定し、各チャンクをそれぞれファイルとして作成し、チャンクファイル毎に逆符号化処理を実行し、逆符号化処理を行った各チャンクファイルを結合して1つの無処理チャンクファイルとすればよい。
なお、チャンクを単位として符号化処理をし、各チャンクをそれぞれ逆符号化処理しなければならない場合には、処理後開始オフセット及び処理後終了オフセットから各チャンクを特定し、各チャンクをそれぞれファイルとして作成し、チャンクファイル毎に逆符号化処理を実行し、逆符号化処理を行った各チャンクファイルを結合して1つの無処理チャンクファイルとすればよい。
次いで、CPU24は、無処理チャンクファイルからリード命令のオフセットに対応するリード部分を特定して抽出し、抽出したリード部分のデータをリード命令の命令元(例えば、コンピュータ10)に送信する(図12(22))。
上記した部分リード処理によると、ファイルの中のリード部分を含むチャンク部分のみをクラウドストレージ30から読み出せばよいので、クラウドストレージ30とファイルストレージ20との間のデータ通信量を削減することができる。また、チャンク毎に逆符号化処理を行うことにより、無処理チャンクファイルを得ることができ、その無処理チャンクファイルから、無処理状態のリード部分のデータを抽出することができる。
次に、チャンク結合保存設定時におけるファイルの一部分を更新する処理(部分更新処理)について説明する。
図13は、一実施形態に係るチャンク結合保存設定時の部分更新処理のシーケンス図である。
部分更新処理は、リード命令に基づいて、リード部分を、例えば、コンピュータ10にファイルストレージ20から送信した後、コンピュータ10からリード部分のデータに対する更新を受け取ったときに実行される処理である。本例では、図12に示す部分リード処理が行われた後に、リード部分に対して更新がされる場合の処理について説明する。
CPU24は、コンピュータ10からのユーザによるリード部分に対するデータの更新を受け取ると、リード部分に対する更新を行う(図13(23))。本例では、オフセット200KB-300KBの100KBのデータが200KBのデータに更新されたのとする。ここで、この更新された部分を更新差分という。
CPU24は、リード部分を含んでいたチャンクに更新差分を反映する(図13(24))。本例では、CPU24は、チャンクBのリード部分以外の部分と、更新差分を含むリード部分と、チャンクCのリード部分以外の部分とが結合されているファイルを作成する。
次いで、CPU24は、差分のあるチャンク(更新チャンク)を検出する(図13(25))。本例では、チャンクBと、チャンクCとが検出されることとなる。
次いで、CPU24は、差分を含むチャンクを分割して新たなチャンク(更新チャンク)を作成する(図13(26))。なお、チャンクを分割するか否かについては、デフォルトの設定に従ってもよいし、ユーザの設定や指示に従ってもよく、チャンクが所定サイズ以上であれば分割するように決定してもよい。本例では、CPU24は、各チャンクが所定範囲のサイズに収まるように分割を行う。なお、差分を含むチャンクを新たなチャンクに分割しなくてもよい。本例では、この処理により、チャンクB’、D、C’が作成される。チャンクB’の無処理ファイルにおけるオフセットは、100KB-300KBとなり、チャンクDの無処理ファイルにおけるオフセットは、300KB-400KBとなり、チャンクC’の無処理ファイルにおけるオフセットは、400KB-700KBとなる。
次いで、CPU24は、作成した各チャンク毎のファイル(チャンクファイル)を作成する(図13(27))。
次いで、CPU24は、作成した各チャンクファイル毎に、チャンクに対して設定された処理内容に対応する処理を行う(図13(28))。ここで、本例では、各チャンクに対しては、圧縮が設定されているので、CPU24は、各チャンクファイルに対して圧縮処理を行う。
次いで、CPU24は、チャンクマップ257Bを参照し、更新されていない1以上のチャンク(非更新チャンク)の無処理ファイルにおけるオフセット(無処理開始終了オフセット)から、チャンクファイルの処理後開始終了オフセットを特定し(図13(29))、ファイルのファイル識別子と、非更新チャンクの処理後開始終了オフセットとを指定した、クラウドストレージ30に非更新チャンクをコピーさせる非更新チャンクコピー要求を送信する(図13(30))。
非更新チャンクコピー要求を受信したクラウドストレージ30では、CPU34が非更新チャンクコピー要求により指定されている非更新チャンクを特定し、非更新チャンクファイルを例えば主記憶装置33にコピーする(図13(31))。なお、非更新チャンクファイルを補助記憶装置35にコピーしてもよい。
一方、ファイルストレージ20のCPU24は、図13(28)で得た各チャンクファイルを結合し(図13(32))、結合したファイル(更新チャンクファイル)をクラウドストレージ30に送信する(図13(33))。これに対して、クラウドストレージ30のCPU34は、更新チャンクファイルを受信すると、更新チャンクファイルを例えば補助記憶装置35に格納する。なお、更新チャンクファイルを主記憶装置33に格納してもよい。
また、ファイルストレージ20のCPU24は、非更新チャンクファイルについては、チャンクマップ257Bを参照して処理後開始終了オフセットを確認し、更新チャンクファイルについては、更新処理で変更され、設定された処理内容の処理後の処理後開始終了オフセットを確認し、これらの処理後開始終了オフセットに従う順番となるようにクラウドストレージ30で結合させるための結合要求(チャンクファイル結合要求)を作成し(図13(34))、チャンクファイル結合要求をクラウドストレージ30に送信する(図13(35))。
クラウドストレージ30のCPU34は、チャンクファイル結合要求を受信すると、チャンクファイル結合要求に含まれている順番で、例えば、主記憶装置33の非更新チャンクファイル及び更新チャンクファイルを結合する(図13(36))。
また、ファイルストレージ20のCPU24は、ファイルのファイル識別子を指定した、結合させたファイルを保存させるファイル保存要求をクラウドストレージ30に送信する(図13(37))。
クラウドストレージ30のCPU34は、ファイル保存要求を受信するとファイル保存要求で指定されているファイル識別子として、結合したファイルを補助記憶装置35に格納する(図13(38))。この処理により、チャンクB,CがチャンクB’,D,C’に更新された更新後のファイルがクラウドストレージ30の補助記憶装置35に格納されることとなる。
更に、ファイルストレージ20のCPU24は、更新後のチャンクマップ257Bのファイル識別子を生成する(図13(39))。本例では、CPU24は、「/file」とのファイル識別子に基づいて、チャンクマップ257Bのファイル識別子として、「/file/map」を生成する。
次いで、CPU24は、チャンクマップ257Bを新たなファイルの内容に更新する(図13(40))。本例では、チャンクマップ257Bには、無処理開始オフセットが0Byteであり、処理後開始オフセットが0Byteであるエントリと、無処理開始オフセットが100KBであり、処理後開始オフセットが80KBであるエントリと、無処理開始オフセットが300KBであり、処理後開始オフセットが240KBであるエントリと、無処理開始オフセットが400KBであり、処理後開始オフセットが320KBであるエントリと、が含まれている。
次いで、CPU24は、チャンクマップ257Bを、そのままとするか、符号化(圧縮又は暗号化)するのかを決定し、決定した処理を実行する(図13(41))。なお、チャンクマップ257Bをそのままか、符号化処理するかについては、デフォルトの設定に従ってもよいし、ユーザに設定や指示に従ってもよく、チャンクマップ257Bが所定サイズ以上であれば圧縮するように決定してもよい。本例では、チャンクマップ257Bを圧縮すると決定されたものとし、チャンクマップ257Bを圧縮する。
次いで、CPU24は、更新したチャンクマップ257Bとの保存要求を送信し、チャンクマップ257Bのデータをクラウドストレージ30に送信する(図13(42))。
クラウドストレージ30では、CPU34が、ファイルストレージ20から送信されたチャンクマップ257Bを格納する(図13(43))。
次に、コンピュータシステム1における各処理によるチャンクの状態遷移を説明する。
図14は、一実施形態に係るチャンクの状態遷移を説明する図である。図14(A)は、ファイルの初回保存時のファイルの状態を示し、図14(B)は、部分リード時のファイルの状態を示し、図14(C)は、部分更新時のファイルの状態を示し、図14(D)は、更新保存時のファイルの状態を示す。図14において、「保存対象」は、クラウドストレージ30に保存する対象であることを示し、「保存済み」は、クラウドストレージ30に保存済みであることを示している。
本実施形態によりファイルの初回保存を行った場合には、図14(A)に示すように、ファイルの全てのチャンクが保存対象であるので、クラウドストレージ30の補助記憶装置35には、ファイルを構成する各チャンクが処理内容で設定された状態(無処理又は符号化処理された状態)で保存される。なお、本実施形態では、各チャンクはそれぞれ別々のファイル(又はオブジェクト)として管理される場合と、結合されて1つのファイル(又はオブジェクト)として管理される場合がある。
全てのチャンクが保存済みであるファイルを部分リードする場合においては、図14(B)に示すように、リード対象となるリード部分を含むチャンク(図では、チャンクB,C)がクラウドストレージ30からファイルストレージ20に読み出される。
図14(C)の上側のファイルに示すように部分更新がされると、下側のファイルに示すような状態となる。例えば、チャンクBとチャンクCに跨る部分に更新差分がある場合には、下側のファイルのように、チャンクBとチャンクCとが保存対象となり更新される。また、チャンクEに示すように、1つのチャンクに更新差分がある場合には、そのチャンクのみが保存対象となり更新される。また、チャンクFに示すように一部が削除される場合には、そのチャンクが保存対象となり、そのチャンクに対して削除部分を除く更新がされる。
図14(C)の下側のファイルに示すように部分更新がされた後に、クラウドストレージ30の補助記憶装置35に更新保存する場合には、例えば、図14(D)の上側のファイルに示すように、部分更新がされたチャンクBとチャンクCとが一時チャンクとして結合され、この一時チャンクが、例えば、下側のファイルに示すように、複数のチャンク(図では、チャンクB’,C’,H)に分割されて、保存される。また、例えば、図14(C)の下側のファイルに示すように、連続するチャンクEと、チャンクFとがそれぞれ更新された場合には、図14(D)の上側のファイルに示すように、これらチャンクE,Fとが一時チャンクとして結合され、この一時チャンクが、例えば、下側のファイルに示すように、複数のチャンク(図では、チャンクE’,F’)に分割されて、保存される。
次に、ファイルストレージ20における各種処理動作について説明する。
まず、ファイル初回保存処理の処理動作について説明する。
図15は、一実施形態に係るファイル初回保存処理のフローチャートである。
ファイルストレージ20のCPU24は、保存対象のファイルに対するクラウドストレージ30でのファイル識別子の指定をコンピュータ10から受け付ける(ステップS1)。なお、ファイル識別子の指定は、コンピュータ10からのユーザによる指定以外に、ファイルストレージ20内での処理に基づく指定がある。
次いで、CPU24は、保存対象のファイルに対応するチャンクマップ257を作成する(ステップS2)。なお、チャンクマップ257は、保存対象のファイルのクラウドサーバ30での保存設定に応じてチャンクマップ257A又は257Bのいずれかとなる。
次いで、CPU24は、ファイルの先頭からのデータを順に対象としてループAの処理(ステップS3,S4)を繰り返し実行する。
ループAの処理では、CPU24は、ファイルのデータについて、所定のチャンクサイズで分割してチャンクファイルを作成し(ステップS3)、このチャンクファイルのファイルにおける開始オフセットをチャンクマップ257に書き込む(ステップS4)。
保存対象のファイルのデータに未処理の部分がある場合には、CPU24は、未処理の部分の先頭からのデータを対象にループAの処理を実行する。一方、保存対象のファイルの全てのデータに対してループAの処理を実行した場合には、CPU24は、各チャンクのそれぞれを対象としてループBの処理(ステップS5~S7)を実行する。
ループBの処理では、CPU24は、処理対象のチャンクファイルに対して、符号化を実行するか否かを判定する(ステップS5)。ここで、チャンクファイルに対して符号化を実行するか否かは、デフォルトの設定に従ってもよいし、ユーザの設定や指定に従ってもよく、チャンクファイルが所定サイズ以上であれば符号化するように決定してもよい。処理対象のチャンクファイルを符号化すると判定した場合(ステップS5:YES)には、CPU24は、処理対象のチャンクファイルに対して符号化処理を実行する(ステップS6)。一方、符号化しないと判定した場合(ステップS5:NO)には、チャンクファイルに対して何もしない(ステップS7)。
次いで、CPU24は、ループBの処理をそれぞれのチャンクファイルを対象に実行し、全てのチャンクファイルを対象にループBの処理を実行した場合には、処理をステップS8に進める。
ステップS8では、CPU24は、クラウドストレージ30において、ファイルを構成するチャンクのチャンクファイルを結合して保存する設定(チャンク結合保存設定)がされているか否かを判定する。この結果、チャンク結合保存設定がされていない場合(ステップS8:NO)には、CPU24は、ステップS9~S15のチャンクを個別のファイル(又はオブジェクト)に保存するチャンク個別保存設定時処理を実行する。一方、チャンクを1つのファイル(又はオブジェクト)に結合して保存する設定がされている場合(ステップS8:YES)には、ステップS16~S22のチャンク結合保存設定時処理を実行する。
チャンク個別保存設定時処理においては、CPU24は、全てのチャンクファイルのそれぞれを対象にループCの処理(ステップS9,S10)を実行する。
ループCの処理では、CPU24は、処理対象のチャンクファイルに対するクラウドストレージ30におけるファイル識別子を生成し(ステップS9)、チャンクマップ257Aのチャンクファイルに対応するエントリに生成したファイル識別子を書き込む(ステップS10)。具体的には、ファイル識別子を、チャンクファイル識別子2573に格納する。
CPU24は、ループCの処理を、各チャンクファイルを対象に実行し、全てのチャンクファイルに対してループCの処理を実行した場合には、処理をステップS11に進める。
ステップS11では、CPU24は、チャンクマップ257Aを符号化して格納する設定か否かを判定する。この結果、チャンクマップ257Aを符号化して保存する設定であると判定した場合(ステップS11:YES)には、CPU24は、チャンクマップ257Aに対して符号化処理を実行し(ステップS12)、処理をステップS14に進める。一方、チャンクマップ257Aを符号化して保存する設定ではないと判定した場合(ステップS11:NO)には、CPU24は、何もしないで(ステップS13)、処理をステップS14に進める。
ステップS14では、CPU24は、受け付けたファイル識別子に基づいて、チャンクマップ257Aのファイルのファイル識別子を生成する。
次いで、CPU24は、保存対象のファイルの全てのチャンクファイルと、チャンクマップ257Aについての保存要求をクラウドストレージ30に送信し、全てのチャンクファイルとチャンクマップ257Aとを送信し(ステップS15)、処理を終了する。これにより、クラウドストレージ30は、ファイルストレージ20から送信された全てのチャンクファイルと、チャンクマップとをそれぞれ別々に補助記憶装置35に格納する。このクラウドストレージ30側における処理の機能は、一般的なクラウドストレージが備えている基本的な機能で実現できる。
一方、チャンク結合保存設定時処理においては、CPU24は、保存対象のファイルを構成する全てのチャンクファイルを結合する(ステップS16)。
次いで、CPU24は、チャンクマップ257Bに、結合時の各チャンクファイルのオフセットを書き込む(ステップS17)。具体的には、ファイルを構成する各チャンクファイルのファイルにおける開始オフセットを、チャンクファイルに対応する各エントリの処理後開始オフセット2591に格納し、各チャンクファイルのファイルにおける終了オフセット及び/又は処理後のチャンクサイズを、各チャンクファイルに対応するエントリの処理後終了オフセット(処理後チャンクサイズ)2592に格納する。
次いで、CPU24は、チャンクマップ257Bを符号化して格納する設定か否かを判定する(ステップS18)。この結果、チャンクマップ257Bを符号化して格納する設定であると判定した場合(ステップS18:YES)には、CPU24は、チャンクマップ257Bに対して符号化処理を実行し、処理をステップS21に進める。一方、チャンクマップ257Bを符号化して格納する設定ではないと判定した場合(ステップS18:NO)には、CPU24は、何もしないで(ステップS20)、処理をステップS21に進める。
ステップS21では、CPU24は、受け付けたファイル識別子に基づいて、チャンクマップ257Bのファイル識別子を生成する。
次いで、CPU24は、保存対象のファイルと、チャンクマップ257Bについての保存要求をクラウドストレージ30に送信し、ファイルとチャンクマップ257Bを送信し(ステップS22)、処理を終了する。これにより、クラウドストレージ30は、ファイルストレージ20から送信されたファイルと、チャンクマップとを補助記憶装置35に格納する。このクラウドストレージ30側における処理の機能は、一般的なクラウドストレージが備えている基本的な機能で実現できる。
次に、部分リード処理について説明する。
図16は、一実施形態に係る部分リード処理のフローチャートである。
ファイルストレージ20のCPU24は、ユーザからのファイルの一部に対するリード命令をコンピュータ10から受け付ける(ステップS31)。ここで、リード対象のファイルのファイル識別子と、無処理ファイルにおけるリード部分のオフセット(無処理開始終了オフセット)とが含まれている。
次いで、CPU24は、リード対象のファイルのファイル識別子から、チャンクマップ257(257A又は257B)のクラウドストレージ30におけるファイル識別子を特定する(ステップS32)。チャンクマップ257のファイル識別子を特定する方法としては、チャンクマップ257のファイル識別子の作成方法に基づいて特定してもよく、チャンクマップマップ255を参照して特定してもよい。
次いで、CPU24は、チャンクマップ257のファイル識別子を指定したチャンクマップの取得要求をクラウドストレージ30に送信し、クラウドストレージ30からチャンクマップ257を受信する(ステップS33)。なお、この際のクラウドストレージ30側における処理の機能は、一般的なクラウドストレージが備えている基本的な機能で実現できる。
次いで、ファイルストレージ20のCPU24は、受信したチャンクマップ257が符号化されているか否かを判定し(ステップS34)、符号化されている場合(ステップS34:YES)には、受信したチャンクマップに対して逆符号化処理を実行する(ステップS35)。一方、符号化されていない場合(ステップS34:NO)には、チャンクマップに対して何もしない(ステップS36)。これにより、無処理のチャンクマップ257を取得することができる。
次いで、CPU24は、リード対象のファイルを構成するチャンクのチャンクファイルが結合保存されているか否かを判定し(ステップS37)、チャンクファイルが結合保存されていない場合(ステップS37:NO)には、ステップS38~S44のチャンクを個別に保存するチャンク個別保存設定時処理を実行する。一方、チャンクが結合保存されている場合(ステップS37:YES)には、ステップS45~S49、及びS44のチャンク結合保存設定時処理を実行する。ここで、チャンクマップファイルが結合保存されているか否かを判定する方法としては、チャンクマップ257のエントリの構成に基づいて、チャンクマップ257がチャンクマップ257A又はチャンクファイル257Bのいずれかを特定することにより判定してもよく、チャンクマップマップ255を参照して特定してもよい。
チャンク個別保存設定時処理においては、CPU24は、チャンクマップ257Aからリード対象のリード部分のオフセットに含まれる無処理開始終了オフセットとなっているチャンクファイルのファイル識別子を特定する(ステップS38)。
次いで、CPU24は、特定した全てのファイル識別子に対応するチャンクファイルのそれぞれを対象にループDの処理(ステップS39)を実行する。
ループDでは、CPU24は、処理対象のチャンクファイルに対するファイル識別子を指定して、クラウドストレージ30にチャンクファイルの取得を要求し、このチャンクファイルを受信する(ステップS39)。なお、このクラウドストレージ30側における処理の機能は、一般的なクラウドストレージが備えている基本的な機能で実現できる。
次いで、CPU24は、処理対象としていないチャンクファイルがある場合には、このチャンクファイルを処理対象として、ループDの処理を実行し、特定した全てのチャンクファイルに対してループDの処理を実行した場合には、処理を、取得した各チャンクファイルを対象にループEの処理(ステップS40~S42)に進める。
ループEでは、CPU24は、受信したチャンクファイルが符号化されているか否かを判定し(ステップS40)、符号化されていると判定した場合(ステップS40:YES)には、受信したチャンクファイルに対して逆符号化処理を実行する(ステップS41)。一方、符号化されていないと判定した場合(ステップS40:NO)には、チャンクファイルに対して何もしない(ステップS42)。ここで、受信したチャンクファイルが符号化されているか否かについては、チャンクファイルの形式により判定してもよいし、チャンクマップ257の処理内容により判定してもよい。
次いで、CPU24は、取得した全てのチャンクファイルを対象としてループEの処理をしていない場合には、ループEの処理をしていないチャンクファイルを対象にループEの処理を実行し、取得した全てのチャンクファイルを対象としてループEの処理をした場合には、ループEの処理を行った後の全てのチャンクファイルを結合し(ステップS43)、結合した無処理チャンクファイルからリード部分を特定して抽出し、リード命令元のコンピュータ10に対してリード部分のデータを送信し(ステップS44)、処理を終了する。このクラウドストレージ30側における処理の機能は、一般的なクラウドストレージが備えている基本的な機能で実現できる。
一方、チャンク結合保存設定時処理においては、CPU24は、チャンクマップ257Bからリード対象のリード部分のオフセットに含まれる無処理開始終了オフセットとなっている1以上(又は全ての)のチャンクについてのファイル中における処理後開始終了オフセットを特定する(ステップS45)。
次いで、CPU24は、リード対象のファイルのファイル識別子と、リード部分のチャンクの処理後開始終了オフセットとを指定して、チャンクファイルの送信要求をクラウドストレージ30に送信し、対応するチャンクファイルを受信する(ステップS46)。なお、この際のクラウドストレージ30側における処理の機能は、一般的なクラウドストレージが備えている基本的な機能で実現できる。
次いで、CPU24は、受信したチャンクファイルが符号化されているか否かを判定し(ステップS47)、符号化されている場合(ステップS47:YES)には、受信したチャンクファイルに対して逆符号化処理を実行する(ステップS48)。一方、符号化されていない場合(ステップS47:NO)には、チャンクファイルに対して何もしない(ステップS49)。これにより、無処理のチャンクファイルを取得することができる。ここで、受信したチャンクファイルが符号化されているか否かについては、チャンクファイルの形式により判定してもよいし、チャンクマップ257の処理内容により判定してもよい。なお、受信したチャンクファイルが複数のチャンクファイルを結合した形式であって、各チャンクファイルの処理内容が異なる場合や、同一の処理内容(例えば、同一の符号化処理)であっても結合した状態で逆符号化処理ができない場合には、受信したチャンクファイル中のそれぞれのチャンクを処理後開始終了オフセットに基づいて特定し、それぞれのチャンクをチャンクファイルとして作成し、それぞれのチャンクファイルに対して、ステップS47~S49の処理を行い、処理後のチャンクファイルを結合する。
次いで、CPU24は、チャンクファイルからリード部分を特定してリード部分のデータを抽出し、リード命令元のコンピュータ10に対してリード部分のデータを送信し(ステップS44)、処理を終了する。
次に、部分更新処理の処理動作について説明する。
図17は、一実施形態に係る部分更新処理の第1のフローチャートである。図18は、一実施形態に係る部分更新処理の第2のフローチャートである。
部分更新処理は、ファイルストレージ20が、リード命令に基づいて、リード部分をコンピュータ10に送信した後、コンピュータ10からリード部分のデータに対する更新を受け取ったときに実行される処理である。本例では、図16に示す部分リード処理が行われた後に、リード部分に対して更新がされる場合の処理について説明する。
CPU24は、ユーザからの更新するファイルのファイル識別子をコンピュータ10から受け付ける(ステップS50)。
次いで、CPU24は、更新差分を部分リードで読み出したチャンクファイルに反映させる(ステップS51)。具体的には、CPU24は、更新差分を含むリード部分に対して、読み出したチャンクファイルのリード部分以外の部分を結合する。
次いで、CPU24は、結合したファイルの中で差分のあるチャンクを検出する(ステップS52)。
次いで、CPU24は、全ての差分のあるチャンク(差分チャンク)のそれぞれを対象に、ループFの処理(ステップS53~S55)を実行する。
ループFの処理では、CPU24は、対象とする差分チャンクが、他の差分チャンクと連続しているか否かを判定する(ステップS53)。この結果、他の差分チャンクと連続している場合(ステップS53:YES)には、対象とする差分チャンクと連続している他の差分チャンクとを結合して一時チャンクを作成する(ステップS54)。一方、他の差分チャンクと連続していない場合(ステップS53:NO)には、対象の差分チャンクを一時チャンクとする(ステップS55)。
次いで、CPU24は、全ての差分チャンクを対象としてループFの処理をしていない場合には、このループFの処理をしていない差分チャンクを対象にループFの処理を実行する。一方、全ての差分チャンクを対象としてループFの処理をした場合には、CPU24は、処理を、全ての一時チャンクを対象にループGの処理(ステップS56~S60)に進める。
ループGの処理では、CPU24は、一時チャンクを分割するか否かを判定する(ステップS56)。
なお、一時チャンクを分割するか否かについては、デフォルトの設定に従ってもよいし、ユーザの設定や指示に従ってもよく、一時チャンクが所定サイズ以上であれば分割するように決定してもよい。
なお、一時チャンクを分割するか否かについては、デフォルトの設定に従ってもよいし、ユーザの設定や指示に従ってもよく、一時チャンクが所定サイズ以上であれば分割するように決定してもよい。
次いで、CPU24は、一時チャンクを分割すると判定した場合(ステップS56:YES)には、一時チャンクの先頭からのデータに対して、ループHの処理(ステップS57,S58)を実行する。
ループHの処理では、CPU24は、一時チャンクについて未処理の先頭から所定のサイズのデータを分割してチャンク(更新チャンク)として作成し(ステップS57)、チャンクマップ257に作成した更新チャンクのオフセットを書き込む(ステップS58)。
CPU24は、一時チャンクの全体のデータに対してループHの処理を実行していない場合には、ループHの処理を実行し、一時チャンクの全体に対してループHの処理を実行した場合には、ループHの処理を抜ける。
一方、一時チャンクを分割すると判定しなかった場合(ステップS56:NO)には、CPU24は、何もせずに、一時チャンクを更新チャンクとし(ステップS59)、チャンクマップ257に更新チャンクのオフセットを書き込む(ステップS60)。
ループHの処理を抜けた場合、又はステップS60を実行した場合には、CPU24は、未処理の一時チャンクがあれば、ループGの処理(ステップS56~S60)を実行し、全ての一時チャンクに対してループGの処理を行った場合には、更新チャンク毎にループIの処理(ステップS61~S64)を実行する。
ループIの処理では、CPU24は、更新チャンクのファイル(更新チャンクファイル)を作成し(ステップS61)、処理対象の更新チャンクファイルに対して、符号化を実行するか否かを判定する(ステップS62)。この結果、処理対象の更新チャンクファイルに対して、符号化を実行すると判定した場合(ステップS62:YES)には、CPU24は、処理対象の更新チャンクファイルに対して符号化処理を実行する(ステップS63)。一方、符号化を実行しないと判定した場合(ステップS62:NO)には、更新チャンクファイルに対して何もしない(ステップS64)。
CPU24は、ループIの処理をそれぞれの更新チャンクのチャンクファイルを対象にループIの処理を実行し、全ての更新チャンクのチャンクファイルを対象にループIの処理を実行した場合には、処理を図18のステップS65に進める。
ステップS65では、CPU24は、クラウドストレージ30において、ファイルを構成するチャンクのチャンクファイルを結合して保存するチャンク結合保存設定がされているか否かを判定する。この結果、チャンク結合保存設定がされていない場合(ステップS65:NO)には、CPU24は、ステップS66~S72のチャンクを個別に保存するチャンク個別保存設定時処理を実行する。一方、チャンクを結合して保存する設定がされている場合(ステップS65:YES)には、ステップS73~S84のチャンク結合保存設定時処理を実行する。
チャンク個別保存設定時処理においては、CPU24は、全ての更新チャンクファイルを対象にループJの処理(ステップS66,S67)を実行する。
ループJの処理では、CPU24は、処理対象の更新チャンクファイルに対するファイル識別子を生成し(ステップS66)、チャンクマップ257Aの更新チャンクファイルに対応するエントリに生成したファイル識別子を書き込む(ステップS67)。
CPU24は、ループJの処理を、各更新チャンクファイルを対象に実行し、全ての更新チャンクファイルに対してループJの処理を行った場合には、処理をステップS68に進める。
ステップS68では、CPU24は、チャンクマップ257Aを符号化して格納する設定か否かを判定する。この結果、チャンクマップ257Aを符号化して格納する設定であると判定した場合(ステップS68:YES)には、CPU24は、チャンクマップ257Aを符号化する符号化処理を実行し(ステップS69)、処理をステップS71に進める。一方、チャンクマップ257Aを符号化して格納する設定ではないと判定した場合(ステップS68:NO)には、CPU24は、何もしないで(ステップS70)、処理をステップS71に進める。
ステップS71では、CPU24は、受け付けたファイル識別子に基づいて、チャンクマップ257Aのファイル識別子を生成する。
次いで、CPU24は、全ての更新チャンクファイルと、チャンクマップ257Aについての保存要求をクラウドストレージ30に送信し、全ての更新チャンクファイルとチャンクマップ257Aを送信し(ステップS72)、処理を終了する。これにより、クラウドストレージ30は、ファイルストレージ20から送信された全ての更新チャンクファイルと、チャンクマップとをそれぞれ別々に補助記憶装置35に格納する。なお、この際のクラウドストレージ30側における処理の機能は、一般的なクラウドストレージが備えている基本的な機能で実現できる。
一方、チャンク結合保存設定時処理においては、CPU24は、全ての非更新チャンクのそれぞれを対象にループKの処理(ステップS73,S74)を実行する。ここで、非更新チャンクとは、ファイルを構成するチャンクの中で更新されている部分を含まないチャンクのことをいう。
ループKの処理では、CPU24は、チャンクマップ257Bから非更新チャンクの処理後開始終了オフセットを特定する(ステップS73)。
次いで、CPU24は、更新ファイルのファイル識別子と、処理後開始終了オフセットとを指定して、非更新チャンクのコピー要求を行う(ステップS74)。
CPU24は、ループKの処理を行っていない非更新チャンクを対象に、ループKの処理を実行し、全ての非更新チャンクに対してループKの処理を実行した場合には、処理をステップS75に進める。
ステップS75では、CPU24は、連続した更新チャンクのファイルを結合する。なお、連続した更新チャンクファイルを結合しなくてもよい。
次いで、CPU24は、全ての更新チャンクファイルについての保存要求をクラウドストレージ30に送信し、全ての更新チャンクファイルを送信する(ステップS76)。これにより、クラウドストレージ30では、更新チャンクファイルが保存される。
次いで、CPU24は、チャンクマップ257Bに基づいて、ファイルを構成する非更新チャンクファイル及び更新チャンクファイルの結合順を特定し(ステップS77)、チャンクファイル(更新チャンク、非更新チャンク)のファイル識別子とそれらチャンクファイルの結合順(例えばオフセット)とを指定して、ファイルを構成する全てのチャンクファイルの結合要求をクラウドストレージ30に送信する(ステップS78)。なお、ファイルを構成する非更新チャンクファイルがない場合には、ステップS77及びステップS78では、非更新チャンクファイルを除いた更新チャンクファイルを対象に処理をする。これにより、クラウドストレージ30は、更新後のチャンクファイルが結合されたファイルを補助記憶装置35に格納する。このクラウドストレージ30側における処理の機能は、一般的なクラウドストレージが備えている基本的な機能で実現できる。
次いで、CPU24は、チャンクマップ257Bに各チャンクファイルのファイルにおける処理後開始終了オフセットを書き込む(ステップS79)。
次いで、CPU24は、チャンクマップ257Bを符号化して格納する設定か否かを判定する(ステップS80)。この結果、チャンクマップ257Bを符号化して格納する設定であると判定した場合(ステップS80:YES)には、CPU24は、チャンクマップ257Bに対して符号化処理を実行し(ステップS81)、処理をステップS83に進める。一方、チャンクマップ257Bを符号化して格納する設定ではないと判定した場合(ステップS80:NO)には、CPU24は、何もしないで(ステップS82)、処理をステップS83に進める。
ステップS83では、CPU24は、受け付けたファイル識別子に基づいて、チャンクマップ257Bのファイル識別子を生成する。
次いで、CPU24は、チャンクマップ257Bについての保存要求をクラウドストレージ30に送信し、チャンクマップ257Bを送信し(ステップS84)、処理を終了する。これにより、クラウドストレージ30は、ファイルストレージ20から送信された更新後のファイルについてのチャンクマップ257Bを補助記憶装置35に格納する。なお、この際のクラウドストレージ30側における処理の機能は、一般的なクラウドストレージが備えている基本的な機能で実現できる。
以上説明したように、上記した実施形態に係るコンピュータシステム1によると、ファイルの分割したチャンク毎に、符号化させて、或いは、符号化させないでクラウドストレージ30に保存させるようにすることができる。また、ファイルの一部分をリードする場合においては、ファイルのチャンクの少なくとも1つが符号化されている場合であっても、クラウドストレージ30からは、リード部分を含むチャンクのみを読み出せば、必要なデータを得ることができ、クラウドストレージ30とファイルストレージ20との間での通信のデータ量を削減することができる。また、クラウドストレージ30においては、符号化処理や、逆符号化処理を行わずに済むのでこれら機能を備えていなくてもよい。また、ファイルストレージ20からの要求に必要なクラウドストレージ30の機能は、一般的なクラウドストレージが有する基本的な機能で実現でき、クラウドストレージの仕様による制約を受けないので、クラウドストレージ30としては、種々のクラウドストレージを利用することができる。
なお、本発明は、上記実施形態に限定されるものではなく、本発明の趣旨を逸脱しない範囲で、適宜変形して実施することが可能である。
例えば、上記実施形態では、ファイルストレージ20は、クラウドストレージ30において、ファイルを構成するチャンクを結合して格納するか否かを設定に応じて替えることができる構成としていたが、本発明はこれに限られず、ファイルストレージ20を、ファイルを構成するチャンクを結合して格納するか、結合しないで格納するかのいずれかに固定された構成としてもよい。
また、上記実施形態における図10及び図13に示す部分更新処理は、リード命令に基づいて、クラウドストレージ30からデータを読み出して、リード部分を、例えば、コンピュータ10にファイルストレージ20から送信した後、コンピュータ10からリード部分のデータに対する更新を受け取ったときに実行される処理としていたが、本発明はこれに限られず、例えば、ファイルストレージ20にリード命令に対応するファイルの複数のチャンク(少なくともリード部分を含むチャンク)が格納されている場合に、ファイルストレージ20からリード部分を含むチャンクを読み出し、そのチャンクからリード部分を特定してコンピュータ10に送信し、コンピュータ10から送信したリード部分のデータに対する更新を受け取ったときに実行される処理としてもよい。
また、上記実施形態では、符号化処理として、主に圧縮処理及び/又は暗号化処理を例に説明していたが、これに限定されず、他の符号化処理を含んでもよく、例えば、データに対して、誤り検出訂正符号(ECC:Error Correction Code)を算出してデータに付加する処理や、消失訂正符号を算出して付加する処理であってもよい。
また、上記実施形態におけるファイルストレージ20の機能を、ユーザが使用するコンピュータ10に組み込んでもよい。このように、コンピュータ10がファイルストレージ20の機能が組み込まれている場合には、このコンピュータ10は、特許請求の範囲のファイルストレージに相当する。例えば、ファイルストレージ20の機能を、ユーザが使用するコンピュータ10に組み込んだ場合においては、コンピュータシステム1に、ファイルストレージ20を備えていなくてもよい。
また、上記実施形態において、CPUが行っていた処理の一部又は全部を、ハードウェア回路で行うようにしてもよい。また、上記実施形態におけるプログラムは、プログラムソースからインストールされてよい。プログラムソースは、例えば、プログラム配布サーバ又は計算機が読み取り可能な記憶メディア(例えば可搬型の記憶メディア)であってもよい。
1…コンピュータシステム、10…コンピュータ、20…ファイルストレージ、21…処理装置、22…周辺装置、23…主記憶装置、24…CPU、25…補助記憶装置、26…ネットワークカード、27…バス、30…クラウドストレージ、40…LAN、50…ネットワーク
Claims (13)
- データを格納するデータストレージに接続され、ファイルを管理するファイルストレージであって、
前記ファイルストレージはプロセッサを有し、
前記プロセッサは、
前記ファイルを複数のチャンクに分割して、前記チャンクの中の少なくとも1つに対して符号化処理を実行して符号化チャンクとし、前記符号化チャンクを含む前記ファイルの複数のチャンクを前記データストレージに格納させ、
前記データストレージに格納させたファイルの一部のデータを対象とするリード命令を受け付けた場合に、前記リード命令の対象となるデータを含むリード対象チャンクを前記データストレージから取得し、
前記リード対象チャンクの中に符号化チャンクが含まれている場合に、前記符号化チャンクに対して逆符号化処理を実行し、逆符号化処理されたチャンクを含むリード対象チャンクからリード対象のデータを特定して前記リード命令の命令元に渡す
ファイルストレージ。 - 前記プロセッサは、
前記リード対象のデータが更新された場合に、前記リード対象チャンクのリード対象のデータに対して更新後のデータを反映させて更新後チャンクを作成し、
前記更新後チャンクを前記ファイルのリード対象チャンクに代わるチャンクとして、前記データストレージに格納させる
請求項1に記載のファイルストレージ。 - 前記チャンク毎の前記データストレージに対して格納する際の符号化処理の有無に関する符号化処理情報を記憶する記憶部をさらに備え、
前記プロセッサは、
前記チャンクに対して前記符号化処理情報に基づいて、前記データストレージに格納させる前記チャンクに対する前記符号化処理の実行を決定する
請求項1に記載のファイルストレージ。 - 前記プロセッサは、
前記ファイルを複数のチャンクに分割し、
前記分割した各チャンクのファイルにおける位置を特定する位置情報を示すチャンクマップを記憶部に格納し、
前記リード命令を受け付けた場合に、前記チャンクマップに基づいてリード対象チャンクを特定し、前記データストレージから取得する
請求項1に記載のファイルストレージ。 - 前記プロセッサは、
前記ファイルを各チャンクのサイズが所定の範囲となるように分割する
請求項1に記載のファイルストレージ。 - 前記プロセッサは、
前記リード対象チャンクのリード対象のデータに対して更新後のデータを反映させて更新後チャンクを作成し、
前記更新後チャンクを複数のチャンクに分割し、分割したチャンクを前記ファイルのリード対象チャンクに代わるチャンクとして、前記データストレージに格納させる
請求項2に記載のファイルストレージ。 - 前記プロセッサは、
前記ファイルを構成する前記チャンク毎に独立して前記データストレージに格納させる
請求項1に記載のファイルストレージ。 - 前記プロセッサは、
前記ファイルを構成する全ての前記チャンクを結合させて前記データストレージに格納させる
請求項1に記載のファイルストレージ。 - 前記プロセッサは、
前記ファイルを構成する全ての前記チャンクの前記符号化処理後の位置情報を特定し、前記チャンク毎の前記符号化処理後の位置情報を含むチャンクマップを記憶部に格納し、
前記チャンクマップに基づいて、結合されたチャンクの中から前記リード対象チャンクを特定する
請求項8に記載のファイルストレージ。 - 前記符号化処理は、
データを圧縮する圧縮処理、データを暗号化する暗号化処理、誤り検出訂正符号を算出して付加する処理、又は消失訂正符号を算出して付加する処理の少なくともいずれか1つである
請求項1に記載のファイルストレージ。 - データを格納するデータストレージに接続され、ファイルを管理するファイルストレージであって、
前記データストレージには、前記ファイルを構成する複数のチャンクが格納され、複数の前記チャンクの中の少なくとも1つは、符号化処理が実行された符号化チャンクを含み、
前記ファイルストレージは、前記ファイルを構成する複数のチャンクを格納し、
前記ファイルストレージはプロセッサを有し、
前記プロセッサは、
前記データストレージに格納されたファイルの一部のデータを対象とするリード命令を受け付けた場合に、前記リード命令の対象となるデータを含むリード対象チャンクが前記ファイルストレージに格納されていれば、前記ファイルストレージから前記リード対象チャンクを読み出し、前記リード対象チャンクからリード対象のデータを特定して前記リード命令の命令元に渡し、
前記リード対象のデータが更新された場合に、前記リード対象チャンクのリード対象のデータに対して更新後のデータを反映させて更新後チャンクを作成し、
前記更新後チャンクを前記ファイルのリード対象チャンクに代わるチャンクとして、前記データストレージに格納させる
ファイルストレージ。 - データを格納するデータストレージと、ファイルを管理するファイルストレージとを備えるコンピュータシステムであって、
前記ファイルストレージはプロセッサを有し、
前記ファイルストレージのプロセッサは、
前記ファイルを複数のチャンクに分割して、前記チャンクの中の少なくとも1つに対して符号化処理を実行して符号化チャンクとし、前記符号化チャンクを含む前記ファイルの複数のチャンクを前記データストレージに格納させ、
前記データストレージに格納させたファイルの一部のデータを対象とするリード命令を受け付けた場合に、前記リード命令の対象となるデータを含むリード対象チャンクを前記データストレージから取得し、
前記リード対象チャンクの中に符号化チャンクが含まれている場合に、前記符号化チャンクに対して逆符号化処理を実行し、逆符号化処理されたチャンクを含むリード対象チャンクからリード対象のデータを特定して前記リード命令の命令元に渡す
コンピュータシステム。 - 前記ファイルストレージのプロセッサは、
前記リード対象のデータが更新された場合に、前記リード対象チャンクのリード対象のデータに対して更新後のデータを反映させて更新後チャンクを作成し、
前記更新後チャンクを前記ファイルのリード対象チャンクに代わるチャンクとして、前記データストレージに格納させる
請求項12に記載のコンピュータシステム。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2020185166A JP2022074807A (ja) | 2020-11-05 | 2020-11-05 | ファイルストレージ及びコンピュータシステム |
US17/208,068 US11709628B2 (en) | 2020-11-05 | 2021-03-22 | File storage and computer system that creates new chunks after an update |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2020185166A JP2022074807A (ja) | 2020-11-05 | 2020-11-05 | ファイルストレージ及びコンピュータシステム |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2022074807A true JP2022074807A (ja) | 2022-05-18 |
Family
ID=81379992
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2020185166A Pending JP2022074807A (ja) | 2020-11-05 | 2020-11-05 | ファイルストレージ及びコンピュータシステム |
Country Status (2)
Country | Link |
---|---|
US (1) | US11709628B2 (ja) |
JP (1) | JP2022074807A (ja) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2022074807A (ja) * | 2020-11-05 | 2022-05-18 | 株式会社日立製作所 | ファイルストレージ及びコンピュータシステム |
US20220358235A1 (en) * | 2021-05-05 | 2022-11-10 | EMC IP Holding Company LLC | Access Control of Protected Data Using Storage System-Based Multi-Factor Authentication |
Family Cites Families (21)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6678828B1 (en) * | 2002-07-22 | 2004-01-13 | Vormetric, Inc. | Secure network file access control system |
JP4256415B2 (ja) * | 2006-09-04 | 2009-04-22 | 株式会社日立製作所 | 暗号化装置、復号装置、情報システム、暗号化方法、復号方法及びプログラム |
CN101593196B (zh) * | 2008-05-30 | 2013-09-25 | 日电(中国)有限公司 | 用于快速密文检索的方法、装置和系统 |
US8473778B2 (en) * | 2010-09-08 | 2013-06-25 | Microsoft Corporation | Erasure coding immutable data |
US8326811B2 (en) * | 2010-10-26 | 2012-12-04 | Hitachi, Ltd. | File management method and computer system |
US8868647B2 (en) * | 2012-01-11 | 2014-10-21 | Alcatel Lucent | Reducing latency and cost in resilient cloud file systems |
CN102937967B (zh) * | 2012-10-11 | 2018-02-27 | 南京中兴新软件有限责任公司 | 数据冗余实现方法及装置 |
WO2014125582A1 (ja) * | 2013-02-13 | 2014-08-21 | 株式会社日立製作所 | ストレージ装置及びデータ管理方法 |
US10043017B2 (en) * | 2013-04-15 | 2018-08-07 | Paul Lewis | Systems and methods for jurisdiction independent data storage in a multi-vendor cloud environment |
WO2015097756A1 (ja) * | 2013-12-24 | 2015-07-02 | 株式会社日立製作所 | ストレージシステム及び重複排除制御方法 |
SG11201609471TA (en) * | 2014-05-13 | 2016-12-29 | Cloud Crowding Corp | Distributed secure data storage and transmission of streaming media content |
US10409772B2 (en) * | 2015-02-27 | 2019-09-10 | Pure Storage, Inc. | Accessing serially stored data in a dispersed storage network |
JP2017073074A (ja) * | 2015-10-09 | 2017-04-13 | 株式会社リコー | 情報処理装置、及び情報処理システム |
US10367604B2 (en) * | 2016-11-18 | 2019-07-30 | International Business Machines Corporation | Encoding variable length symbols to enable parallel decoding |
US10798149B2 (en) * | 2017-02-24 | 2020-10-06 | Hitachi, Ltd. | File storage, object storage, and storage system |
US10387253B2 (en) * | 2017-08-25 | 2019-08-20 | Datera, Inc. | System and method to utilize larger block sizes for logical disk and further decompose into smaller physical block sizes for redundant encoding by utilizing erasure coding |
US10949303B2 (en) * | 2017-12-11 | 2021-03-16 | Fungible, Inc. | Durable block storage in data center access nodes with inline erasure coding |
US10802972B2 (en) * | 2018-08-02 | 2020-10-13 | MemVerge, Inc | Distributed memory object apparatus and method enabling memory-speed data access for memory and storage semantics |
US11262927B2 (en) * | 2019-07-30 | 2022-03-01 | Sony Interactive Entertainment LLC | Update optimization using feedback on probability of change for regions of data |
US20220138352A1 (en) * | 2020-11-05 | 2022-05-05 | EMC IP Holding Company LLC | Multi-Cloud Framework for Data Protection Using Threshold-Based File Reconstruction |
JP2022074807A (ja) * | 2020-11-05 | 2022-05-18 | 株式会社日立製作所 | ファイルストレージ及びコンピュータシステム |
-
2020
- 2020-11-05 JP JP2020185166A patent/JP2022074807A/ja active Pending
-
2021
- 2021-03-22 US US17/208,068 patent/US11709628B2/en active Active
Also Published As
Publication number | Publication date |
---|---|
US20220137878A1 (en) | 2022-05-05 |
US11709628B2 (en) | 2023-07-25 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
KR101381551B1 (ko) | 그룹 기반의 완료 및 증분 컴퓨터 파일 백업 시스템, 프로세스 및 장치 | |
US8307019B2 (en) | File management method and storage system | |
US11354065B2 (en) | Cloud edition and retrieve | |
US20180285014A1 (en) | Data storage method and apparatus | |
US20140101184A1 (en) | File system adapted for use with a dispersed data storage network | |
US20120089775A1 (en) | Method and apparatus for selecting references to use in data compression | |
US20120089579A1 (en) | Compression pipeline for storing data in a storage cloud | |
US20120221524A1 (en) | Storage of data with composite hashes in backup systems | |
US20150339314A1 (en) | Compaction mechanism for file system | |
US9824131B2 (en) | Regulating a replication operation | |
US10203905B2 (en) | System and method for incrementally performing full data backup | |
JP5650982B2 (ja) | ファイルの重複を排除する装置及び方法 | |
JP2022074807A (ja) | ファイルストレージ及びコンピュータシステム | |
US20180329785A1 (en) | File system storage in cloud using data and metadata merkle trees | |
US11455100B2 (en) | Handling data slice revisions in a dispersed storage network | |
US20230013391A1 (en) | Using a secondary storage system to implement a hierarchical storage management plan | |
US10700711B1 (en) | Multi-part upload and editing of erasure-coded objects | |
US20220083250A1 (en) | Efficiently storing data in a cloud storage | |
US20120239633A1 (en) | Dynamic rewrite of files within deduplication system | |
US7685186B2 (en) | Optimized and robust in-place data transformation | |
WO2023197937A1 (zh) | 数据处理方法及其装置、存储介质、计算机程序产品 | |
KR102477386B1 (ko) | 실시간 모니터링에 기반한 데이터 백업 방법 및 이를 구현하는 컴퓨터 판독가능 저장 매체에 저장된 컴퓨터 프로그램 | |
US12001396B2 (en) | File storage and computer system | |
US20190026304A1 (en) | Container metadata separation for cloud tier | |
US10628399B2 (en) | Storing data in a dispersed storage network with consistency |