(57)【要約】【課題】サービスの提供者にも、ユーザにも不合理な負担をさせることなく、ユーザのファイル間の冗長性の自動的な解消と、効率的なサーバ装置の記憶領域の利用を実現する。【解決手段】符号と関連付けられて管理されるビット列と一致するビット列を前記符号に置換することにより、ユーザ識別情報と関連付けて入力されるファイルを圧縮して格納するファイル格納装置であって、符号又は／及びビット列の管理のコストをユーザ識別情報ごとに分配するファイル格納装置を提供する。ここに、符号又は／及びビット列の管理のコストとは、符号又は／及びビット列を保持や維持などすることに必要なコストであり、例えば、必要な記憶領域の大きさや、必要なＣＰＵの動作に対するコストである。【選択図】図３
2007219882.tif 000002
【特許請求の範囲】
【請求項１】
符号と関連付けられて管理されるビット列と一致するビット列を前記符号に置換することにより、ユーザ識別情報と関連付けて入力されるファイルを圧縮して格納するファイル格納装置であって、
前記管理のコストをユーザ識別情報ごとに分配する管理コスト分配部を有するファイル格納装置。
【請求項２】
ユーザ識別情報に関連づけて、そのユーザ識別情報と関連付けられて入力されたファイルに対して置換されたビット列ごとに置換の数を取得する置換数取得部を有し、
前記管理コスト分配部は、前記置換数取得部で取得された置換の数を用いて前記管理のコストを分配する置換数依存分配手段を有する請求項１に記載のファイル格納装置。
【請求項３】
ファイルの先頭から開始するビット列が、符号と関連付けられた一または複数のビット列と一致するか判断する判断部と、
一致すると判断された部分以降のビット列を新たな符号と関連付けて保持する新符号ビット列保持部と、
を有する請求項１または２に記載のファイル格納装置。
【請求項４】
ファイルの予め定められた構造に従って断片に分別する分別部を有し、
前記分別部により分別された断片を独立のファイルとして前記圧縮の対象とする請求項１から３のいずれか一に記載のファイル格納装置。
【請求項５】
特定のビット列を特定のユーザ識別情報と関連づけて保持し、
ファイル格納装置において前記特定のビット列を用いて圧縮を行ったか判断する特定ビット列判断部とを有し、
前記管理コスト分配部は、特定ビット列判断部での判断結果が用いたとの判断結果である場合には、分配される管理のコストの一部または全てを、特定ビット列と関連付けられたユーザ識別情報で識別されるユーザに対して分配する特定ユーザ分配手段を有する請求項１から４のいずれか一に記載のファイル格納装置。
【請求項６】
前記管理コスト分配部で分配された管理のコストに基づいてファイル格納の料金を算出する料金算出部を有する請求項１から５のいずれか一に記載のファイル格納装置。
【請求項７】
符号と関連付けられて管理されるビット列と一致するビット列を前記符号に置換することにより、ユーザ識別情報と関連付けて入力されるファイルを圧縮して格納するファイル格納装置の動作方法であって、
前記管理のコストをユーザ識別情報ごとに分配する管理コスト分配ステップを含むファイル格納装置の動作方法。
【請求項８】
計算機に、符号と関連付けられて管理されるビット列と一致するビット列を前記符号に置換させることにより、ユーザ識別情報と関連付けて入力されるファイルを圧縮して格納させるためのファイル格納プログラムであって、
前記管理のコストをユーザ識別情報ごとに分配する管理コスト分配ステップを含むファイル格納プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ファイル格納装置、その動作方法およびファイル格納プログラムに関する。
【背景技術】
【０００２】
不特定多数のユーザを対象に、インターネットなどの通信回線を介してファイルを格納するためのディスクスペースを貸し出すサービスが提供されている（例えば、特許文献１参照。）。このようなサービスでは、インターネットなどの通信回線に接続されたサーバ装置の記憶装置の中に、各ユーザごとにディレクトリを設定しておき、各ユーザは、各自に割り当てられたディレクトリに、ＦＴＰ（Ｆｉｌｅ  Ｔｒａｎｓｆｅｒ  Ｐｒｏｔｏｃｏｌ）などを用いて、ファイルをアップロードして格納できる。
【特許文献１】特開２００３−６７２５３号公報
【発明の開示】
【発明が解決しようとする課題】
【０００３】
従来のディスクスペースを貸し出すサービスでは、複数のユーザが内容が同じファイルや類似のファイルをアップロードした場合、重複して同じ内容（同じビット列やバイト列など）が複数のファイルに格納され、ディスクスペースを消費するというという無駄が生じる。
【０００４】
従来のサービスにおいては、ユーザが互いに知人同士であり、かつ、お互いが同じファイルや類似のファイルを格納することがわかっている場合には、共有のアカウントを作成したり、アップロード前に、お互いの類似ファイルから、重複する内容からなる部分である冗長部分を、取り除く処理をすることで、冗長性を減らしてサーバ装置の格納容量を有効に利用することが可能ではある。しかし、その場合には、ユーザ間で意思の統一をしてからファイルのアップロードを行なうなどの必要があり、ユーザにとって負担となってしまう。また、不特定のユーザを対象とする場合には、ユーザが知人同士であることの頻度は少ない。また、ファイルの内容を自分のみ知る状態にして秘匿する場合には、ユーザ間での意思の統一はできない。
【０００５】
そこで、ディスクスペースを貸し出すサービスを提供する者が、ファイルの内容を符号化するのに必要な情報を用意しておき、この情報をファイルを格納する領域とは別の領域に格納し、その情報を用いてファイルの内容をより短い符号に置換することにより、サーバ装置が、ファイルの冗長な部分を取り除くことが考えられる。例えば、複数のユーザがアップロードしたファイルの中に共通して現れるビット列を抽出などし、そのビット列に符号を対応づけ、ファイルの中の特定のビット列を符号に置換することにより、冗長性を取り除き、効率よくデータを格納することが可能である。しかし、この場合には、データを符号化するのに必要な情報を格納するのに必要なコストを、サービスを提供する者が自分で負担するか、共益費などとして、ユーザに振り分ける必要が出てくる。サービスを提供するものがこのコストを負担する場合には、符号化するのに必要な情報の量が膨大になると、その情報の管理のオーバーヘッドにより、サービスの提供の継続が困難となる虞がある。また、ユーザにコストを振り分ける場合には、例えば、均等に割り振れば、他のユーザと共通する内容を持たないファイルを格納するユーザにとっては不合理なコストを負担しなければならなくなる。
【０００６】
そこで、本発明では、従来と比べて、サービスの提供者にも、ユーザにも不合理なコストの負担をさせることなく、ユーザのファイル間の冗長性の自動的な解消と、効率的なサーバ装置の記憶領域の利用を実現することを目的とする。
【０００７】
なお、そもそもディスクスペースを貸し出すサービスにおいて、ファイルの内容の一部を符号に置換してファイル格納の効率を図ることは、出願人の知る限り実際には行なわれていないことである。したがって、上述の部分には従来技術だけではなく、本願の発明者による発明の記述が一部含まれている。
【課題を解決するための手段】
【０００８】
かかる目的を解決するために、本発明では、符号と関連付けられて管理されるビット列と一致するビット列を前記符号に置換することにより、ユーザ識別情報と関連付けて入力されるファイルを圧縮して格納するファイル格納装置であって、符号又は／及びビット列の管理のコストをユーザ識別情報ごとに分配するファイル格納装置を提供する。ここに、符号又は／及びビット列の管理のコストとは、符号又は／及びビット列を保持や維持などすることに必要なコストであり、例えば、必要な記憶領域の大きさや、必要なＣＰＵの動作に対するコストである。
【０００９】
このようなファイル格納装置では、管理のコストがユーザに適正に分配されることが実現できるので、課題が解決される。
【００１０】
また、ファイルに対してビット列の符号への置換の数をビット列ごとにユーザ識別情報に関連付けて取得し、この数に用いて管理のコストをユーザに分配してもよい。これにより、より適正なコストの分配が可能となる。
【００１１】
また、ファイルの先頭から開始するビット列が、符号と関連付けられた一または複数のビット列と一致するかどうかを判断して、一致すると判断された部分以降のビット列を新たな符号と関連付けて保持するようにしてもよい。これにより、管理するべきビット列を自動的に収集することが可能となる。
【００１２】
また、ファイルの予め定められた構造に従って、ファイルを断片に分別し、それぞれの断片をファイルとして圧縮の対象とするようにしてもよい。これにより、構造を持ったファイルの格納を効率よく行なうことが可能となる。
【００１３】
また、特定のビット列の管理のコストの一部または全てを特定のユーザに対して分配してもよい。これにより、特定の言葉（例えば、商標など）や特定の思想の表現を普及させたいと考えるユーザの考えを実現することができる。
【００１４】
また、管理のコストに基づいてファイル格納の料金を算出するようにしてもよい。これにより、サービスの提供者は適正な対価を得ることができる。
【発明の効果】
【００１５】
以上のように、本発明によれば、ファイルを格納するサーバ装置の記憶領域を効率よく使用することができ、また、コストをユーザに適正に分配することができる。
【発明を実施するための最良の形態】
【００１６】
以下、本発明を実施するための最良の形態について、実施形態として図を参照しながら説明を行なう。なお、本発明はこれら実施形態になんら限定されるものではなく、その要旨を逸脱しない範囲において、種々なる態様で実施し得る。
【００１７】
（実施形態１）
実施形態１として、符号と関連付けられて管理されるビット列と一致するビット列を前記符号に置換することにより、ユーザ識別情報と関連付けて入力されるファイルを圧縮して格納するファイル格納装置であって、符号又は／及びビット列の管理のコストをユーザ識別情報ごとに分配するファイル格納装置について説明する。
【００１８】
（実施形態１：前提）
図１は、以下でのファイル格納装置などの開示の前提となる構成を示す機能ブロック図を例示する。すなわち、本明細書において、それぞれの実施形態に係るファイル格納装置の機能ブロック図は、図１に例示された機能ブロック図が共通した前提となる。そこで、ここで説明を行なう。このため、ここで例示された機能ブロック図の部分を省略して、以降の実施形態に係るファイル格納装置の機能ブロック図を示す。
【００１９】
ファイル格納装置１００は、インターネットなどの通信網１０１に接続され、ユーザ端末１０２、１０３、１０４よりアクセスが可能である。ユーザ端末からＦＴＰプログラムなどを実行してファイル格納装置１００と接続を行なう。この場合、通信インターフェース１０５を介して、認証部１０６により、ユーザの識別情報とパスワードなどとの適合を判断して、ユーザの認証が行なわれる。
【００２０】
認証部１０６によるユーザの認証が正常に終了すると、ユーザはユーザ端末からファイルをアップロードする。アップロードされたファイルは、通信インターフェース１０５を介して受信部１０７により受信される。その後、圧縮部１０８により圧縮が行なわれる。
【００２１】
圧縮部１０８による圧縮においては、符号−ビット列格納部１０９に格納されて管理されている符号とビット列との関連付けが参照される。一般的に、符号は、それに関連付けられるビット列よりも短いビット数で表現が可能である。このため、ファイルの中に、符号と関連付けられているビット列をその符号に置換することにより、ファイルを、より小さなサイズに圧縮することができる。このように圧縮されたファイルは、圧縮ファイル格納部１１０に格納される。
【００２２】
図２は、ユーザの識別情報であるユーザ識別情報と、ファイルと、ビット列と、符号との関係を例示する図である。符号ｃ１とビット列ｂ１とが関連付けられて符号−ビット列格納部１０９に格納され、また同様に、ｃ２とｂ２と、ｃ３とｂ３と、ｃ４とｂ４と、ｃ５とｂ５とが関連付けて格納される。もし、Ｕ１で識別されるユーザがファイルＦ１とＦ２とをアップロードし、Ｆ１の中にｂ１、ｂ２とｂ４とが含まれている場合には、そのｂ１の出現はｃ１に置換され、そのｂ２の出現はｃ２に置換され、そのｂ４の出現はｃ４に置換される。同様に、Ｆ２の中にｂ３が含まれる場合には、そのｂ３の出現は、ｃ３に置換され、格納がされる。同様に、Ｕ２で識別されるユーザがファイルＦ３をアップロードし、Ｆ３の中に、ｂ４とｂ５とが含まれる場合には、それぞれの出現は、ｃ４、ｃ５に置換され、格納がされる。
【００２３】
どのようなビット列に符号を関連付けるかについては、例えば、受信したファイルを形態素解析などにより単語などの所定の単位に分解して、１００回以上現れる単語や単語の並びの句や文とする。ただし、多数の短い単語、句や文のビット列に符号を関連付けることを行うと、逆に圧縮効率が低下することもあるため、所定の長さ未満となる短い単語、句や文のビット列については関連づけないようになっていてもよい。
【００２４】
ユーザ端末より、ＦＴＰプログラムなどにより、ファイルの送信要求があった場合には、認証部１０６で認証の後、ファイル送信要求受付部１１１でファイルの送信要求が受け付けられる。その後、圧縮ファイル格納部１１０に格納されたファイルが、伸長部１１２により、符号−ビット列格納部１０９に格納された符号とビット列とが参照され、その符号が、それに関連づけて格納されているビット列へ置換されて伸長が行なわれ、送信部１１３によりファイルの送信が行なわれる。これにより受信部１０７で受信したときのファイルが復元されて送信される。
【００２５】
なお、ファイル格納装置１００は、ＣＰＵ、メモリ、ハードディスク、入出力インターフェース、通信インターフェースなどをバスにより結合させた計算機で実現することができる。この場合、認証部１０６、受信部１０７、圧縮部１０８、符号−ビット列格納部１０９、圧縮ファイル格納部１１０、ファイル送信要求受付部１１１、伸長部１１２、送信部１１３は、プログラムのモジュールなどとして実現できる。例えば、符号−ビット列格納部１０９は、符号とビット列とをハードディスクに関連付けて格納するモジュールとして実現できる。そのモジュールには、圧縮部１０８によってビット列が入力などされ、一致するビット列に対して符号を返す。また、伸長部１１２から符号の入力がされると、それに関連付けられているビット列を返す。また、入出力インターフェースを介してファイル格納装置１００のオペレータなどから、符号とビット列との関連付けが管理可能となっている。圧縮ファイル格納部１１０は、ハードディスクに圧縮されたファイルを書き出して格納したり、伸長部１１２のためにファイルを読み出すことを行なう。
【００２６】
認証部１０６は通信インターフェース１０５にアクセスを行ない、ユーザ識別情報とパスワードなどを受信し、ユーザ識別情報とパスワードなどとの適合性の検査を行ない、ユーザを認証するモジュールとして実現される。ユーザ識別情報とパスワードなどとの関連付けは、ハードディスクなどに格納される。
【００２７】
受信部１０７は、通信インターフェース１０５にアクセスを行ない、受信したファイルをメモリやハードディスクに一時的に記憶して、受信したファイルを圧縮部１０８に渡すモジュールとして実現される。圧縮部１０８は、渡されたファイルのビット列を読み出し、符号−ビット列格納部１０９に入力などを行ない、符号と関連付けられているビット列があれば、その符号を受け取り、ファイルのビット列と置換を行なう。このように圧縮されたファイルは、ハードディスクに格納するために圧縮ファイル格納部１１０を実現するモジュールに渡される。
【００２８】
また、ファイル送信要求受付部１１１は、通信インターフェースを介して、ファイル送信要求を受け付け、送信部１１３にファイルの送信を命令するモジュールとして実現される。送信部１１３は、伸長部１１２を実現するモジュールにファイルの伸長を命令し得られるファイルを通信インターフェースを介して送信するモジュールとして実現される。
【００２９】
伸長部１１２は、送信部１１３から命令があったファイルの中の符号を符号−ビット列格納部１０９により管理などされているビット列に置換してファイルを伸長し、伸長の結果をメモリやハードディスクに一時的に記憶して、送信部１１３を実現するモジュールに渡す。
【００３０】
このような構成により、符号と関連付けられて管理されるビット列と一致するビット列を前記符号に置換することにより、ユーザ識別情報と関連付けて入力されるファイルを圧縮して格納するファイル格納装置が実現される。
【００３１】
また、以上説明したモジュールからなるプログラムを媒体に記録することも可能である。すなわち、ファイル格納装置を計算機で実現するためのプログラムを記録した媒体を提供することも可能である。ここに、媒体とは、例えば、フレキシブルディスクなどの磁気ディスクのほか、光ディスク、光磁気ディスク、メモリ媒体など、ビット情報をある程度の時間以上保持可能な有体物を意味する。
【００３２】
なお、ファイル格納装置は、例えば、受信した電子メールを保持するメールサーバや、ＨＴＭＬなどで記述されたファイルを格納し、格納されたファイルを閲覧可能とするウェブサーバとして動作させることもできる。
【００３３】
（実施形態１：構成）
図３は、実施形態１に係るファイル格納装置の機能ブロック図を例示する。ファイル格納装置３００は、管理コスト分配部３０１を有する。
【００３４】
「管理コスト分配部」３０１は、前記管理のコストをユーザ識別情報ごとに分配する。「前記管理」とは、“符号と関連づけられて管理されるビット列”でいうところの「管理」を指し示す。より具体的な例として説明すると、符号−ビット列格納部１０９で格納される符号とビット列との関連付けのために行なわれる管理である。
【００３５】
「前記管理のコスト」とは、前記管理のために必要となったコストである。より詳細には、例えば、符号とビット列との関連付けの格納に必要なディスクスペースにかかるコストであったり、圧縮部１０８、符号−ビット列格納部１０９などを動作させるのに必要となったＣＰＵの動作コストなどである。コストは、ディスクスペースであれば、バイト単位で測定され、ＣＰＵの動作コストであれば、時間を単位にして測定されるが、測定の結果を貨幣価値や所定の単位を用いた数値に換算した結果によりコストを表示してもよい。
【００３６】
また、「管理のコスト」と「課金額」とは同じ意味の単語として扱われる場合があるかもしれないが、一般的には異なる概念である。例えば、ファイルの格納に対して課金する額が、ファイルのサイズや格納する期間などに関わらず、どのユーザにも同じ課金額とすることもできるが、管理のコストはユーザごとに異なり得る。すなわち、ユーザがファイル格納装置に格納させたファイルのサイズや期間などに応じて、ユーザごとの管理のコストは異なり得るからである。この場合、どのユーザにも同じ課金額が課されるが、格納させたファイルの管理のコストを管理コスト分配部３０１により分配した値が所定の値になるまで、ファイルを各ユーザが格納できるように制限を付けることもできる。
【００３７】
一般に、有料サービスの提供者は、サービスの提供に必要なコストよりも多くの料金をユーザから徴収することにより、利益を得ることができる。従来技術における、ディスクスペースを貸し出すサービスの提供においては、サーバが受信したファイルを単にディスクに格納するだけなので、必要なコストは、ディスクスペースのサイズのみに依存したり、あるいは、ディスクスペースのサイズに主に依存したりする。したがって、ユーザから徴収する料金に見合った容量のディスクスペースをユーザに割り当て、その容量を超える総計のサイズのファイルが格納できないようにすることにより、ユーザへのサービスによって生じるコストの上限を設定することができる。このような状況下では、ユーザが格納したファイルのサイズのトータルを、例えばバイトを単位として測定することが、ユーザへのサービスの提供のための管理のコストを測定していることとなる。
【００３８】
しかし、本発明では、格納されるファイルを構成するビット列のサイズが、重要な管理のコストの要素ではあると言えるが、ファイルの圧縮や伸長に必要なＣＰＵの動作を含む計算機システムの管理のコストも重要な要素となり得る。すなわち、圧縮の処理や伸長の処理に伴う待ち時間などを発生させずに、ユーザに快適なサービスを提供するためには、従来技術における、ディスクスペースを貸し出すサービスに用いる計算機システムよりも高額でかつ大きな負荷に耐えうる計算機システムを調達してファイル格納装置を実現し、計算機システムを動作させる必要がある。また、サービスの提供者は、計算機システムのＣＰＵなどを動作させるコストを負担する必要がある。
【００３９】
本発明における第一の管理のコストの算出方法は、このようなコストの負担に見合うように例えばバイトあたりの単価を一律に高めに設定し、従来技術と同様に、格納に必要なディスクサイズで管理のコストを測定することである。すなわち、バイトあたりの単価を１．２倍に上げて、圧縮によるディスクサイズの節約の効果が、高めに設定した分を上回る場合には、サービス提供者が利益を得ることができるコストの算出方法であると言える。また、この算出方法を用いると、実際の全格納サイズ、すなわち、圧縮ファイルのサイズの総和と、ビット列のサイズの総和とが等しくなる。このことから、有料サービスの提供者は、用意すべきディスクの容量を合理的に決めることができる。例えば、１０名のユーザに各々圧縮ファイル格納部に格納される圧縮ファイルの管理のコストと符号−ビット列格納部の管理のコストの分配分の総和を１Ｇバイトまで許可し、圧縮ファイル格納部と符号−ビット列格納部を単一のディスク装置に実装するならば、１０Ｇバイトの容量を持つディスク装置を用いて、ファイル格納装置を実現するための計算機システムを構成すればよいと決めることができる。
【００４０】
本発明における第二の管理のコストの算出方法は、高額な計算機システムの調達・動作によるビット列の処理については、高めの単価で管理のコストを算出し、高額な計算機システムを用いなくても同じサイズとなるであろうビット列の管理については低めの単価で管理コストを算出することである。例えば、図１の圧縮ファイル格納部１１０に格納される圧縮ファイルの管理のコストは、所定の単価の１．０倍として算出し、符号−ビット列格納部１０９に格納されるビット列の管理のコストは、所定の単価の１．２倍として算出してもよい。第一の管理のコストの算出方法のみが使用される場合には、圧縮することにより圧縮の効果が現れるファイルの格納には、本発明を用いたサービスを利用し、圧縮の効果があまりないファイルの格納には、従来技術のサービスを利用して、本発明を用いたサービスと従来技術のサービスとを使いわけるユーザが発生し、本発明を用いたサービスの提供者にあまり利益が発生しないなどの虞がある。しかし、第二の管理のコストの算出方法を用いると、どの部分も符号に置換されることなく全体がそのまま圧縮ファイル格納部１１０に格納されてしまうようなファイルについても低いバイトあたりの単価で格納することができる。これにより、上述のような使い分けをするユーザの発生を防止することができる。
【００４１】
なお、本発明を用いる場合には、符号に置換されることのないファイルであっても便宜的に一つのビット列を構成すると考え、ファイル全体を一つの符号として関連付けを行ない符合−ビット列格納部１０９に格納し、圧縮ファイル格納部１１０には管理のコストを無視できるほどの小さな符号のみを格納することで、管理のコストの算出を、符号−ビット列格納部１０９に格納されているビット列のみに対して行なうことが考えられる。このようにすることにより、管理のコストの一元的な管理ができる。また、第二の管理のコストの算出方法を用いる場合には、一回しか置換されていない符号に関連付けられているビット列の格納コストは、所定の単価の１．０倍とし、二回以上置換に用いられている符号に関連付けられているビット列の格納コストは、１．２倍とするようにしてもよい。
【００４２】
図４は、管理のコストを分配するために参照される表を例示する。例えば、図２のように、ユーザ識別情報と、ファイルと、ビット列と、符号とが関連付けられているとする。この場合、Ｕ１で識別されるユーザがアップロードしたファイルは、ｂ１、ｂ２、ｂ３、ｂ４のビット列が置換されたので、「Ｕ１」の行と、「ｂ１」、「ｂ２」、「ｂ３」、「ｂ４」の列とが交差する欄（すなわち、Ｕ１とｂ１、ｂ２、ｂ３、ｂ４とに対応する欄）には、「＋」がＵ１と関連付けて格納され、Ｕ１で識別されるユーザがアップロードしたファイルには、ｂ５のビット列が置換されていないので、「Ｕ１」の行と「ｂ５」の列とが交差する欄には、「−」がＵ１と関連付けて格納される。同様に、「Ｕ２」の行と「ｂ１」、「ｂ２」、「ｂ３」、「ｂ４」、「ｂ５」の列とが交差する欄には、それぞれ、「−」、「−」、「−」、「＋」、「＋」がＵ２と関連付けて格納される。
【００４３】
管理のコストを分配する場合には、例えば、ユーザ識別情報ごとに関連付けられている「＋」の個数を求め、その数により管理コストの総数を按分する。Ｕ１に関連付けられている「＋」の個数（この個数を「符号参照数」という場合がある）は４であり、Ｕ２に関連付けられている「＋」の個数は２であるので、Ｕ１に配分する管理のコストと、Ｕ２に配分する管理のコストとの比が４対２になるように按分する。例えば、管理のコストが６万円であれば、Ｕ１には４万円、Ｕ２には２万円が按分により分配される。このように按分することにより、「＋」の個数が多いほど、ユーザ識別情報には多くの管理のコストが分配される。「＋」の個数が多いということは、符号−ビット列格納部１０９により符号とビット列とを参照しているということであるので、符号とビット列との関連付けの格納に必要なディスクスペースなどの管理のコストを多く分配できるので、適正な管理のコストの分配が実現できる。
【００４４】
なお、図４に例示される表は、ファイル格納装置３００が、圧縮部１０８でファイルの圧縮を行なう都度、更新されるようになっていてもよい。すなわち、圧縮部１０８が、符号と関連付けられて管理されるビット列を検出するごとに、ユーザ識別情報とそのビット列とに対応する欄に「−」が格納されていれば、「＋」を格納し、「＋」が格納されていれば、「＋」のままにする。あるいは、管理コスト分配部３０１が動作するときに図４に例示される表を算出するようになっていてもよい。すなわち、各ユーザ識別情報に関連づけて圧縮ファイル格納部１１０に格納されているファイルを走査し、その中に含まれる符号を検出し、その符号と関連付けられているビット列に対応する欄に「＋」が格納されるように表を算出する。
【００４５】
（実施形態１：処理）
図５は、実施形態１に係るファイル格納装置の処理の流れを説明するフローチャートを例示する。このフローチャートでは、管理コスト分配部３０１の処理の流れが説明されている。ステップＳ５０１において、例えば、符号とビット列の関連付けての管理コストの総量を求める。あるいは、ＣＰＵの動作コストの総量を求めてもよい。ステップＳ５０２では、ユーザ識別情報ごとの符号参照数を求める。あるいは、圧縮の程度をユーザ識別情報ごとに求めてもよい。ステップＳ５０３では、管理のコストの総量を、ユーザ識別情報ごとに分配する。例えば、符号参照数により按分を行なう。
【００４６】
なお、図５で示される処理を、プログラムのモジュールとして実現することは、容易である。例えば、管理のコストの総量を求めて、メモリなどに一時的に記憶し、また、ユーザ識別情報ごとに符号参照数を図４に相当するデータ構造を生成して求めて、メモリなどに一時的に記憶し、メモリなどに記憶された管理のコストの総量を、符号参照数に応じて按分して、結果をメモリなどに記憶して、入出力インターフェースにアクセスを行ない、出力する。
【００４７】
（実施形態１：別の分配の技法）
また、管理のコストの分配の技法としては、ファイルの圧縮量に基づいて管理のコストを分配する技法がある。例えば、Ｕ１のユーザに関連付けられるファイルが受信部１０７により受信されたときのサイズの合計が５００キロバイトであり、圧縮部１０８での圧縮の後、３００キロバイトとなったとすると、圧縮量は、例えば、５００−３００＝２００キロバイトとなる。同様にＵ２のユーザに関連付けられるファイルが受信部１０７により受信されたときのサイズの合計が８００キロバイトであり、圧縮部１０８での圧縮の後、７００キロバイトとなったとすると、圧縮量は、１００キロバイトとなる。そこで、圧縮量の大きいユーザＵ１が圧縮の恩恵をうけていると考えて、Ｕ１に配分する管理のコストと、Ｕ２に配分する管理のコストとの比が例えば２００対１００となるように按分することが考えられる。
【００４８】
図６は、このような技法のために用いられる表を例示する。その表には、「圧縮前サイズ合計」と「圧縮後サイズ合計」という列があり、それぞれ、ユーザ識別情報ごとに、受信部１０７により受信されたときのファイルのサイズの合計と、圧縮ファイル格納部１１０に格納されるファイルのサイズの合計とが格納される。このような表は、受信部１０７によりファイルを受信し、圧縮部１０８により圧縮を行ない、圧縮ファイル格納部１１０にファイルを格納するごとに算出してもよいし、受信部１０７でファイルの受信のログをとっておき、圧縮ファイル格納部１１０に格納されているファイルのユーザ識別情報ごとのサイズの合計を求めることにより、管理コスト分配部３０１の動作ごとに求めるようになっていてもよい。
【００４９】
例えば、Ｕ１の圧縮前サイズ合計がＳａ１であり、圧縮後サイズ合計がＳｂ１であれば、（Ｓａ１−Ｓｂ１）によりＵ１の圧縮量を示す数値を算出し、同様に他のユーザ識別情報の圧縮量を示す数値を算出して、管理のコストの按分を行なう。
【００５０】
（実施形態１：主な効果）
ファイル格納装置では、管理のコストを、ファイルの圧縮に必要な資源（例えば、符号とビット列との関連付けの格納の領域サイズなど）の消費に応じてユーザに分配することが可能となり、適正な分配が実現できる。
【００５１】
（実施形態２）
実施形態２として、ファイルに対してビット列の符号への置換の数をビット列ごとにユーザ識別情報に関連付けて取得し、この数を用いて管理のコストをユーザに分配するファイル格納装置について説明する。
【００５２】
（実施形態２：構成）
図７は、実施形態２に係るファイル格納装置の機能ブロック図を例示する。ファイル格納装置７００は、管理コスト分配部３０１と、置換数取得部７０１とを有し、管理コスト分配部３０１は、置換数依存分配手段７０２を有している。すなわち、実施形態１に係るファイル格納装置が、置換数取得部をさらに有し、その管理コスト分配部が置換数依存分配手段を有することにより、本実施形態に係るファイル格納装置の構成が得られる。
【００５３】
「置換数取得部」７０１は、ユーザ識別情報と関連付けて、そのユーザ識別情報と関連付けられて入力されたファイルに対して置換されたビット列ごとに置換の数を取得する。例えば、Ｕ１というユーザ識別情報を持つユーザがアップロードしたファイルＦ１の中に、ｂ１というビット列が５回出現し、その５回のｂ１の出現が、ｃ１というｂ１と関連付けられた符号に置換された場合には、Ｕ１に対して、ｂ１については５回という数を取得する。このような取得は、圧縮部１０８により、ビット列がそれと関連付けられた符号に置換されるごとにカウントアップされて管理されている数を取得することにより行なわれる。あるいは、置換数取得部７０１が動作する都度、圧縮ファイル格納部１１０に格納されたファイルの内容を走査して、符号の数を求めて取得が行なわれてもよい。
【００５４】
なお、置換数取得部７０１が取得する置換の数が、圧縮部１０８により、ビット列がそれと関連付けられた符号に置換されるごとにカウントアップされて管理されている場合には、圧縮部１０８で圧縮された後、圧縮ファイル格納部１１０にファイルが格納された時間の長さを考慮して、置換の数が管理されていてもよい。例えば、時間の長さが長ければ、置換の数を実際の数より大きくするなどである。また、実際の置換の数が多い場合には、その置換の数が関連されている符号は、ファイルの圧縮に貢献していると言えるので、そのような貢献を勘案などして、実際の置換の数よりも小さい数を置換数取得部７０１が取得するようになっていてもよい。
【００５５】
図８は、置換数取得部７０１が取得する置換の数を表の形式とした例を示す。例えば、Ｕ２というユーザ識別情報を持つユーザがアップロードした全てのファイルの中にビット列ｂ１が３箇所、ビット列ｂ２が２箇所、ビット列ｂ３が１箇所、ビット列ｂ４が２箇所、ビット列ｂ５が０箇所あり、これらが、それぞれｃ１、ｃ２、ｃ３、ｃ４、ｃ５に置換されて圧縮ファイル格納部１１０に格納されているとする。このとき図８の表に、Ｕ２とｂ１、ｂ２、ｂ３、ｂ４、ｂ５とを対応付けて、Ｕ２の行に欄それぞれに３、２、１、２、０を格納する。他のユーザ識別情報Ｕ１、Ｕ３についても同様であるとする。
【００５６】
このとき、ビット列ｂ１の管理のコストがＥ１であるとすると、Ｕ２には、ｂ１の管理のコストとして、Ｅ１×（３／５）、Ｕ３には、Ｅ１×（２／５）を分配する。同様に、ビット列ｂ２の管理のコストがＥ２であるとすると、ｂ２の管理のコストとして、Ｕ１には、Ｅ２×（１／４）、Ｕ２には、Ｅ２×（２／４）、Ｕ３には、Ｅ３×（１／４）を分配する。このようにビット列ごとに管理のコストを分配して、ユーザ識別情報ごとに管理のコストの総和を求める。あるいは、最初に管理のコストの総量を求めておいて、ユーザ識別情報ごとのファイルにおける各ビット列の出現回数の和を求め、この和の値に応じて管理のコストの総量を分配してもよい。また、符号に置換されないビット列がある場合には、その管理のコストも加算してもよい。
【００５７】
置換数取得部７０１が取得する置換の数が、実際の置換の数を変化させたものである場合には、図８の表が、実際の置換の数を格納し、図８の表を読み取り、加重、加減などの処理である勘案の処理などして変化させた結果の置換の数を置換数取得部７０１が取得するようになっていてもよい。この場合には、図８の表は、例えば、圧縮部１０８により管理される。また、圧縮ファイル格納部１１０に格納されているファイルが削除された場合には、削除前に、削除されるファイルに含まれる符号の数に応じて、圧縮ファイル格納部１１０などにより、図８の表に格納されている数を適宜減少させる処理が行なわれるようになっていてもよい。
【００５８】
「置換数依存分配手段」７０２は、置換数取得部７０１で取得された置換の数を用いて前記管理のコストを分配する。例えば、ユーザ識別情報ごとに、置換の数の合計を求めて、その合計で按分をして管理のコストを分配する。あるいは、ビット列のビット数（あるいはバイト数）を置換の数に掛けて合計をユーザ識別情報ごとに求めて、按分を行なってもよい。例えば、ｂ１が１００バイト、ｂ２が１２０バイト、ｂ３が１５０バイト、ｂ４が２００バイトであれば、Ｕ１について、１００＊５＋１２０＊１０＋１５０＊１８＋２００＊３を求め、同様に他のユーザ識別情報についても求めて、按分を行なう。
【００５９】
（実施形態２：主な効果）
本実施形態では、置換の数を用いることにより、管理のコストをより正確にユーザ識別情報ごとに分配することができる。
【００６０】
（実施形態３）
実施形態３として、ファイルの先頭から開始するビット列が、符号と関連付けられた一または複数のビット列と一致するかどうかを判断して、一致すると判断された部分以降のビット列を新たな符号と関連付けて保持するファイル格納装置について説明する。
【００６１】
（実施形態３：構成）
図９は、実施形態３に係るファイル格納装置の機能ブロック図を例示する。ファイル格納装置９００は、管理コスト分配部３０１と、判断部９０１と、新符号ビット列保持部９０２とを有する。また、置換数取得部をさらに有し、管理コスト分配部３０１が置換数依存分配手段を有していてもよい。したがって、本実施形態に係るファイル格納装置は、実施形態１または２に係るファイル格納装置が、判断部９０１と、新符号ビット列保持部９０２とを有する構成となっている。
【００６２】
「判断部」９０１は、ファイルの先頭から開始するビット列が、符号と関連付けられた一又は複数のビット列と一致するか判断する。ここでいうファイルとは、受信部１０７で受信されたファイルを意味し、圧縮部１０８で圧縮される前のファイルである。また、ここでいうファイルは、判断部９０１の判断処理と圧縮部１０８の圧縮処理を再帰的に繰り返す場合において、判断部９０１の判断の対象となる圧縮途中のファイルのことも意味する場合もある。判断部９０１は、そのようなファイルの内容の先頭からビット列を読み出し、符号−ビット列格納部１０９に格納されたビット列と順にそれぞれのビット列の先頭から比較を行ない、どの程度一致するかを判断する。「どの程度一致するか」とは、（１）全く一致しない、（２）ビット列の全体がファイルの途中までと一致するものがある、（３）ビット列の途中までがファイルの途中までと一致するものがある、（４）ビット列の全体がファイルの全体と一致するものがある、（５）ビット列の途中までがファイルの全体と一致するものがあるか、のいずれかに該当するかを判断することである。
【００６３】
（１）の例としては、ビット列が「ＸＹ」であり、ファイルの内容が「ＹＺ」である場合がある。（２）の例としては、ビット列が「ＡＢ」であり、ファイルの内容が「ＡＢＣ」である場合がある。（３）の例としては、ビット列が「ＡＢＤ」でありファイルの内容が「ＡＢＣ」である場合がある。（４）の例としては、ビット列が「ＡＢ」でありファイルの内容が「ＡＢ」である場合がある。（５）の例としては、ビット列が「ＡＢＤ」でありファイルの内容が「ＡＢ」である場合がある。
【００６４】
なお、一致するかの判断は、ビット単位に行なわれる必要はなく、連続する所定のビットを単位として、例えば、８ビット、すなわち１バイトを比較の単位として比較してもよい。あるいは、１０２４バイト、すなわち１キロバイトを比較の単位としてもよいし、記憶装置がブロックを単位として記憶するブロックデバイスであれば、記憶の単位であるブロックの大きさを比較の単位としてもよい。
【００６５】
「新符号ビット列保持部」９０２は、一致すると判断された部分以降のビット列を新たな符号と関連付けて保持する。「関連付けて保持する」とは、符号−ビット列格納部１０９に、符号とビット列の関連付けを格納することである。上記の（２）、（４）の場合には、新符号ビット列保持部９０２は何もする必要がない。なぜなら、新たに格納するファイルのビット列が、すでに格納された符号により表現可能であるからである。ただし、（２）の場合には、圧縮ファイル格納部１１０が符号のみを格納するようになっているときは、ファイルの内容のうち、符号−ビット列格納部１０９に格納されたビット列に一致する部分をそのビット列に関連付けられた符号により置換して得られるファイルの内容を、新たな符号と関連付けることをしてもよい。例えば、ビット列が「ＡＢ」であり、このビット列に関連付けられた符号がｃ１であり、ファイルの内容が「ＡＢＣ」であれば、「ＡＢＣ」の「ＡＢ」をｃ１により置換した「（ｃ１）Ｃ」を得て（括弧は符号の存在を示す情報とする）、この「（ｃ１）Ｃ」を新たな符号ｃ２と関連付けて符号−ビット列格納部１０９に格納して、符号ｃ２を圧縮ファイル格納部１１０に格納することをしてもよい。あるいは、得られた「（ｃ１）Ｃ」を改めて圧縮対象のファイルとみなし、再度、判断部による判断の対象とすることにより、再帰的に圧縮処理を繰りかえてしてもよい。なお、本明細書において「ビット列」という場合には、符号により置換された後のものを意味する場合もある。したがって、「（ｃ１）Ｃ」のように符号を含むものも本明細書で意味されるビット列や「ファイル」となる。
【００６６】
（１）の場合には、新符号ビット列格納部９０２は何もする必要がない。なぜなら、新たに格納するファイルのビット列は、すでに格納された符号によって表現することが不可能であるからである。ただし、圧縮ファイル格納部１１０が符号のみを格納するようになっているときは、新符号ビット列保持部９０２は、ファイルの内容の全体のビット列を新たな符号と関連づけて保持し、圧縮ファイル格納部１１０は、その新たな符号を格納するようになっていてもよい。また、再帰的に圧縮処理が行なわれる場合の中間段階においては、ファイルとビット列との間で先頭の符号のみが一致する場合は、判断部において「検索結果なし」と判断し、例外的に（１）の場合に含まれるものとする。例えば、再帰的処理の中間段階において、ビット列の中に「（ｃ１）ＸＹ」が存在し、ファイルの内容が「（ｃ１）ＹＺ」である場合には、（ｃ１）の部分が同一であるにも関わらず、途中まで一致するとは判断せず、このビット列とは全く一致しないと判断することにする。
【００６７】
（３）の場合には、符号−ビット列格納部１０９に格納されているビット列の途中までとファイルの途中までのビット列と一致するビット列を新たな符号と関連付けて符号−ビット列格納部１０９に格納し、その新たな符号により、符号−ビット列格納部１０９に格納されているビット列の途中までと、ファイルの内容の途中までを置換する。例えば、符号−ビット列格納部１０９に格納されているビット列が「ＡＢＤ」であり、ファイルの内容が「ＡＢＣ」である場合には、「ＡＢ」を新たな符号ｃ３と関連づけて符号−ビット列格納部１０９に格納し、「ＡＢＤ」を「（ｃ３）Ｄ」に置換し、ファイルの内容を「（ｃ３）Ｃ」とする。
【００６８】
（５）の場合には、ファイルの内容を新たな符号と関連づけて符号−ビット列格納部１０９に格納する。例えば、符号−ビット列格納部１０９に格納されたビット列が「ＡＢＤ」であり、ファイルの内容が「ＡＢ」であれば、「ＡＢ」を新たな符号ｃ４と関連付けて符号−ビット列格納部１０９に格納する。このとき、符号−ビット列格納部１０９に格納されたビット列「ＡＢＤ」を「（ｃ４）Ｄ」として格納しなおしてもよい。
【００６９】
（実施形態３：処理の流れ）
図１０は、本実施形態におけるファイル格納装置における主に判断部９０１と新符号ビット列保持部９０２との処理の流れを説明するフローチャートを例示する。
【００７０】
ステップＳ１００１において、符号−ビット列格納部１０９に符号と関連付けられて格納されているビット列のうち、その先頭から全体または一部が、受信したファイルの先頭からの内容と一致するビット列を検索することを、判断部９０１により、実行する。すなわち、ある一つの符号に関連付けられたビット列のうち受信したファイルの先頭から開始するビット列と全体または一部が一致するビット列の有無を確認する。
【００７１】
ステップＳ１００２においては、ステップＳ１００１の結果である検索結果の有無を判断する。もし、検索結果がなければ、上述の（１）の場合であるので、ステップＳ１００３とステップＳ１００４の処理を行なう。すなわち、ステップＳ１００３においては、ファイルの内容の全体を、新たな符号と関連付けて、符号−ビット列格納部１０９に格納する。そして、ステップＳ１００４においては、その新たな符号（ステップＳ１００３でファイルの内容の全体と関連づけて符号−ビット列格納部１０９に格納された符号）をファイルの内容として、圧縮ファイル格納部１１０に格納する。
【００７２】
もし、ステップＳ１００１の結果である検索結果が存在すれば、ステップＳ１００５へ処理を移行させる。ステップＳ１００５では、変数Ｂに、Ｓ１００１で検索されたビット列を代入し、変数Ｃに、変数Ｂに代入されたビット列と関連づけられた符号を代入する。この時点では、上述の（２）から（５）の場合があるので、以下、ステップＳ１００６、Ｓ１００８、Ｓ１０１２にて場合分けを行なう。なお、検索結果が複数ある場合には、ビット列が最長のものを選んで代入するのが好ましい。また、他の基準を用いて検索結果のうちの一つを選ぶようになっていてもよい。あるいは、複数のビット列が共通の先頭部分を持つことがないように、すなわち、先頭の共通部分は必ず別のビット列に関連付けられた符号と置換されているように保つことにより、検索結果が必ず一つとなるように実装してもよい。
【００７３】
ステップＳ１００６において、変数Ｂに代入されたビット列の全体がファイルの内容の途中までと一致するかどうかを判断する。もし、その結果がＹＥＳであるならば、上述の（２）の場合であるので、ステップＳ１００７へ処理を移行させる。ステップＳ１００６の判断の結果がＮＯならば、上述の（３）から（５）の場合であるので、ステップＳ１００８へ処理を移行させる。
【００７４】
ステップＳ１００７においては、変数Ｂに代入されたビット列と一致するファイルの先頭からの内容を、変数Ｃに代入された符号により置換する。このような符号への置換により圧縮が行なわれる。その後、ステップＳ１００１へ処理を戻し、新たにファイルと考えるビット列、すなわち、置換された符号とそれに続くビット列が、符号−ビット列格納部１０９に格納されたビット列と一致するかどうかの判断が行なわれる。
【００７５】
ステップＳ１００８においては、変数Ｂに代入されたビット列の途中までと、ファイルの内容と途中までとが一致するかどうかを判断する。もし、この判断がＹＥＳならば、上述の（３）の場合であり、ステップＳ１００９へ処理を移行させ、ＮＯならば、上述の（４）または（５）の場合であり、ステップＳ１０１１へ処理を移行させる。
【００７６】
ステップＳ１００９では、変数Ｂに代入されたビット列の途中までと、ファイルの内容と途中までとの一致する部分を、新たな符号と関連付けて符号−ビット列格納部に格納する。例えば、変数Ｂに代入されたビット列が「ＡＢＤ」であり、ファイルの内容が「ＡＢＣ」であれば、「ＡＢ」を新たな符号と関連付ける。
【００７７】
ステップＳ１０１０では、ファイルの内容と途中まで一致する、変数Ｂに代入されたビット列の部分を、その新たな符号により置換して符号−ビット列格納部に格納する。例えば、「ＡＢＤ」の「ＡＢ」の部分を新たな符号で置換する。
【００７８】
ステップＳ１０１１では、ファイルの先頭からの部分で、その新たな符号と関連付けられたビット列と一致する部分を、その新たな符号により置換する。例えば、「ＡＢＣ」の「ＡＢ」を新たな符号と関連付ける。その後、ステップＳ１００１へ戻る。ただし、ファイルには新たな符号が含まれているので、ステップＳ１００１の検索結果は無いので、ただちにステップＳ１００３へ処理を移行してもよい。
【００７９】
ステップＳ１０１２では、ファイルの内容全体と、変数Ｂに代入されたビット列全体とが一致するかどうかを判断する。もしこの判断がＹＥＳであれば、上述の（４）の場合であり、ステップＳ１０１３へ処理を移行させる。もしＮＯであれば、上述の（５）の場合であり、ステップＳ１０１４へ処理を移行させる。
【００８０】
ステップＳ１０１３では、変数Ｃに代入された符号を、ファイルの内容として圧縮ファイル格納部１１０に格納する。
【００８１】
ステップＳ１０１４では、ファイルの内容全体を新たな符号と関連付けて符号−ビット列格納部１０９に格納する。
【００８２】
ステップＳ１０１５では、変数Ｂに格納されたビット列の先頭からの部分で、ファイルの内容と一致した部分を、その新たな符号により置換して符号−ビット列格納部に格納する。例えば、変数Ｂに「ＡＢＤ」が代入されており、ファイルの内容が「ＡＢ」であれば、「ＡＢ」に新たな符号を関連づけ、「ＡＢＤ」の「ＡＢ」の部分をその新たな符号により置換する。
【００８３】
ステップＳ１０１６では、その新たな符号をファイルの内容として、圧縮ファイル格納部１１０に格納する。
【００８４】
（実施形態３：処理の具体例）
図１１は、実施形態３に係るファイル格納装置の処理の具体例を説明する。まず、符号−ビット列格納部１０９には何も格納されていない状態で、ユーザＵ３が、"ＡＡＡＣＣＣ"いうビット列からなるファイル（以後、「"ＡＡＡＣＣＣ"からなるファイル」などと略す）をアップロードしたとする。この場合には、符号−ビット列格納部１０９には何も格納されていないので、ステップＳ１００２で「ＮＯ」へ分岐し、ステップＳ１００３、Ｓ１００４の処理が行なわれる。すなわち、ＡＡＡＣＣＣ全体が新たな符号ｃ１と関連付けられて、その符号からなるファイルが、圧縮ファイル格納部１１０に格納される。圧縮ファイル格納部１１０に格納される場合には、アップロードをしたユーザの識別情報であるＵ３と関連付けられる。この時の符号−ビット列格納部１０９と圧縮ファイル格納部１１０との状態を図１１（１）の表として示す。すなわち、ビット列"ＡＡＡＣＣＣ"が符号ｃ１と関連付けられて符号−ビット列格納部１０９に格納される。また、ユーザ識別情報Ｕ３と符号ｃ１とが関連付けられて圧縮ファイル格納部１１０に格納される。また、このとき、ビット列"ＡＡＡＣＣＣ"の置換数は１となる。
【００８５】
次に、ユーザＵ２が、"ＡＡＡＡＡＡ"からなるファイルをアップロードしたとする。このとき、"ＡＡＡＡＡＡ"からなるファイルの先頭部分と、すでに符号ｃ１と関連付けられているビット列"ＡＡＡＣＣＣ"の「ＡＡＡ」までが一致する。したがって、ステップＳ１００２では「ＹＥＳ」へ分岐し、ステップＳ１００６では「ＮＯ」へ分岐し、ステップＳ１００８では「ＹＥＳ」へ分岐し、ステップＳ１００９、Ｓ１０１０、Ｓ１０１１の処理が行なわれる。この結果、"ＡＡＡ"というビット列が新たな符号ｃ２と関連付けて保持され、ｃ１に関連付けられているビット列"ＡＡＡＣＣＣ"は、"（ｃ２）ＣＣＣ"になる。次に、ファイルの内容である"ＡＡＡＡＡＡ"は、"（ｃ２）ＡＡＡ"となる。その後、ステップＳ１００１へ戻って処理が行なわれ、"（ｃ２）ＡＡＡ"に新たな符号ｃ３が関連付けられる。結果として、図１１（２）のようになる。
【００８６】
次にユーザＵ３が、"ＢＢＢＢＢＢＢ"からなるファイルをアップロードしたとすると、既に符号−ビット列格納部１０９に格納されたどのビット列とも一致しないので、ステップＳ１００３、Ｓ１００４の処理が行なわれ、ビット列"ＢＢＢＢＢＢＢ"が新たな符号ｃ４と関連付けて保持され、図１１（３）に示す状態となる。
【００８７】
次に、ユーザＵ１が、"ＡＡＡ"からなるファイルをアップロードしたとすると、既にｃ２と関連付けて格納されているビット列"ＡＡＡ"と一致するので、ｃ２に置換される。結果として、図１１（４）に示す状態となる。
【００８８】
次にユーザＵ２が"ＢＢＢＢ"からなるファイルをアップロードしたとすると、既に格納されているビット列"ＢＢＢＢＢＢＢ"と、最初の四つのＢが一致する。これにより、ステップＳ１００６では、「ＮＯ」へ分岐し、Ｓ１００８では、「ＮＯ」へ分岐し、Ｓ１０１２では、「ＮＯ」へ分岐する。ステップＳ１０１４では、ファイルの内容"ＢＢＢＢ"が新たな符号ｃ５と関連付けられ、ステップＳ１０１５では、ｃ４と関連付けられたビット列が"（ｃ５）ＢＢＢ"に置換され、ステップＳ１０１６では、ｃ５が圧縮ファイル格納部１１０に格納される。結果として、図１１（５）に示す状態となる。
【００８９】
次にユーザＵ２が"ＢＢＡＡＡ"からなるファイルをアップロードしたとすると、そのファイルの先頭から最初の二つのＢのビット列が、ｃ５に関連付けられたビット列の最初の二つのＢＢと一致するので、ステップＳ１００９の処理により、新たな符号ｃ６がＢＢというビット列に関連付けられ、ステップＳ１０１０の処理によりｃ５が"（ｃ６）ＢＢ"と関連付けられる。ステップＳ１０１１の処理により、ファイルの内容が"（ｃ６）ＡＡＡ"となり、ステップＳ１００１に処理が戻った後、ステップＳ１００３、Ｓ１００４の処理により、新たな符号ｃ７と"（ｃ６）ＡＡＡ"とが関連付けられる。このとき、符号ｃ６に関連付けられたビット列"ＢＢ"の置換数は３となる。なぜならば、図１１（５）の状態のときに符号ｃ５に関連付けられたビット列"ＢＢＢＢ"の置換数２に対して、新たにアップロードされたファイルの先頭部分の置換に対応する１を加算して３が算出されたためである。この「３」という値は、言い換えれば、別々にアップロードされた３つのファイル（(3)"ＢＢＢＢＢＢＢ"、(5)"ＢＢＢＢ"、(6)"ＢＢＡＡＡ"）の先頭部分"ＢＢ"が、このビット列として１つにまとめられて格納されていることを表わしている。結果として、図１１（６）の状態となる。
【００９０】
なお、判断部９０１、新符号ビット列保持部９０２を用いて、上記で説明した処理を行なう場合には、受信部１０７で受信したファイルのビットあるいはバイトの並びの順序を逆にしてから、上記で説明した処理を行なってもよい。多くのファイルは、ヘッダ部が先に来て、ボディ部が後に来るように分かれる場合が多い。このような場合には、ヘッダは異なるが、ボディ部が同じであることが多いからである（例えば、スパムメールなどが典型的な例である）。このような場合には、先にボディ部から処理を行なうようにするために、ファイルのビットあるいはバイトの並びの順序を逆にするようにしてもよい。
【００９１】
（実施形態３：主な効果）
本実施形態により、管理するべきビット列を自動的に収集することが可能となる。
【００９２】
（実施形態４）
実施形態４として、ファイルの予め定められた構造に従って、ファイルを断片に分別し、それぞれの断片をファイルとして圧縮の対象とするファイル格納装置について説明する。
【００９３】
（実施形態４：構成）
図１２は、実施形態４に係るファイル格納装置の機能ブロック図を例示する。ファイル格納装置１２００は、管理コスト分配部３０１と、分別部１２０１とを有する。なお、ファイル格納装置１２００は、置換数取得部をさらに有して管理コスト分配部３０１が置換数依存分配手段を有していてもよいし、判断部及び新符号ビット列保持部を有していてもよい。したがって、本実施形態に係るファイル格納装置は、実施形態１から３のいずれかに係るファイル格納装置が分別部を有する構成となっている。
【００９４】
「分別部」１２０１は、ファイルの予め定められた構造に従って断片に分別する部である。例えば、一つの電子メールを一つのファイルとした場合、ヘッダ部とボディ部とからなる構造を持つことになるが、この場合、分別部１２０１は、ヘッダ部からなる断片とボディ部からなる断片に分別する。その他、特定の文法に従って記述されるプログラミング言語などの場合にも、文法の構造に従って、いくつかの断片に分別することができる。また、いわゆるＪＩＳコードを用いた文章では、漢字かな混じりの部分の開始と終了とが含まれるので、その開始と終了とを手がかりにして、漢字かな混じりの部分と、そうではないアスキー文字からなる部分に分別が可能である。
【００９５】
図１３は、予め定められた構造を持つファイルを例示する。（Ａ）、（Ｂ）として、「＜ＳＥＰＡＲＡＴＯＲ＞」により区分される構造を有するファイルを示している。最初の「＜ＳＥＰＡＲＡＴＯＲ＞」より前の部分をヘッダ部、「＜ＳＥＰＡＲＡＴＯＲ＞」が複数ある場合の最後のものより後の部分をフッタ部と呼び、残りの部分をボディ部と呼ぶことにする。すなわち、（Ａ）では、「ＡＢＣ」がヘッダ部となり、「ＧＨＩＪＫＬＭＮＯＰ」がボディ部となり、フッタ部はない。また、（Ｂ）では、「ＤＥＦ」がヘッダ部となり、「ＧＨＩＪＫＬＭＮＯＰ」がボディ部となり、「ＸＹＺ」がフッタ部となる。したがって（Ａ）と（Ｂ）とではヘッダ部、フッタ部は異なっているが、ボディ部は一致している。そこで、ヘッダ部、ボディ部、もしあればフッタ部から構成される２つもしくは３つの部分（あるいは「断片」ともいう）に分別し、それぞれの部分ごとに、例えば、実施形態３で説明した処理を行なうと、高い圧縮率を得ることが可能となる。
【００９６】
したがって、本実施形態では、分別部１２０１により分別された断片を独立のファイルとして圧縮の対象とするものである。
【００９７】
（実施形態４：処理の流れ）
よって、本実施形態において、ファイル格納装置は、受信部１０７で受信したファイルを、構文解析などを行ない、断片に分別し、それぞれの断片ごとに圧縮部１０８での圧縮を行ない、その結果を関連づけて、圧縮ファイル格納部１１０に格納する。「その結果を関連付けて」とは、複数の断片に分別された場合において断片ごとに圧縮された結果を一つのファイルとして伸長部１１２により伸長して復元が可能となるようにすることをいう。
【００９８】
（実施形態４：主な効果）
本実施形態では、ファイルの予め定められた構造に従って断片に分別し、断片ごとに圧縮を行なうので、高い圧縮率を得ることが可能となる。
【００９９】
（実施形態５）
実施形態５として、特定のビット列の管理のコストの一部または全てを特定のユーザ識別情報に分配するファイル格納装置について説明する。
【０１００】
（実施形態５：構成）
図１４は、実施形態５に係るファイル格納装置の機能ブロック図を例示する。ファイル格納装置１４００は、管理コスト分配部３０１と、特定ビット列判断部１４０１とを有し、管理コスト分配部３０１は、特定ユーザ分配手段１４０２を有する。なお、ファイル格納装置１４００は、置換数取得部をさらに有して管理コスト分配部３０１が置換数依存分配手段を有していてもよいし、判断部及び新符号ビット列保持部を有していてもよいし、分別部を有していてもよい。したがって、本実施形態に係るファイル格納装置は、実施形態１から４のいずれか一に係るファイル格納装置が、特定ビット列判断部を有し、その管理コスト分配部が特定ユーザ分配手段を有する構成となっている。
【０１０１】
「特定ビット列判断部」１４０１は、特定のビット列を特定のユーザ識別情報と関連付けて保持されている状況下で、ファイル格納装置１４００において、その特定のビット列を用いて圧縮を行なったかどうかを判断する。例えば、符号−ビット列格納部１０９に符号と関連付けて格納されているビット列の全てまたは一部が、特定のユーザ識別情報と関連づけられており、そのような特定のユーザ識別情報と関連づけられたビット列が符号に置換されたかどうかを判断する。
【０１０２】
図１５は、ビット列のうちｂ１がユーザ識別情報Ｕ１と関連づけられ、ビット列ｂ５がユーザ識別情報Ｕ２と関連付けられ、ビット列ｂ４がユーザ識別情報Ｕ３と関連付けられていることを示す表を例示する。このような特定のビット列とユーザ識別情報との関連付けを行なう目的は、特定のビット列についての管理のコストは、特定のビット列に関連付けられたユーザ識別情報に割り振ることである。例えば、ビット列が、商品名を示す場合には、その商品名を含むファイルのうち、商品名の部分の格納コストについては、特定のビット列に関連付けられたユーザ識別情報に課金することを目的としている。これにより、特定の商品名の普及を図り、宣伝広告の効果が生ずる。また、ビット列が特定の思想を表わす文字列であれば、その思想の普及を図ることが可能となる。
【０１０３】
「特定ユーザ分配手段」１４０２は、特定ビット列判断部１４０１での判断結果が、「用いた」との判断結果である場合には、分配される管理のコストの一部または全てを、特定ビット列と関連付けられたユーザ識別情報で識別されるユーザに対して分配する。
【０１０４】
例えば、ユーザ識別情報Ｕ１に対して、１５００単位の管理のコストが管理コスト分配部３０１により第一の段階として分配された場合、そのうち、ビット列ｂ４についての管理のコストが５０単位であったとすると、５０単位の全てを、ｂ４に関連付けられたユーザ識別情報であるＵ３に対して分配するようにし、Ｕ１に対しては残りの１４５０単位を第二の段階として分配する。あるいは、５０単位の一部である２５単位をＵ３に対して分配し、Ｕ１に対しては、１４７５単位を分配してもよい。あるいは、５０単位の一倍を越える単位をＵ３に対して分配し、例えば、１．６倍である８０単位を算出し、５０単位を超える３０単位をＵ１に対して貨幣価値などに変換して還元してもよい。このような還元を行うことにより、Ｕ３以外のユーザ識別情報で識別されるユーザが特定の言葉、標語、スローガン、思想の内容、商品名などを使用するインセンティブを与えることができる。
【０１０５】
（実施形態５：主な効果）
本実施形態によれば、特定のビット列の管理のコストを特定のユーザ識別情報に分配することができるので、特手のユーザが普及を望む商品名の知名度などを上げることができる。また、特定の思想の単語のビット列を特定のユーザ識別情報に関連付けて、それぞれのユーザ識別情報に対して算出される料金の度合いを調べることにより、ファイル格納装置のユーザの思想傾向などを知ることができたり、学校における定期試験などにより記述された論文を格納することにより、論文をまとめて採点したりすることもできる。
【０１０６】
（実施形態６）
実施形態６として、分配される管理のコストに基づいてファイル格納の料金を算出するファイル格納装置について説明する。
【０１０７】
（実施形態６：構成）
図１６は、実施形態６に係るファイル格納装置の機能ブロック図を例示する。ファイル格納装置１６００は、管理コスト分配部３０１と、料金算出部１６０１とを有する。なお、ファイル格納装置１６００は、置換数取得部をさらに有して管理コスト分配部３０１が置換数依存分配手段を有していてもよいし、判断部及び新符号ビット列保持部していてもよいし、分別部を有していてもよい。また、特定ビット列判断部を有し、管理コスト分配部が特定ユーザ分配手段を有していてもよい。したがって、本実施形態に係るファイル格納装置は、実施形態１から５のいずれかに係るファイル格納装置が料金算出部１４０１を有する構成となっている。
【０１０８】
「料金算出部」１６０１は、管理コスト分配部３０１で分配された管理のコストに基づいて、ファイル格納の料金を算出する。「基づいて」とは、ユーザ識別情報ごとに分配された管理のコストを参照して、一定の規則を用いて料金を算出することをいう。例えば、管理のコストが、符号−ビット列格納部１０９により格納される符号とビット列との関連付けの格納に必要なディスクスペースであれば、ユーザ識別情報ごとに分配されたディスクスペースと、単位ディスクスペースあたりの料金との積を求めることにより、料金を算出する。また、管理のコストと料金との対応表があり、その表を管理のコストにより参照して料金を算出するようになっていてもよい。また、所定の料金以上の料金であれば、割引などを行なってもよい。また、一定額の料金に満たない場合には、その一定額を最低の料金として算出してもよい。また、料金が所定額を超える場合には、その所定額を料金として算出して、定額制のようにしてもよい。
【０１０９】
（実施形態６：料金算出の処理の例）
料金算出部による料金の算出は、管理コスト分配部３０１による管理のコスト分配が行なわれる都度行なわれるようになっていてもよい。例えば、毎月の最終日に管理のコスト分配が行なわれるようになっていれば、毎月の最終日に料金の算出を行なう。また、毎日定まった時間に管理コスト分配部３０１による管理のコスト分配が行なわれる場合には、ユーザ識別情報ごとに、分配された管理のコストの月間の移動平均値などの平均値を求めて、その平均値に基づいて、料金算出部１６０１が料金を算出するようになっていてもよい。
【０１１０】
（実施形態６：主な効果）
本実施形態では、管理のコストの分配に応じて料金を算出するので、サービスの提供者は、ファイルの圧縮格納に必要な対価をユーザ識別情報に分配して得ることができる。
【図面の簡単な説明】
【０１１１】
【図１】ファイル格納装置の前提となる構成を示す機能ブロック図
【図２】ユーザの識別情報であるユーザ識別情報と、ファイルと、ビット列と、符号との関係を例示する図
【図３】実施形態１に係るファイル格納装置の機能ブロック図
【図４】管理のコストを分配するために参照される表の一例図
【図５】実施形態１に係るファイル格納装置の処理のフローチャート
【図６】ファイルの圧縮の程度に基づいて管理のコスト分配するために用いられる表の一例図
【図７】実施形態２に係るファイル格納装置の機能ブロック図
【図８】置換数取得部７０１が取得する置換の数を示す表の一例図
【図９】実施形態３に係るファイル格納装置の機能ブロック図
【図１０】実施形態３に係るファイル格納装置の処理のフローチャート
【図１１】実施形態３に係るファイル格納装置の処理の具体例を示す図
【図１２】実施形態４に係るファイル格納装置の機能ブロック図
【図１３】予め定められたファイルの構造の一例図
【図１４】実施形態５に係るファイル格納装置の機能ブロック図
【図１５】ビット列とユーザ識別情報との関連付けを示す表の一例図
【図１６】実施形態６に係るファイル格納装置の機能ブロック図
【符号の説明】
【０１１２】
３００  ファイル格納装置
３０１  管理コスト分配部
【図１】
2007219882.tif 000003
【図２】
2007219882.tif 000004
【図３】
2007219882.tif 000005
【図４】
2007219882.tif 000006
【図５】
2007219882.tif 000007
【図６】
2007219882.tif 000008
【図７】
2007219882.tif 000009
【図８】
2007219882.tif 000010
【図９】
2007219882.tif 000011
【図１０】
2007219882.tif 000012
【図１１】
2007219882.tif 000013
【図１２】
2007219882.tif 000014
【図１３】
2007219882.tif 000015
【図１４】
2007219882.tif 000016
【図１５】
2007219882.tif 000017
【図１６】
2007219882.tif 000018