(57)【特許請求の範囲】
【請求項１】
システム内に存在する複数の第１のストレージの数を記憶する第１の記憶部と、
システム内に存在しない複数の第２のストレージの数を記憶する第２の記憶部と、
前記第１のストレージの数に基づき、前記複数の第１のストレージを階層化する際の第１階層数を計算する、第１の検索レベル決定部と、
前記第２のストレージの数に基づき、前記複数の第２のストレージを階層化する際の第２階層数を計算する、第２の検索レベル決定部と、
前記第１階層数により定まる階層ごとに隣接する第１のストレージの識別子に関する情報を含む隣接ストレージ情報を生成する、隣接ストレージ決定部と、
前記第２階層数により定まる階層ごとに、前記第２のストレージの識別子が前記第１のストレージの識別子に隣接する第２のストレージを記憶する第１のストレージに関する情報を含む隣接非存在ストレージ情報を生成する、隣接非存在ストレージ決定部と、
前記第１のストレージに関する、第１の識別子を組織化した第１の要素ベクトルと、前記第２のストレージに関する、第２の識別子を組織化した第２の要素ベクトルと、から生成された情報に基づいてオブジェクトの配置先を探査する配置先探査部と、
前記第１及び第２の識別子に基づいて、オブジェクトの配置先を決定する配置先決定部と、を備え、
前記配置先決定部は、オブジェクトの配置先として、前記第２のストレージが指定された場合には、オブジェクトの配置先の指定と、オブジェクトの配置先の存在確認と、を繰り返すことで、前記第１のストレージを指定し、
前記配置先決定部は、オブジェクトの配置先として指定された数の配置先を指定すると共に、複数の前記配置先にオブジェクトを配置し、
前記配置先探査部は、前記第１の識別子に関する情報の一部と、前記第２の識別子に関する情報の一部と、を用いてオブジェクトの配置先を探査し、
前記配置先探査部は、
アクセス命令により定まるオブジェクトが自装置に記憶されていない場合に、前記アクセス命令の転送先を、前記隣接ストレージ情報及び前記隣接非存在ストレージ情報に基づいて決定する、ことを特徴とするオブジェクト配置装置。
【請求項２】
前記複数の第１のストレージそれぞれの識別子のハッシュ値を計算し、前記計算されたハッシュ値に対し、前記第１階層数に相当する桁数を持つように剰余計算を行い、前記第１のストレージそれぞれに対応する前記第１の要素ベクトルを決定する、第１の要素ベクトル決定部と、
前記複数の第２のストレージそれぞれの識別子のハッシュ値を計算し、前記計算されたハッシュ値に対し、前記第２階層数に相当する桁数を持つように剰余計算を行い、前記第２のストレージそれぞれに対応する前記第２の要素ベクトルを決定する、第２の要素ベクトル決定部と、
をさらに備え、
前記隣接ストレージ決定部は、前記第１の要素ベクトルを用いて前記隣接ストレージ情報を生成し、
前記隣接非存在ストレージ決定部は、前記第２の要素ベクトルを用いて前記隣接非存在ストレージ情報を生成する、請求項１のオブジェクト配置装置。
【請求項３】
前記配置先探査部は、
前記オブジェクトから求まるストレージの識別子が前記隣接非存在ストレージ情報に含まれる場合には、前記アクセス命令により定まるオブジェクトを記憶するストレージはシステムに存在しないことを確定する、請求項１又は２のオブジェクト配置装置。
【請求項４】
前記配置先探査部は、
前記オブジェクトから求まるストレージの識別子が前記隣接非存在ストレージ情報に含まれない場合には、前記隣接ストレージ情報に従い、自装置に隣接する前記第１のストレージに前記アクセス命令を転送する、請求項３のオブジェクト配置装置。
【請求項５】
前記配置先探索部は、
前記隣接ストレージ情報の各階層において、一方の側で隣接する前記第１のストレージの存在を確認し、前記一方の側に隣接する第１のストレージが存在する場合には、前記一方の側に隣接する第１のストレージに前記アクセス命令を転送し、
前記一方の側に隣接する第１のストレージが存在しない場合には、前記隣接ストレージ情報の下層において前記一方の側に存在する第１のストレージの存在確認を行う、請求項４のオブジェクト配置装置。
【請求項６】
システム内に存在する複数の第１のストレージの数を記憶する工程と、
システム内に存在しない複数の第２のストレージの数を記憶する工程と、
前記第１のストレージの数に基づき、前記複数の第１のストレージを階層化する際の第１階層数を計算する工程と、
前記第２のストレージの数に基づき、前記複数の第２のストレージを階層化する際の第２階層数を計算する工程と、
前記第１階層数により定まる階層ごとに隣接する第１のストレージの識別子に関する情報を含む隣接ストレージ情報を生成する工程と、
前記第２階層数により定まる階層ごとに、前記第２のストレージの識別子が前記第１のストレージの識別子に隣接する第２のストレージを記憶する第１のストレージに関する情報を含む隣接非存在ストレージ情報を生成する工程と、
前記第１のストレージに関する、第１の識別子を組織化した第１の要素ベクトルを生成する工程と、
前記第２のストレージに関する、第２の識別子を組織化した第２の要素ベクトルを生成する工程と、
前記第１及び第２の要素ベクトルから生成された情報に基づいてオブジェクトの配置先を探査する配置先探査工程と、
前記第１及び第２の識別子に基づいて、オブジェクトの配置先を決定する配置先決定工程と、
を含み、
前記配置先決定工程は、オブジェクトの配置先として、前記第２のストレージが指定された場合には、オブジェクトの配置先の指定と、オブジェクトの配置先の存在確認と、を繰り返すことで、前記第１のストレージを指定し、
前記配置先決定工程は、オブジェクトの配置先として指定された数の配置先を指定すると共に、複数の前記配置先にオブジェクトを配置し、
前記配置先探査工程は、前記第１の識別子に関する情報の一部と、前記第２の識別子に関する情報の一部と、を用いてオブジェクトの配置先を探査し、
前記配置先探査工程は、アクセス命令により定まるオブジェクトが自装置に記憶されていない場合に、前記アクセス命令の転送先を、前記隣接ストレージ情報及び前記隣接非存在ストレージ情報に基づいて決定する、ことを特徴とするオブジェクト配置方法。
【請求項７】
システム内に存在する複数の第１のストレージの数を記憶する処理と、
システム内に存在しない複数の第２のストレージの数を記憶する処理と、
前記第１のストレージの数に基づき、前記複数の第１のストレージを階層化する際の第１階層数を計算する処理と、
前記第２のストレージの数に基づき、前記複数の第２のストレージを階層化する際の第２階層数を計算する処理と、
前記第１階層数により定まる階層ごとに隣接する第１のストレージの識別子に関する情報を含む隣接ストレージ情報を生成する処理と、
前記第２階層数により定まる階層ごとに、前記第２のストレージの識別子が前記第１のストレージの識別子に隣接する第２のストレージを記憶する第１のストレージに関する情報を含む隣接非存在ストレージ情報を生成する処理と、
前記第１のストレージに関する、第１の識別子を組織化した第１の要素ベクトルを生成する処理と、
前記第２のストレージに関する、第２の識別子を組織化した第２の要素ベクトルを生成する処理と、
前記第１及び第２の要素ベクトルから生成された情報に基づいてオブジェクトの配置先を探査する配置先探査処理と、
前記第１及び第２の識別子に基づいて、オブジェクトの配置先を決定する配置先決定処理と、
をコンピュータに実行させるプログラムであって、
前記配置先決定処理は、オブジェクトの配置先として、前記第２のストレージが指定された場合には、オブジェクトの配置先の指定と、オブジェクトの配置先の存在確認と、を繰り返すことで、前記第１のストレージを指定し、
前記配置先決定処理は、オブジェクトの配置先として指定された数の配置先を指定すると共に、複数の前記配置先にオブジェクトを配置し、
前記配置先探査処理は、前記第１の識別子に関する情報の一部と、前記第２の識別子に関する情報の一部と、を用いてオブジェクトの配置先を探査し、
前記配置先探査処理は、アクセス命令により定まるオブジェクトが自装置に記憶されていない場合に、前記アクセス命令の転送先を、前記隣接ストレージ情報及び前記隣接非存在ストレージ情報に基づいて決定する、プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
（関連出願についての記載）
本発明は、日本国特許出願：特願２０１１−１４７５７１号（２０１１年７月１日出願）の優先権主張に基づくものであり、同出願の全記載内容は引用をもって本書に組み込み記載されているものとする。【０００２】
本発明は、オブジェクト配置装置、オブジェクト配置方法及びプログラムに関する。特に、所定の配置先に配置されたデータ等のオブジェクトを探査するオブジェクト配置装置、オブジェクト配置方法及びプログラムに関する。
【背景技術】
【０００３】
記憶対象となるデータ（以下、オブジェクトデータと呼ぶ）を複数の配置先に記憶する場合、そのオブジェクトデータを略均等に分散した状態で、個々の配置先に記憶する技術が存在する。このような技術を使用し、複数の配置先に同時にアクセスすることで、オブジェクトデータへのアクセス性能を向上させることができる。【０００４】
しかし、このような技術には、複数の配置先に分散記憶したオブジェクトデータにアクセスする際に、オブジェクトデータを記憶している配置先を探査する必要がある。即ち、アクセスの対象になっているオブジェクトデータを記憶している配置先を特定する必要がある。【０００５】
ここで、特許文献１及び非特許文献１乃至４において、オブジェクトデータに固有の情報（以下、識別子と呼ぶ）に基づき、オブジェクトデータと配置先との対応関係を、所定のアルゴリズムを使用して決定する方法が開示されている。この識別子を使用する方法では、オブジェクトデータへのアクセスの際に上述のアルゴリズムを使用して、識別子からオブジェクトデータを記憶する配置先を決定する。【０００６】
上述のアルゴリズムを使用し、オブジェクトデータを記憶している配置先を調べる方法には、２種類の方法が存在する。【０００７】
第１の方法は、オブジェクトデータを記憶している配置先を決定する方法を実行する装置（以下、判定装置と呼ぶ）が、オブジェクトデータを記憶している可能性がある全ての配置先を記憶する方法である。【０００８】
第２の方法は、判定装置がオブジェクトデータを記憶している可能性がある配置先の一部を記憶する方法である。この第２の方法は、非特許文献１及び非特許文献２において、開示されている。
【先行技術文献】
【特許文献】
【０００９】
【特許文献１】特開２００７−０７３００３号公報
【非特許文献】
【００１０】
【非特許文献１】Ｊａｍｅｓ  Ａｓｐｎｅｓ  ａｎｄ  Ｇａｕｒｉ  Ｓｈａｈ  “Ｓｋｉｐ  ｇｒａｐｈｓ．”、ＡＣＭ  Ｔｒａｎｓａｃｔｉｏｎｓ  ｏｎ  Ａｌｇｏｒｉｔｈｍｓ、Ｖｏｌ．３、Ａｒｔｉｃｌｅ  ３７、Ｎｏｖ  ２００７、［ｏｎｌｉｎｅ］、［２０１１年６月２２日検索］、インターネット〈URL：http://doi.acm.org/10.1145/1290672.1290674〉
【非特許文献２】Ｉｏｎ  Ｓｔｏｉｃａ、Ｒｏｂｅｒｔ  Ｍｏｒｒｉｓ、Ｄａｖｉｄ  Ｌｉｂｅｎ−Ｎｏｗｅｌｌ、Ｄａｖｉｄ  Ｒ．Ｋａｒｇｅｒ、Ｍ．Ｆｒａｎｓ  Ｋａａｓｈｏｅｋ、Ｆｒａｎｋ  Ｄａｂｅｋ、ａｎｄ  Ｈａｒｉ  Ｂａｌａｋｒｉｓｈｎａｎ．  “Ｃｈｏｒｄ：  Ａ  Ｓｃａｌａｂｌｅ  Ｐｅｅｒ−ｔｏ−ｐｅｅｒ  Ｌｏｏｋｕｐ  Ｓｅｒｖｉｃｅ  ｆｏｒ  Ｉｎｔｅｒｎｅｔ  Ａｐｐｌｉｃａｔｉｏｎｓ．”、ＩＥＥＥ／ＡＣＭ  Ｔｒａｎｓａｃｔｉｏｎｓ  ｏｎ  Ｎｅｔｗｏｒｋｉｎｇ、Ｖｏｌ．１１、Ｆｅｂ  ２００３、ｐ．１７−３２．
【非特許文献３】Ｄａｖｉｄ  Ｋａｒｇｅｒ、Ｅｒｉｃ  Ｌｅｈｍａｎ、Ｔｏｍ  Ｌｅｉｇｈｔｏｎ、Ｒｉｎａ  Ｐａｎｉｇｒａｈｙ、Ｍａｔｔｈｅｗ  Ｌｅｖｉｎｅ、ａｎｄ  Ｄａｎｉｅｌ  Ｌｅｗｉｎ．  “Ｃｏｎｓｉｓｔｅｎｔ  Ｈａｓｈｉｎｇ  ａｎｄ  ｒａｎｄｏｍ  ｔｒｅｅｓ：  ｄｉｓｔｒｉｂｕｔｅｄ  ｃａｃｈｉｎｇ  ｐｒｏｔｏｃｏｌｓ  ｆｏｒ  ｒｅｌｉｅｖｉｎｇ  ｈｏｔ  ｓｐｏｔｓ  ｏｎ  ｔｈｅ  Ｗｏｒｌｄ  Ｗｉｄｅ  Ｗｅｂ．”、Ｉｎ  Ｐｒｏｃｅｅｄｉｎｇｓ  ｏｆ  ｔｈｅ  ｔｗｅｎｔｙ−ｎｉｎｔｈ  ａｎｎｕａｌ  ＡＣＭ  ｓｙｍｐｏｓｉｕｍ  ｏｎ  Ｔｈｅｏｒｙ  ｏｆ  ｃｏｍｐｕｔｉｎｇ（ＳＴＯＣ‘９７）、１９９７、ｐ．６５４−６６３、［ｏｎｌｉｎｅ］、［２０１１年６月２２日検索］、インターネット〈URL：http://doi.acm.org/10.1145/258533.258660〉
【非特許文献４】Ｓａｇｅ  Ａ．Ｗｅｉｌ  ａｎｄ  Ｓｃｏｔｔ  Ａ．Ｂｒａｎｄｔ、Ｅｔｈａｎ  Ｌ．  Ｍｉｌｌｅｒ，  Ｃａｒｌｏｓ  Ｍａｌｔｚａｈｎ，  “ＣＲＵＳＨ：  ｃｏｎｔｏｒｏｌｌｅｄ，  ｓｃａｌａｂｌｅ，  ｄｅｃｅｎｔｒａｌｉｚｅｄ  ｐｌａｃｅｍｅｎｔ  ｏｆ  ｒｅｐｌｉｃａｔｅｄ  ｄａｔａ．”、Ｉｎ  Ｐｒｏｃｅｅｄｉｎｇｓ  ｏｆ  ｔｈｅ  ２００６  ＡＣＭ／ＩＥＥＥ  ｃｏｎｆｅｒｅｎｃｅ  ｏｎ  Ｓｕｐｅｒｃｏｍｐｕｔｉｎｇ（ＳＣ‘０６）、２００６、Ａｒｔｉｃｌｅ  １２２、［ｏｎｌｉｎｅ］、［２０１１年６月２２日検索］、インターネット〈URL：http://doi.acm.org/10.1145/1188455.1188582〉
【発明の概要】
【発明が解決しようとする課題】
【００１１】
なお、上記先行技術文献の各開示を、本書に引用をもって繰り込むものとする。以下の分析は、本発明の観点からなされたものである。【００１２】
上述の第１の方法では、配置先の増加と共に、全ての判定装置が共有しなければならない情報も増加するため、スケーラビリティ（拡張性）に限界がある。一方、第２の方法では、各判定装置は一部の配置先に関する情報のみを記憶するため、共有しなければならない情報が少なく、第１の方法と比較するとスケーラビリティが高い。【００１３】
しかし、第２の方法では、各判定装置が一部の配置先に関する情報のみを保有するため、各判定装置が個々に、オブジェクトデータに応じてオブジェクトデータを記憶している配置先を探査する必要がある。その際に、いずれかの判定装置から探査を始めた場合においても、目的とするオブジェクトデータを記憶している配置先を探査できる（特定できる）必要がある。さらに、オブジェクトデータに対するアクセス性能を考慮すると、判定装置での判定回数及び各判定装置が記憶する配置先の数は少数でなければならない。【００１４】
上述のように、非特許文献１において、判定装置がシステム内に存在する配置先の一部に関する情報を保持しつつ、オブジェクトデータを記憶している配置先を探査する方法が開示されている。ここで、システムの運用においては、システム内に存在しない配置先が、データを記憶している配置先として指定されることがある。このような場合に、非特許文献１で開示された方法では、システム内に存在しない配置先を考慮しておらず、アクセス性能が悪化するという問題がある（存在しない配置先と確定するのに時間がかかる）。【００１５】
以上のとおり、従来技術には、解決すべき問題点が存在する。そのため、存在しない配置先が指定された場合であっても、アクセス性能の悪化を防止するオブジェクト配置装置、オブジェクト配置方法及びプログラムが、望まれる。
【課題を解決するための手段】
【００１６】
本発明の第１の視点によれば、システム内に存在する複数の第１のストレージの数を記憶する第１の記憶部と、システム内に存在しない複数の第２のストレージの数を記憶する第２の記憶部と、前記第１のストレージの数に基づき、前記複数の第１のストレージを階層化する際の第１階層数を計算する、第１の検索レベル決定部と、前記第２のストレージの数に基づき、前記複数の第２のストレージを階層化する際の第２階層数を計算する、第２の検索レベル決定部と、前記第１階層数により定まる階層ごとに隣接する第１のストレージの識別子に関する情報を含む隣接ストレージ情報を生成する、隣接ストレージ決定部と、前記第２階層数により定まる階層ごとに、前記第２のストレージの識別子が前記第１のストレージの識別子に隣接する第２のストレージを記憶する第１のストレージに関する情報を含む隣接非存在ストレージ情報を生成する、隣接非存在ストレージ決定部と、前記第１のストレージに関する、第１の識別子を組織化した第１の要素ベクトルと、前記第２のストレージに関する、第２の識別子を組織化した第２の要素ベクトルと、から生成された情報に基づいてオブジェクトの配置先を探査する配置先探査部と、前記第１及び第２の識別子に基づいて、オブジェクトの配置先を決定する配置先決定部と、を備え、前記配置先決定部は、オブジェクトの配置先として、前記第２のストレージが指定された場合には、オブジェクトの配置先の指定と、オブジェクトの配置先の存在確認と、を繰り返すことで、前記第１のストレージを指定し、前記配置先決定部は、オブジェクトの配置先として指定された数の配置先を指定すると共に、複数の前記配置先にオブジェクトを配置し、前記配置先探査部は、前記第１の識別子に関する情報の一部と、前記第２の識別子に関する情報の一部と、を用いてオブジェクトの配置先を探査し、前記配置先探査部は、アクセス命令により定まるオブジェクトが自装置に記憶されていない場合に、前記アクセス命令の転送先を、前記隣接ストレージ情報及び前記隣接非存在ストレージ情報に基づいて決定する、オブジェクト配置装置が提供される。
【００１７】
本発明の第２の視点によれば、システム内に存在する複数の第１のストレージの数を記憶する工程と、システム内に存在しない複数の第２のストレージの数を記憶する工程と、前記第１のストレージの数に基づき、前記複数の第１のストレージを階層化する際の第１階層数を計算する工程と、前記第２のストレージの数に基づき、前記複数の第２のストレージを階層化する際の第２階層数を計算する工程と、前記第１階層数により定まる階層ごとに隣接する第１のストレージの識別子に関する情報を含む隣接ストレージ情報を生成する工程と、前記第２階層数により定まる階層ごとに、前記第２のストレージの識別子が前記第１のストレージの識別子に隣接する第２のストレージを記憶する第１のストレージに関する情報を含む隣接非存在ストレージ情報を生成する工程と、前記第１のストレージに関する、第１の識別子を組織化した第１の要素ベクトルを生成する工程と、前記第２のストレージに関する、第２の識別子を組織化した第２の要素ベクトルを生成する工程と、前記第１及び第２の要素ベクトルから生成された情報に基づいてオブジェクトの配置先を探査する配置先探査工程と、前記第１及び第２の識別子に基づいて、オブジェクトの配置先を決定する配置先決定工程と、を含み、前記配置先決定工程は、オブジェクトの配置先として、前記第２のストレージが指定された場合には、オブジェクトの配置先の指定と、オブジェクトの配置先の存在確認と、を繰り返すことで、前記第１のストレージを指定し、前記配置先決定工程は、オブジェクトの配置先として指定された数の配置先を指定すると共に、複数の前記配置先にオブジェクトを配置し、前記配置先探査工程は、前記第１の識別子に関する情報の一部と、前記第２の識別子に関する情報の一部と、を用いてオブジェクトの配置先を探査し、前記配置先探査工程は、アクセス命令により定まるオブジェクトが自装置に記憶されていない場合に、前記アクセス命令の転送先を、前記隣接ストレージ情報及び前記隣接非存在ストレージ情報に基づいて決定する、オブジェクト配置方法が提供される。
【００１８】
本発明の第３の視点によれば、システム内に存在する複数の第１のストレージの数を記憶する処理と、システム内に存在しない複数の第２のストレージの数を記憶する処理と、前記第１のストレージの数に基づき、前記複数の第１のストレージを階層化する際の第１階層数を計算する処理と、前記第２のストレージの数に基づき、前記複数の第２のストレージを階層化する際の第２階層数を計算する処理と、前記第１階層数により定まる階層ごとに隣接する第１のストレージの識別子に関する情報を含む隣接ストレージ情報を生成する処理と、前記第２階層数により定まる階層ごとに、前記第２のストレージの識別子が前記第１のストレージの識別子に隣接する第２のストレージを記憶する第１のストレージに関する情報を含む隣接非存在ストレージ情報を生成する処理と、前記第１のストレージに関する、第１の識別子を組織化した第１の要素ベクトルを生成する処理と、前記第２のストレージに関する、第２の識別子を組織化した第２の要素ベクトルを生成する処理と、前記第１及び第２の要素ベクトルから生成された情報に基づいてオブジェクトの配置先を探査する配置先探査処理と、前記第１及び第２の識別子に基づいて、オブジェクトの配置先を決定する配置先決定処理と、をコンピュータに実行させるプログラムであって、前記配置先決定処理は、オブジェクトの配置先として、前記第２のストレージが指定された場合には、オブジェクトの配置先の指定と、オブジェクトの配置先の存在確認と、を繰り返すことで、前記第１のストレージを指定し、前記配置先決定処理は、オブジェクトの配置先として指定された数の配置先を指定すると共に、複数の前記配置先にオブジェクトを配置し、前記配置先探査処理は、前記第１の識別子に関する情報の一部と、前記第２の識別子に関する情報の一部と、を用いてオブジェクトの配置先を探査し、前記配置先探査処理は、アクセス命令により定まるオブジェクトが自装置に記憶されていない場合に、前記アクセス命令の転送先を、前記隣接ストレージ情報及び前記隣接非存在ストレージ情報に基づいて決定する、プログラムが提供される。
【００１９】
なお、このプログラムは、コンピュータが読み取り可能な記憶媒体に記録することができる。記憶媒体は、半導体メモリ、ハードディスク、磁気記録媒体、光記録媒体等の非トランジェント（ｎｏｎ−ｔｒａｎｓｉｅｎｔ）なものとすることができる。本発明は、コンピュータプログラム製品として具現することも可能である。
【発明の効果】
【００２０】
本発明の各視点によれば、存在しない配置先が指定された場合であっても、アクセス性能の悪化を防止するオブジェクト配置装置、オブジェクト配置方法及びプログラムが、提供される。
【図面の簡単な説明】
【００２１】
【図１】一実施形態の概要を説明するための図である。
【図２】ストレージ装置１の内部構成の一例を示す図である。
【図３】オブジェクトデータを記憶するシステムの一構成例を示す図である。
【図４】ストレージ装置１０の内部構成の一例を示す図である。
【図５】ストレージ装置１０における記憶ストレージの決定方法の一例を示すフローチャートである。
【図６】アルゴリズムＡを説明するためのフローチャートの一例である。
【図７】アルゴリズムＡを説明するための図である。
【図８】第１の実施形態に係るストレージ装置２０の内部構成の一例を示す図である。
【図９】隣接非存在ストレージ情報の記憶アルゴリズムの一例を示すフローチャートである。
【図１０】アルゴリズムＣの処理内容の一例を示すフローチャートである。
【図１１】アルゴリズムＣを説明するための図である。
【図１２】第１の実施形態に係るストレージ装置２０のハードウエア構成の一例を示す図である。
【図１３】ストレージシステムに含まれるストレージ装置の一例を示す図である。
【図１４】隣接ストレージ情報の計算を説明するための図である。
【図１５】隣接非存在ストレージ情報の計算を説明するための図である。
【図１６】第２の実施形態に係るストレージ装置３０の内部構成の一例を示す図である。
【図１７】アルゴリズムＤを説明するためのフローチャートの一例である。
【発明を実施するための形態】
【００２２】
初めに、図１を用いて本願開示の概要について説明する。なお、この概要に付記した図面参照符号は、理解を助けるための一例として各要素に便宜上付記したものであり、本発明を図示の態様に限定することを意図するものではない。
【００２３】
上述のように、非特許文献１で開示された方法では、システム内に存在しない配置先を考慮していないので、オブジェクトの配置先が存在しない場合は、そのアクセス性能が悪化する場合がある。そのため、システムに存在しない配置先が指定された場合であっても、アクセス性能の悪化を防止するオブジェクト配置装置、オブジェクト配置方法及びプログラムが、望まれる。
【００２４】
そこで、一例として図１に示すオブジェクト配置装置４００を提供する。図１に示すオブジェクト配置装置４００は、システム内に存在する第１の配置先に関する第１の識別子を組織化した第１の要素ベクトルと、システム内に存在しない第２の配置先に関する第２の識別子を組織化した第２の要素ベクトルと、に基づいてオブジェクトの配置先を探査する配置先探査部４０１を備えている。
【００２５】
図１に示すオブジェクト配置装置４００は、それぞれがユニークな識別子を持っており、この識別子に基づいてオブジェクトの配置先を決定する。さらに、システム内に存在する第１の配置先に関する識別子を組織化した第１の要素ベクトルと、システム内に存在しない第２の配置先に関する識別子を組織化した第２の要素ベクトルと、に基づいて、オブジェクトの配置先を探査する。ここで、識別子とは、識別子間で小さい・大きい、又は、近い・遠い、の判定が可能な情報とする。
【００２６】
さらに、第１及び第２の識別子を組織化して、第１及び第２の要素ベクトルを算出する。ここで、識別子の組織化とは、システム内に存在する配置先の総数に基づいて、識別子を階層化する。さらに、階層化したレベル毎に配置先に隣接する他の配置先を抽出することを意味する。組織化の後は、各階層のレベル毎に、目的とする配置先に近いと考えられる他の配置先を選択し、このような配置先を移動先とすることで、効率的にオブジェクトの配置先を探査する。その際に、システム内に存在する配置先に関する情報（第１の識別子）だけではなく、システム内に存在しない配置先に関する情報（第２の識別子）を用いることで、システム内に存在しない配置先が、オブジェクトを記憶している配置先として指定された場合であっても、直ちに指定された配置先はシステム内に存在しない配置先であると確定できる。
【００２７】
即ち、システム内に存在しない配置先に関する情報に限って配置先を探査するとするならば、システム内に存在しない配置先が指定された場合には、存在しない配置先が存在するのであれば確実にその情報を記憶している、存在しない配置先の隣のオブジェクト記憶装置に移動しなければ、システム内に指定された配置先は存在しないと確定することができない。しかし、システム内に存在しない配置先に関する情報を予め用意しておくことで、指定された配置先はシステム内に存在しない配置先であると迅速に決定することができる。その結果、システムに存在しない配置先が指定された場合であっても、アクセス性能の悪化を防止することができる。
【００２８】
次に、各実施形態に共通する事項についてより具体的に説明する。
【００２９】
なお、オブジェクトの配置先（又は、オブジェクト配置装置）としてはストレージ装置を想定し、以下の説明をする。
【００３０】
ここで、図２に示すストレージ装置１（オブジェクト配置装置）を複数含むことでオブジェクトを記憶するシステムを構成することができる（図３参照）。図３に示すように、オブジェクトデータを記憶するシステムは複数のストレージ装置から構成され、各ストレージ装置は固有の識別子を備えている。図３に示すシステムにおいて、同じ識別子を持つオブジェクトデータは、常に同じストレージ装置に記憶されるものとする。
【００３１】
図２に示すストレージ装置１は、識別子入力部２と、記憶ストレージ決定部３と、移動先ストレージ決定部４と、隣接ストレージ記憶部５と、隣接非存在ストレージ記憶部６と、通信部７と、データ記憶部８と、を備えている。
【００３２】
識別子入力部２は、オブジェクトデータの識別子を受け付ける。
【００３３】
記憶ストレージ決定部３は、オブジェクトデータを記憶するストレージ装置を決定する。記憶ストレージ決定部３は、後述の配置先決定部に相当する。
【００３４】
移動先ストレージ決定部４は、アクセス命令によって指定されたオブジェクトデータを記憶するストレージ装置、又は、アクセス命令によって指定されたオブジェクトデータを記憶するストレージ装置の識別子により近い識別子を持つストレージ装置の判定を行う。移動先ストレージ決定部は、上述の配置先探査部４０１に相当する。
【００３５】
移動先ストレージ決定部４が判定した結果、アクセス命令を受け付けたストレージ装置自身がオブジェクトデータを記憶している場合は、データ記憶部８を使用してオブジェクトデータにアクセスし、アクセス命令を発行したストレージ装置に結果を返答する。
【００３６】
移動先ストレージ決定部４が判定した結果、他のストレージ装置がオブジェクトデータを記憶していると判断した場合には、通信部７を使用して、アクセス命令を移動先ストレージ決定部４で判定したストレージ装置に転送する。反対に、他のストレージ装置の移動先ストレージ決定部４が判定した結果を使用する場合もある。
【００３７】
移動先ストレージ決定部４は、隣接ストレージ記憶部５が記憶している隣接ストレージ情報と、隣接非存在ストレージ記憶部６が記憶している隣接非存在ストレージ情報と、を参照することができる。移動先ストレージ決定部４は、これらの隣接ストレージ情報及び隣接非存在ストレージ情報に基づいて、アクセス命令の転送先となるストレージ装置を判定する。なお、隣接ストレージ情報及び隣接非存在ストレージ情報については後述する。
【００３８】
移動先ストレージ決定部４は、隣接ストレージ情報と隣接非存在ストレージ情報に基づいて、最も効率良くオブジェクトデータを記憶しているストレージ装置に移動できるストレージ装置を転送先ストレージとして判定する。なお、最も効率良くオブジェクトデータを記憶しているストレージ装置に移動できるストレージ装置の判定方法には、以下の方法が考えられる。ただし、このような方法に限定する趣旨ではない。
【００３９】
初めに、隣接非存在ストレージ情報のみを用いてオブジェクトデータを記憶しているストレージ装置に近接し、最終的に隣接ストレージ情報を用いてオブジェクトデータを記憶しているストレージ装置に移動する。又は、当初から隣接ストレージ情報及び隣接非存在ストレージ情報の双方を用いて、オブジェクトデータを記憶しているストレージ装置に移動する。
【００４０】
なお、隣接ストレージ情報と隣接非存在ストレージ情報を外部より受け付けても、上述のようにストレージ装置内部で生成しても良い。
【００４１】
隣接ストレージ記憶部５は、システム内に存在するストレージ装置の一部又は全ての情報を、隣接ストレージ情報として記憶している。なお、システムのスケーラビリティを考慮すると、隣接ストレージ記憶部５が記憶する情報はシステム内に存在するストレージ装置の一部である場合が多い。
【００４２】
上述のように、システム内に存在する全てのストレージ装置は、番号などの固有の識別子を持っている。この固有の識別子を用いて、全てのストレージ装置の中から記憶するストレージ装置を選択する方法は以下のようなものが考えられる。しかし、これらの方法に限定する趣旨ではない。
【００４３】
全てのストレージ装置の中から記憶するストレージ装置を選択は、テーブルで管理しているストレージ装置の中から、容量がより大きなストレージ装置など予め定められた基準に従って選択する。又は、テーブルで管理しているストレージ装置の中から識別子をシードとした乱数により決定する方法等、予め定められたアルゴリズムに従って選択する。
【００４４】
隣接非存在ストレージ記憶部６は、システム内には対応するストレージ装置が存在しない識別子と、その識別子を管理するストレージ装置の組み合わせの一部又は全てと、を隣接非存在ストレージ情報として記憶している。即ち、隣接ストレージ情報とは、システム内に存在するストレージ装置に関する情報であり、隣接非存在ストレージ情報とは、ストレージシステム内には対応するストレージ装置が存在しない識別子と、その識別子を管理するストレージ装置に関する情報である。
【００４５】
なお、識別子を管理するストレージ装置が存在しない場合に記憶する情報の選択には、識別子の上限と下限が輪状に繋がっているとする方法が考えられる。該識別子を管理しているストレージ装置が持つ識別子が識別子の上限を超える場合は、識別子の下限に最も近い識別子を持つストレージ装置を選択する。該識別子を管理しているストレージ装置が持つ識別子が識別子の下限を下回る場合は、識別子の上限に最も近い識別子を持つストレージ装置を選択する。しかし、このような方法に限定する主旨ではない。また、対応するストレージ装置が存在しない識別子と、その識別子を管理しているストレージ装置の組み合わせから、記憶する状態の組み合わせを選択することも考えられる。
【００４６】
このように、システム内に存在するストレージ装置に関する情報（隣接ストレージ情報）と、システム内に存在しないストレージ装置に関する情報（隣接非存在ストレージ情報）と、を併せて記憶する構成にすることで、アクセス命令が目的とするオブジェクトデータを記憶しているストレージ装置により少ないホップ数で到達することができる。
【００４７】
さらに、システム内に存在しないストレージ装置の識別子が、識別子の取り得る範囲で密に設定されている場合に、システム内に存在しないストレージ装置に関する情報を用いる利点が顕著になる。識別子が密に設定されている場合には、システム内に存在するストレージ装置の数は、システム内に存在しないストレージ装置の数よりも大幅に多いことを意味する。このような状況下で、システム内に存在しないストレージ装置が記憶ストレージとして指定された場合、数の多いシステム内に存在するストレージ装置の識別子を使って記憶ストレージが存在しないことを確定するよりも、数の少ないシステム内に存在しないストレージ装置の識別子を使って確定させる方が、より効率的であることは明白である。より具体的には、非特許文献１等で開示された方法では、Ｏ（ｌｏｇ（ストレージ装置数））のオーダーのホップ数が必要になるのに対し、Ｏ（ｌｏｇ（対応するノードが存在しない識別子の数））と略等しいオーダーのホップ数が必要となる。
【００４８】
次に、オブジェクトデータの配置及び探査について具体的に説明する。
【００４９】
ここでは、システム内に存在するストレージ装置に関する情報のみを使用して、転送先のストレージ装置を決定するストレージ装置について説明する。
【００５０】
図４は、ストレージ装置１０の内部構成の一例を示す図である。
【００５１】
ストレージ装置１０は、識別子を用いて、外部から受け付けたオブジェクトデータを記憶する記憶ストレージを決定する。
【００５２】
ストレージ装置１０は、ストレージ数記憶部１０１と、検索レベル決定部１０２と、要素ベクトル決定部１０３と、隣接ストレージ決定部１０４と、隣接ストレージ記憶部１０５と、識別子入力部１０６と、記憶ストレージ決定部１０７と、移動先ストレージ決定部１０８と、通信部１０９と、データ記憶部１１０とから構成されている。
【００５３】
ストレージ数記憶部１０１は、システム内に存在するストレージ装置の数を計数し、記憶する。
【００５４】
検索レベル決定部１０２は、システム内に存在するストレージ装置の数から検索レベルを計算する。検索レベルは、上述の階層化における階層数に相当する。
【００５５】
要素ベクトル決定部１０３は、検索レベル決定部１０２が算出した検索レベルに基づいて、ストレージ装置１０の要素ベクトルを計算する。
【００５６】
隣接ストレージ決定部１０４は、隣接ストレージ記憶部１０５に記憶させる隣接ストレージ情報を生成する。
【００５７】
隣接ストレージ記憶部１０５は、隣接ストレージ決定部１０４が生成した隣接ストレージ情報を記憶する。
【００５８】
識別子入力部１０６は、オブジェクトデータのオブジェクトデータ識別子、又は、オブジェクトデータを記憶している記憶ストレージの情報を受け付ける。
【００５９】
記憶ストレージ決定部１０７は、記憶ストレージの情報を受け取らなかった場合に、オブジェクトデータ識別子等に基づいて記憶ストレージを決定する。
【００６０】
移動先ストレージ決定部１０８は、オブジェクトデータをストレージ装置１０自身で記憶しているか否かを判定する。記憶していない場合は、隣接ストレージ記憶部１０５に記憶している隣接ストレージ情報と記憶ストレージの情報と、からアクセス命令の転送先ストレージを決定する。
【００６１】
通信部１０９は、他のストレージ装置や外部装置と通信を行う。なお、図４では、通信部１０９は、移動先ストレージ決定部１０８から情報を受け取るため、移動先ストレージ決定部１０８と接続されているが、必要に応じてストレージ装置１０内部の他の各部と情報の送受信が可能であるものとする。
【００６２】
データ記憶部１１０は、オブジェクトデータを記憶する。
【００６３】
次に、ストレージ装置１０における記憶ストレージの決定方法について説明する。
【００６４】
図５は、ストレージ装置１０における記憶ストレージの決定方法の一例を示すフローチャートである。ストレージ数記憶部１０１には、オブジェクトデータを記憶することができるストレージ装置数ＳＮＯが記憶されている。
【００６５】
ステップＳ０１では、検索レベル決定部１０２において、ストレージ装置数ＳＮＯの２を底とした対数を計算する。さらに、計算結果の小数点以下を切り上げ、１を減算する。その結果を、第１の検索レベルＬｅｖ０１とする。第１の検索レベルＬｅｖ０１が負の値の場合は、第１の検索レベルＬｅｖ０１を０とする。
【００６６】
ステップＳ０２では、要素ベクトル決定部１０３において、ストレージ識別子ＳＩＤからハッシュ値を計算する。なお、ストレージ識別子ＳＩＤとは、ストレージ識別子ＳＩＤ同士との関係において、ストレージ識別子ＳＩＤが小さい・大きい、又は、近い・遠いといった判断が可能な情報である。そのような情報としては、昇順又は降順に並んだ整数が考えられる。
【００６７】
ハッシュ値の計算結果を２進数表記で、第１の検索レベルＬｅｖ０１に相当する桁数を持つように剰余計算を行う。剰余計算の結果を第１の要素ベクトルＶＣ０１とする。
【００６８】
ステップＳ０３では、隣接ストレージ決定部１０４において、アルゴリズムＡを用いて隣接ストレージを決定する。アルゴリズムＡについては後述する。
【００６９】
ステップＳ０４では、隣接ストレージ記憶部１０５において、隣接ストレージ決定部１０４が決定した隣接ストレージの情報を記憶する。
【００７０】
次に、ストレージ装置１０における転送先ストレージの決定方法について説明する。初めに、識別子入力部１０６で、アクセス命令を通じてオブジェクトデータ識別子を受け付ける。さらに、記憶ストレージ決定部１０７において、オブジェクトデータ識別子に基づきオブジェクトデータを記憶する記憶ストレージを決定する。記憶ストレージの決定方法については、後述の実施例において説明する。
【００７１】
そして、移動先ストレージ決定部１０８において、ストレージ装置１０自身は記憶ストレージではないことを確認し、アルゴリズムＢを用いて、ストレージ装置１０と記憶ストレージの間にあり、記憶ストレージに最も近い隣接ストレージを選択する。その際に、隣接ストレージ記憶部１０５で記憶している隣接ストレージに関する情報を使用する。アルゴリズムＢについては後述する。
【００７２】
アルゴリズムＢで選択する隣接ストレージには、オブジェクトデータを記憶する記憶ストレージも含まれている可能性がある。そこで、ストレージ装置１０自身が記憶ストレージである場合は、データ記憶部１１０に記憶しているオブジェクトデータにアクセスし、必要に応じてアクセス命令を発行した装置に情報を返答する。アルゴリズムＢで隣接ストレージを選択した場合には、移動先ストレージ決定部１０８が通信部１０９を使用して、アルゴリズムＢで選択した隣接ストレージにアクセス命令を転送する。
【００７３】
次に、アルゴリズムＡについて説明する。
【００７４】
アルゴリズムＡは、第１の検索レベル毎に隣接ストレージを選択するためのアルゴリズムである。アルゴリズムＡは上述の組織化に相当する処理である。
【００７５】
図６は、アルゴリズムＡを説明するためのフローチャートの一例である。
【００７６】
第１の検索レベルＬｅｖ０１の値が０である場合には、ストレージ装置１０と隣り合うことを示しているストレージ装置の記憶を行う（ステップＳ１０１）。その際の判断に、ストレージ識別子ＳＩＤを用いる。即ち、ストレージ識別子ＳＩＤに整数を採用したとすれば、ストレージ装置１０のストレージ識別子の値の前後のストレージ識別子ＳＩＤを持つストレージ装置の記憶を行う。
【００７７】
なお、第１の検索レベルＬｅｖ０１の値が０である場合にはＬｅｖ０１（０）と表記し、同様に第１の検索レベルＬｅｖ０１の値が１である場合にはＬｅｖ０１（１）、第１の検索レベルＬｅｖ０１の値がｎである場合にはＬｅｖ０１（ｎ）、と以後表記する。
【００７８】
次に、Ｌｅｖ０１（１）について、ストレージ装置１０が持つ第１の要素ベクトルＶＣ０１の上位１桁が同じストレージ装置の中であって、ストレージ識別子ＳＩＤがストレージ装置１０自身と隣り合うストレージ装置を記憶する（ステップＳ１０２）。
【００７９】
このように、Ｌｅｖ０１（ｎ）では第１の要素ベクトルＶＣ０１の上位（ｎ）桁が同じストレージ装置の中であって、ストレージ識別子ＳＩＤがストレージ装置１０と隣り合うストレージ装置を記憶する（ステップＳ１０ｎ）。
【００８０】
なお、ストレージ識別子ＳＩＤの下限に最も近いストレージ装置まで第１の要素ベクトルＶＣ０１の上位（ｎ）桁が同じストレージが見つからない場合は、より下限に近いストレージ装置を示すストレージ識別子ＳＩＤを持つストレージ装置が存在しないことを記憶する。又は、ストレージ識別子ＳＩＤの上限と下限が輪状に繋がっていると考え、隣り合うストレージ装置を記憶することもできる。このことは、ストレージ識別子ＳＩＤが上限に最も近いストレージ装置まで第１の要素ベクトルＶＣ０１の上位（ｎ）桁が同じストレージ装置が見つからない場合も同様である。
【００８１】
次に、アルゴリズムＡによる隣接ストレージの判定の具体例を示す。
【００８２】
図７は、アルゴリズムＡを説明するための図である。
【００８３】
図７には、ストレージ装置がノードＡ乃至ノードＦまで６台含まれているものとする。６台のストレージ装置が存在するため、第１の検索レベルＬｅｖ０１は２となる。ノードＡ乃至ノードＦまでの各ストレージ装置は、それぞれがストレージ識別子ＳＩＤとしてのノード番号を持っており、第１の検索レベルＬｅｖ０１が２であるので２桁の第１の要素ベクトルＶＣ０１が計算される。この計算を、ノードＣを例に取って説明する。
【００８４】
Ｌｅｖ０１（０）では、ノードＣに隣接するストレージ装置を記憶するのでノードＢ及びノードＤが記憶される。
【００８５】
Ｌｅｖ０１（１）では、第１の要素ベクトルＶＣ０１の上位１桁が同じであり、かつ、隣接するストレージ装置を記憶するので、ストレージ識別子ＳＩＤが下限に近い側には隣接ストレージが存在しないこと、及びノードＥを記憶する。
【００８６】
Ｌｅｖ０１（２）では、第１の要素ベクトルＶＣ０１の上位２桁が同じであり、かつ、隣接するストレージ装置を記憶するので、ストレージ識別子ＳＩＤが下限に近い側には隣接ストレージが存在しないこと、及びノードＦを記憶する。
【００８７】
本例では第１の要素ベクトルＶＣ０１の上位から指定した桁数一致することを判定条件としているが、これに限定するものではなく、第１の要素ベクトルＶＣ０１の下位から指定した桁数一致することを判定条件とする方法なども考えられる。
【００８８】
以上が、アルゴリズムＡの説明である。
【００８９】
次に、アルゴリズムＢについて説明する。
【００９０】
アルゴリズムＢでは、あるストレージ装置から指定した別のストレージ装置へ移動する際に、第１の検索レベルＬｅｖ０１の高い順に、指定したストレージ装置、又は、指定したストレージ装置の手前のストレージ装置を記憶しているか否かを判定する。そして、最も高い第１の検索レベルＬｅｖ０１で記憶している指定したストレージ装置の手前のストレージ装置へ移動する。ここで、指定したストレージ装置の手前のストレージ装置には指定したストレージ装置自身を含む。このような移動を繰り返すことにより、指定したストレージ装置へ移動することが可能になる。
【００９１】
［第１の実施形態］
次に、第１の実施形態について、図面を用いてより詳細に説明する。
【００９２】
本実施形態に係るストレージ装置２０の動作の概略は、ストレージ装置１０と略同一である。即ち、ストレージ装置２０はオブジェクトデータを記憶すると共に、外部から受け付けたアクセス命令を処理する。ストレージ装置２０自身でオブジェクトデータを記憶していない場合には、他のストレージ装置にアクセス命令を転送する。
【００９３】
なお、この際の転送は、ストレージ装置２０よりもオブジェクトデータを記憶しているストレージ装置により近いストレージ装置に対して行う。ストレージ装置が互いに近い・遠い、を判断するためにストレージ識別子ＳＩＤを本実施形態においても使用する。ストレージ識別子ＳＩＤを使用した転送先のストレージ装置を決定する手順については後述する。
【００９４】
また、本実施形態に係るストレージ装置２０においても、オブジェクトデータと対になるオブジェクトデータ識別子を使用する。オブジェクトデータ識別子は、オブジェクトデータと対になって定まる情報であり、オブジェクトデータを一意に定める役割を持つ。
【００９５】
ここで、外部からストレージ装置２０に対してアクセス命令が発行されると、アクセス命令及びオブジェクトデータ識別子が、複数のストレージ装置から構成されるシステムに入力される。上述のように、ストレージ装置２０自身が、アクセス命令の指定するオブジェクトデータを記憶していなければ、ストレージ装置２０よりもオブジェクトデータを記憶しているストレージにより近いストレージにアクセス命令を転送する。
【００９６】
このことは、上述のストレージ装置１０においても同様である。しかし、本実施形態に係るストレージ装置２０では、転送先のストレージ装置を決定する際に、システム内に存在するストレージ装置に関する情報だけではなく、対応するストレージ装置が存在しないストレージ識別子ＳＩＤ及びストレージ識別子ＳＩＤを管理するストレージ（以下、管理ストレージと呼ぶ）の情報も利用する。この点が、システムの内部に存在するストレージ装置の情報のみを用いるストレージ装置１０とは異なる点である。
【００９７】
図８は、本実施形態に係るストレージ装置２０の内部構成の一例を示す図である。図８において図４と同一構成要素には、同一の符号を表し、その説明を省略する。
【００９８】
ストレージ装置２０は、ストレージ数記憶部１０１と、第１検索レベル決定部１０２ａと、第１要素ベクトル決定部１０３ａと、隣接ストレージ決定部１０４と、隣接ストレージ記憶部１０５と、識別子入力部１０６と、記憶ストレージ決定部１０７と、移動先ストレージ決定部１０８と、通信部１０９と、データ記憶部１１０と、非存在ストレージ数記憶部２０１と、第２検索レベル決定部２０２と、第２要素ベクトル決定部２０３と、隣接非存在ストレージ決定部２０４と、隣接非存在ストレージ記憶部２０５から構成されている。なお、第１検索レベル決定部１０２ａと検索レベル決定部１０２、第１要素ベクトル決定部１０３ａと要素ベクトル決定部１０３、はそれぞれ同一とする。そのため、第１検索レベル決定部１０２ａ及び第１要素ベクトル決定部１０３ａに関する説明は省略する。
【００９９】
非存在ストレージ数記憶部２０１は、識別子は存在するが対応するストレージがない非存在ストレージ識別子ＮＯＮＳＩＤの数を記憶する。
【０１００】
第２検索レベル決定部２０２は、非存在ストレージ識別子ＮＯＮＳＩＤの数に基づいて第２の検索レベルＬｅｖ０２を計算する。
【０１０１】
第２要素ベクトル決定部２０３は、ストレージ装置２０の非存在ストレージ識別子ＮＯＮＳＩＤの第２の要素ベクトルＶＣ０２を計算する。
【０１０２】
隣接非存在ストレージ決定部２０４は、隣接非存在ストレージ記憶部２０５に記憶させる非存在ストレージ識別子ＮＯＮＳＩＤを生成する。
【０１０３】
隣接非存在ストレージ記憶部２０５は、非存在ストレージ識別子ＮＯＮＳＩＤと、非存在ストレージ識別子ＮＯＮＳＩＤを管理するストレージ装置に関する情報である隣接非存在ストレージ情報を記憶する。
【０１０４】
図８においても、通信部１０９は移動先ストレージ決定部１０８と接続されているが、必要に応じてストレージ装置２０内の他の各部と情報の送受信が可能であるものとする。
【０１０５】
次に、ストレージ装置２０の動作について説明する。
【０１０６】
ストレージ装置２０は、オブジェクトデータを記憶すると共に、外部から受け付けたアクセス命令を処理する。ストレージ装置２０の実行するアクセス命令の処理には２つの場面が考えられる。
【０１０７】
第１に、ストレージ装置２０自身がオブジェクトデータを記憶しており、アクセス命令に従った処理（ライト処理又はリード処理）を実行し、実行結果を、アクセス命令を発行した装置等に返答する場合である。
【０１０８】
第２に、ストレージ装置２０自身ではオブジェクトデータを記憶しておらず、オブジェクトデータを記憶している他のストレージ装置にアクセス命令を転送する場合である。この際の転送は、ストレージ装置２０よりもオブジェクトデータを記憶しているストレージ装置により近いストレージ装置に対して行う。ストレージ識別子及び転送先のストレージを決定する手順については後述する。
【０１０９】
また、オブジェクトデータと対になるオブジェクトデータ識別子が存在する。オブジェクトデータ識別子は、オブジェクトデータを記憶しているストレージ装置を明示する。外部からアクセス命令がストレージ装置２０に入力されると共に、オブジェクトデータ識別子も入力される。
【０１１０】
オブジェクトデータ識別子は、識別子入力部１０６を介してストレージ装置２０に入力される。ストレージ装置２０の記憶ストレージ決定部１０７において、オブジェクトデータ識別子に基づき、記憶ストレージを決定する。
【０１１１】
さらに、記憶ストレージに関する情報は、移動先ストレージ決定部１０８に入力される。また、システム内に含まれる他のストレージ装置からアクセス命令が転送されてくる場合もある。この場合には、既に記憶ストレージは決定されており、アクセス命令と共に記憶ストレージに関する情報が転送されてくる。
【０１１２】
そのため、記憶ストレージに関する情報は、識別子入力部１０６及び記憶ストレージ決定部１０７を介して移動先ストレージ決定部１０８に入力されることになる。
【０１１３】
移動先ストレージ決定部１０８は、ストレージ装置２０自身が、目的とするオブジェクトデータを記憶しているか否かを判定する。その際の判定には、隣接ストレージ記憶部１０５に記憶している隣接ストレージ情報と、隣接非存在ストレージ記憶部２０５に記憶している隣接非存在ストレージ情報と、記憶ストレージに関する情報と、を使用する。
【０１１４】
ストレージ装置２０自身がオブジェクトデータを記憶している場合には、データ記憶部１１０にアクセスし、オブジェクトデータを、アクセス命令の発行元であるストレージ装置又は外部装置に返答する。
【０１１５】
ストレージ装置２０がオブジェクトデータを記憶していない場合には、通信部１０９を介して、移動先ストレージ決定部１０８が決定した転送先ストレージに対し、アクセス命令及び記憶ストレージに関する情報を転送する。
【０１１６】
続いて、隣接非存在ストレージ情報の記憶アルゴリズム、転送先ストレージの決定アルゴリズムについて説明する。なお、隣接ストレージ情報の記憶アルゴリズムについては、既に説明を行ったのでさらなる説明は省略する。
【０１１７】
初めに、隣接非存在ストレージ情報の記憶アルゴリズムについて説明する。
【０１１８】
図９は、隣接非存在ストレージ情報の記憶アルゴリズムの一例を示すフローチャートである。
【０１１９】
ステップＳ１１では、第２検索レベル決定部２０２において、第２の検索レベルＬｅｖ０２を算出する。非存在ストレージ数記憶部２０１では、非存在ストレージ識別子ＮＯＮＳＩＤの数を示す非存在ストレージ数ＮＯＮＳＮＯを記憶している。第２検索レベル決定部２０２は、この非存在ストレージ数ＮＯＮＳＮＯの２を底とした対数を計算した後、小数点以下を切り上げ、さらに、１を減算して、第２の検索レベルＬｅｖ０２を算出する。算出された第２の検索レベルＬｅｖ０２が負の値の場合には、第２の検索レベルＬｅｖ０２は０とする。
【０１２０】
なお、連続する非存在ストレージ識別子ＮＯＮＳＩＤは、一塊の非存在ストレージ識別子ＮＯＮＳＩＤとして考える。つまり、非存在ストレージ識別子ＮＯＮＳＩＤが連続していたとしても、非存在ストレージ識別子ＮＯＮＳＩＤが他の非存在ストレージ識別子ＮＯＮＳＩＤを代表する。
【０１２１】
ステップＳ１２では、第２要素ベクトル決定部２０３において、第２の要素ベクトルＶＣ０２を算出する。
【０１２２】
第２要素ベクトル決定部２０３は、非存在ストレージ識別子ＮＯＮＳＩＤのハッシュ値を計算する。計算したハッシュ値を２進数表記し、第２の検索レベルＬｅｖ０２に相当する桁数を持つように剰余計算を行った結果を第２の要素ベクトルＶＣ０２とする。
【０１２３】
ステップＳ１３では、隣接非存在ストレージ決定部２０４において、隣接非存在ストレージ情報を決定する。その際に、隣接非存在ストレージ決定部２０４ではアルゴリズムＣにより、隣接非存在ストレージ情報を決定する。アルゴリズムＣについては後述する。
【０１２４】
ステップＳ１４では、隣接非存在ストレージ記憶部２０５に隣接非存在ストレージ情報を記憶する。
【０１２５】
続いて、アルゴリズムＣについて説明する。
【０１２６】
アルゴリズムＣは、アルゴリズムＡと同様に、上述の組織化に相当する処理である。アルゴリズムＣは、隣接非存在ストレージを第２の検索レベルＬｅｖ０２毎に決定していく。その際、上述のとおり、非存在ストレージ識別子ＮＯＮＳＩＤが連続する場合には一塊の非存在ストレージ識別子ＮＯＮＳＩＤとして取り扱う。つまり、１つの非存在ストレージ識別子ＮＯＮＳＩＤが連続する他の非存在ストレージ識別子ＮＯＮＳＩＤを代表する。
【０１２７】
ここで、代表する非存在ストレージ識別子ＮＯＮＳＩＤを選択する方法には、様々な方法が考えられるが、本実施形態では、ストレージ装置２０のストレージ識別子ＳＩＤからみて最も外側（最も遠い）に存在する非存在ストレージ識別子ＮＯＮＳＩＤを、代表する非存在ストレージ識別子ＮＯＮＳＩＤと定める。
【０１２８】
非存在ストレージ識別子ＮＯＮＳＩＤの第２の要素ベクトルＶＣ０２は、非存在ストレージ識別子ＮＯＮＳＩＤからハッシュ値を計算し、２進数表記で第２の検索レベルＬｅｖ０２に相当する桁数を持つように剰余計算を行った結果である。
【０１２９】
さらに、非存在ストレージ識別子ＮＯＮＳＩＤを管理する管理ストレージは、ストレージ装置２０を基点として非存在ストレージ識別子ＮＯＮＳＩＤの１つ外側のストレージ識別子１０６７を持つストレージ装置とする。
【０１３０】
ここで、管理ストレージが存在しない場合もあるが、そのような場合には管理ストレージが存在しないことを記憶する。又は、ストレージ識別子ＳＩＤの上限と下限が輪状に繋がっていると考えて、１つ外側のストレージ識別子ＳＩＤを持つ管理ストレージを記憶することも可能である。
【０１３１】
図１０は、アルゴリズムＣの処理内容の一例を示すフローチャートである。
【０１３２】
ステップＳ２０１では、Ｌｅｖ０２（０）について、隣接非存在ストレージを判定する。本ステップでは、ストレージ装置２０のストレージ識別子ＳＩＤよりも小さく、かつ、ストレージ装置２０のストレージ識別子ＳＩＤに最も近い非存在ストレージ識別子ＮＯＮＳＩＤと、この非存在ストレージ識別子ＮＯＮＳＩＤを管理する管理ストレージを記憶する。
【０１３３】
さらに、ストレージ装置２０のストレージ識別子ＳＩＤよりも大きく、かつ、ストレージ装置２０のストレージ識別子ＳＩＤに最も近い非存在ストレージ識別子ＮＯＮＳＩＤと、この非存在ストレージ識別子ＮＯＮＳＩＤを管理する管理ストレージを記憶する。
【０１３４】
ステップＳ２０２では、Ｌｅｖ０２（１）について、隣接非存在ストレージを判定する。Ｌｅｖ０２（１）では、ストレージ装置２０と第２要素ベクトルの上位１桁が同じ非存在ストレージ識別子ＮＯＮＳＩＤであって、ストレージ装置２０のストレージ識別子ＳＩＤよりも小さく、かつ、ストレージ装置２０のストレージ識別子ＳＩＤに最も近い非存在ストレージ識別子ＮＯＮＳＩＤ及びその管理ストレージを記憶する。
【０１３５】
さらに、ストレージ装置２０のストレージ識別子ＳＩＤよりも大きく、かつ、ストレージ装置２０のストレージ識別子ＳＩＤに最も近い非存在ストレージ識別子ＮＯＮＳＩＤとその管理ストレージを記憶する。
【０１３６】
ステップＳ２０ｎでは、Ｌｅｖ０２（ｎ）について、ストレージ装置２０と第２の要素ベクトルＶＣ０２の上位（ｎ）桁が同じ非存在ストレージ識別子ＮＯＮＳＩＤであって、ストレージ装置２０のストレージ識別子ＳＩＤよりも小さく、かつ、ストレージ装置２０のストレージ識別子ＳＩＤに最も近い非存在ストレージ識別子ＮＯＮＳＩＤ及びその管理ストレージを記憶する。
【０１３７】
さらに、ストレージ装置２０のストレージ識別子ＳＩＤよりも大きく、かつ、ストレージ装置２０のストレージ識別子ＳＩＤに最も近い非存在ストレージ識別子ＮＯＮＳＩＤ及びその管理ストレージを記憶する。
【０１３８】
なお、ストレージ識別子ＳＩＤの限界に至るまで、第２の要素ベクトルＶＣ０２の上位（ｎ）桁がストレージ装置２０と同じ非存在ストレージ識別子ＮＯＮＳＩＤを検索したが発見できない場合には、非存在ストレージ識別子ＮＯＮＳＩＤとその管理ストレージが存在しないことを記憶する。又は、ストレージ識別子ＳＩＤの上限と下限が輪状に繋がっていると考え、最も近い非存在ストレージ識別子ＮＯＮＳＩＤとその管理ストレージを記憶することも可能である。
【０１３９】
また、非存在ストレージ識別子ＮＯＮＳＩＤを記憶する際には、代表する非存在ストレージ識別子ＮＯＮＳＩＤだけではなく、一塊として扱った他の非存在ストレージ識別子ＮＯＮＳＩＤを記憶する。
【０１４０】
本例では第２の要素ベクトルＶＣ０２の上位から指定した桁数一致することを判定条件としているが、これに限定するものではなく、第２の要素ベクトルＶＣ０２の下位から指定した桁数一致することを判定条件とする方法なども考えられる。
【０１４１】
次に、アルゴリズムＣによる隣接ストレージの判定の具体例を説明する。
【０１４２】
図１１は、アルゴリズムＣを説明するための図である。
【０１４３】
図１１では、ストレージ識別子ＳＩＤとして、連続した０から７までの整数からなるストレージ番号が用いられている。ノードＡには０、ノードＢには１、ノードＣには３、ノードＤには４、ノードＥには７がそれぞれストレージ番号として割り当てられている。
【０１４４】
ストレージ番号のうち、２、５、６は対応するノードが存在せず、これらの番号は非存在ストレージ識別子ＮＯＮＳＩＤとなる。ここでは、ノードＣの隣接非存在ストレージ情報について考える。
【０１４５】
非存在ストレージ識別子ＮＯＮＳＩＤの２を管理する管理ストレージはノードＢである。また、非存在ストレージ識別子ＮＯＮＳＩＤの５と６は連続しているので、一塊の非存在ストレージ識別子ＮＯＮＳＩＤと考えることができる。従って、代表する非存在ストレージ識別子ＮＯＮＳＩＤは６と定まり、管理ストレージはノードＥである。
【０１４６】
非存在ストレージ識別子ＮＯＮＳＩＤは２と６であるため、第２の検索レベルＬｅｖ０２は０となる（非存在ストレージ識別子ＮＯＮＳＩＤの５と６は連続するため６が代表する）。
【０１４７】
非存在ストレージ識別子ＮＯＮＳＩＤの２のハッシュ値を計算し、剰余計算したものが、非存在ストレージ識別子ＮＯＮＳＩＤの２の第２の要素ベクトルＶＣ０２となる。しかし、第２の検索レベルＬｅｖ０２が０であるため、第２の要素ベクトルＶＣ０２は存在しないことになる。ノードＣと、非存在ストレージ識別子ＮＯＮＳＩＤの５及び６にも、第２の要素ベクトルＶＣ０２は存在しない。
【０１４８】
Ｌｅｖ０２（０）ではノードＣと隣接し、非存在ストレージ識別子ＮＯＮＳＩＤを選択するので、非存在ストレージ識別子ＮＯＮＳＩＤの２及びそれに対応する管理ノードＢが、隣接非存在ストレージ情報として選択される。同時に、非存在ストレージ識別子ＮＯＮＳＩＤの５と６に対応する管理ノードＥが隣接非存在ストレージ情報として選択される。
【０１４９】
以上が、アルゴリズムＣについての説明である。
【０１５０】
なお、オブジェクトデータには、数値データやアルゴリズム等の所定の処理が記述されたプログラムなどが考えられる。さらに、本実施形態に係るストレージ装置２０を含むシステムは、物理的に複数のストレージ装置が存在し、通信線により接続されているものとして説明したが、これに限定する趣旨ではない。ストレージ装置内部に複数の仮想ストレージ装置が構成される場合や、複数のストレージ装置が存在し、さらに内部で仮想ストレージ装置を構成している場合も含む。このことは、以下の実施形態においても同様である。
【０１５１】
本実施形態によれば、オブジェクトデータを複数のストレージ装置に分散して記憶するシステムにおいて、対応するストレージ装置が存在しない非存在ストレージ識別子ＮＯＮＳＩＤが少ない場合に、システム内に存在するストレージ識別子ＳＩＤの情報のみを用いてオブジェクトデータを記憶するストレージに到達する方法と比較して、少ないホップ数でオブジェクトデータを記憶するストレージ装置にアクセスすることができる。
【０１５２】
この際に、ストレージ装置が追加して記憶しなければならない情報は対応するストレージ装置が存在しないストレージ識別子の数の対数のオーダーである。よって、本実施形態に係る手法によれば、例えば、大規模なデータセンタのように膨大なストレージ装置を対象とするシステムであっても、少ない情報を記憶するだけで、少ないホップ数でオブジェクトデータを記憶しているストレージ装置にアクセスすることができる。
【０１５３】
［具体例］
次に、ストレージ装置２０の構成及び動作を具体例と共に説明する。
【０１５４】
図１２は、第１の実施形態に係るストレージ装置２０のハードウエア構成の一例を示す図である。図１２は、ストレージ装置２０を実現可能なコンピュータの一構成例であって、第１の実施形態における各機能を実現可能なハードウエア環境を表す。
【０１５５】
図１２に示すハードウエア構成は、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）３０１と、ＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）３０２と、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）３０３と、ハードディスク（記憶装置）３０４と、通信インターフェイス３０５から構成されている。これらの各構成要素は、バスを介して相互に接続されている。
【０１５６】
ここで、ハードディスク３０４自体が第１の実施形態におけるストレージ装置として機能する場合も想定される。そして、フローチャート等（図５、図６、図９、図１０）を用いて説明した機能は、そのような機能を実現可能なプログラムの供給を受けた後、そのプログラムを、ＣＰＵ３０１に読み出して実行することによって達成される。また、当該装置内に供給されたプログラムは、読み書き可能なＲＡＭ３０２やハードディスク３０４に格納することも可能である。
【０１５７】
また、プログラムの供給方法は、ＣＤ−ＲＯＭ等の各種記憶媒体を介してインストールする方法や、インターネット等の通信回線を介して外部よりダウンロードする方法等の方法を用いることができる。そして、このような場合において、プログラムのコード或いは記憶媒体により提供される。但し、第１の実施形態において説明したストレージ装置２０は専用のハードウエアによって実現しても良い。
【０１５８】
図１３は、ストレージシステムに５台のストレージ２０ａ乃至２０ｅが含まれていることを示している。
【０１５９】
５台のストレージ装置は、それぞれ識別子としてのストレージ番号を持っている。ストレージ２０ａはストレージ番号として１、ストレージ２０ｂはストレージ番号として３、ストレージ２０ｃはストレージ番号として４、ストレージ２０ｄはストレージ番号として６、ストレージ２０ｅはストレージ番号として７、をそれぞれ持つものとする。
【０１６０】
初めに、隣接ストレージ情報の計算を行う（図１４参照）。ストレージ数は５であるので、第１の検索レベルＬｅｖ０１は２である。次に、各ストレージのストレージ番号からハッシュ値を算出した結果を４で剰余演算すると、第１の要素ベクトルＶＣ０１の２進数表記が求めることができる。
【０１６１】
その結果、ストレージ２０ａの第１の要素ベクトルＶＣ０１は０１、ストレージ２０ｂの第１の要素ベクトルＶＣ０１は１０、ストレージ２０ｃの第１の要素ベクトルＶＣ０１は００、ストレージ２０ｄの第１の要素ベクトルＶＣ０１は０１、ストレージ２０ｅの第１の要素ベクトルＶＣ０１は１１となる。
【０１６２】
次に、隣接ストレージ情報の決定にあたり、第１の検索レベルＬｅｖ０１が０の場合について考える。
【０１６３】
ストレージ２０ａは、ストレージ２０ａ自身よりもストレージ番号が小さいストレージが存在しないこと、及び、ストレージ２０ｂを記憶する。ストレージ２０ｂは、ストレージ２０ａとストレージ２０ｃを記憶する。ストレージ２０ｃは、ストレージ２０ｂとストレージ２０ｄを記憶する。ストレージ２０ｄは、ストレージ２０ｃとストレージ２０ｅを記憶する。ストレージ２０ｅはストレージ２０ｄとストレージ２０ｅ自身よりもストレージ番号が大きいストレージが存在しないことを記憶する。
【０１６４】
次に、第１の検索レベルＬｅｖ０１が１の場合について考える。
【０１６５】
ストレージ２０ａは、ストレージ２０ａ自身よりもストレージ番号が小さいストレージが存在しないこと、及び、ストレージ２０ｃを記憶する。ストレージ２０ｂは、ストレージ２０ｂ自身よりもストレージ番号が小さいストレージが存在しないこと、及び、ストレージ２０ｅを記憶する。ストレージ２０ｃは、ストレージ２０ａとストレージ２０ｄを記憶する。ストレージ２０ｄは、ストレージ２０ｃとストレージ２０ｄ自身よりもストレージ番号が大きいストレージが存在しないことを記憶する。ストレージ２０ｅは、ストレージ２０ｂとストレージ２０ｅよりもストレージ番号が大きいストレージが存在しないことを記憶する。
【０１６６】
続いて、第１の検索レベルＬｅｖ０１が２の場合について考える。
【０１６７】
ストレージ２０ａは、ストレージ２０ａ自身よりもストレージ番号が小さいストレージが存在しないこと、及びストレージ２０ｄを記憶する。ストレージ２０ｂは、ストレージ２０ｂ自身よりもストレージ番号が小さいストレージが存在しないこと、及び、ストレージ２０ｂよりもストレージ番号が大きいストレージが存在しないことを記憶する。ストレージ２０ｃは、ストレージ２０ｃ自身よりもストレージ番号が小さいストレージが存在しないこと、及び、ストレージ２０ｃよりもストレージ番号が大きいストレージが存在しないことを記憶する。ストレージ２０ｄは、ストレージ２０ａ、及び、ストレージ２０ｄ自身よりもストレージ番号が大きいストレージが存在しないことを記憶する。ストレージ２０ｅは、ストレージ２０ｅ自身よりもストレージ番号が小さいストレージが存在しないこと、及びストレージ２０ｅよりもストレージ番号が大きいストレージが存在しないことを記憶する。
【０１６８】
次に、隣接非存在ストレージ情報の計算について説明する。
【０１６９】
図１５は、隣接非存在ストレージ情報の計算を説明するための図である。図１４におけるストレージ番号は０から７の整数である。また、非存在ストレージ数ＮＯＮＳＮＯは３であるので、第２の検索レベルＬｅｖ０２は１となる。さらに、各ストレージ装置のストレージ番号と、各非存在ストレージの非存在ストレージ番号のハッシュ値を計算した結果を２で剰余演算すると、第２の要素ベクトルＶＣ０２を求めることができる。その結果、非存在ストレージ番号０は１、ストレージ番号１は０、非存在ストレージ番号２は０、ストレージ番号３は１、ストレージ番号４は０、非存在ストレージ番号５は１、ストレージ番号６は１、ストレージ番号７は１、がそれぞれ求まる。
【０１７０】
次に、隣接非存在ストレージ情報を決定する。
【０１７１】
初めに、第２の検索レベルＬｅｖ０２が０の場合について考える。
【０１７２】
ストレージ２０ａは、非存在ストレージ番号０と、その非存在ストレージを管理するストレージが存在しないこと（０よりも小さいストレージ番号を持つストレージがないこと）と、非存在ストレージ番号２とその非存在ストレージ番号を管理するストレージ２０ｂと、を記憶する。ストレージ２０ｂは、非存在ストレージ番号２とその非存在ストレージを管理するストレージ２０ａと、非存在ストレージ番号５とその非存在ストレージを管理するストレージ２０ｄと、を記憶する。ストレージ２０ｃは、非存在ストレージ番号２とその非存在ストレージを管理するストレージ２０ａと、非存在ストレージ番号５とその非存在ストレージを管理するストレージ２０ｄを記憶する。ストレージ２０ｄは、非存在ストレージ番号５とその非存在ストレージを管理するストレージ２０ｃと、ストレージ２０ｄ自身のストレージ番号よりも非存在ストレージ番号が大きい非存在ストレージが存在しないことを記憶する。ストレージ２０ｅは、非存在ストレージ番号５とその非存在ストレージを管理するストレージ２０ｃと、ストレージ２０ｅ自身のストレージ番号よりも非存在ストレージ番号が大きい非存在ストレージが存在しないことを記憶する。
【０１７３】
続いて、第２の検索レベルＬｅｖ０２が１の場合について考える。
【０１７４】
ストレージ２０ａは、非存在ストレージ番号２とその非存在ストレージを管理するストレージ２０ｂと、ストレージ２０ａ自身のストレージ番号よりも非存在ストレージ番号が小さい非存在ストレージが存在しないことを記憶する。ストレージ２０ｂは、非存在ストレージ番号０とその非存在ストレージを管理するストレージが存在しないことと、非存在ストレージ番号５とその非存在ストレージ番号を管理するストレージ２０ｄを記憶する。ストレージ２０ｃは、非存在ストレージ番号２とその非存在ストレージを管理するストレージ２０ａと、ストレージ２０ｃ自身のストレージ番号よりも非存在ストレージ番号が大きい非存在ストレージが存在しないことを記憶する。ストレージ２０ｄは、非存在ストレージ番号５とその非存在ストレージを管理するストレージ２０ｃと、ストレージ２０ｄ自身のストレージ番号よりも非存在ストレージ番号が大きい非存在ストレージが存在しないことを記憶する。ストレージ２０ｅは、非存在ストレージ番号５とその非存在ストレージを管理するストレージ２０ｃと、ストレージ２０ｅ自身のストレージ番号よりも非存在ストレージ番号が大きい非存在ストレージが存在しないことを記憶する。
【０１７５】
以上より、各ストレージが記憶する他のストレージ装置の情報数は、（ｌｏｇ（ストレージ装置数）の小数点以下を切り上げた数）のオーダーとなる。また、各ストレージが記憶する他の隣接非存在ストレージの情報数は（ｌｏｇ（隣接非存在ストレージ装置数）の小数点以下を切り上げた数）のオーダーとなる。
【０１７６】
なお、複数のストレージ装置２０を含むストレージシステムでは、次のように、オブジェクトデータを記憶するストレージ装置を決定することができる。
【０１７７】
オブジェクトデータの識別子からハッシュ値を計算し、ハッシュ値をストレージ番号が取れる最大の数に１を加えた数で剰余計算した結果と同じストレージ番号を持つストレージ装置の存在を確認する。
【０１７８】
このようなストレージ装置が存在する場合は、そのストレージ装置にオブジェクトデータを記憶し、そのようなストレージ装置が存在しない場合はハッシュ値からさらにハッシュ値を計算し、ストレージ番号が取れる最大の数に１を加えた数での剰余計算を、存在するストレージ番号と同じ値を出力するまで繰り返す。
【０１７９】
例えば、ストレージ２０ｅが、オブジェクトデータ識別子を持つオブジェクトデータをストレージシステムに記憶させるアクセス命令を発行した場合について考える。オブジェクトデータ識別子からハッシュ値を計算し、ストレージ番号が取れる最大の数に１を加えた数で剰余計算した結果は０であったとする。
【０１８０】
この場合には、ストレージ番号０を持つストレージ装置が存在することを確認する。ストレージ２０ｅは、ストレージ２０ｅ自身がストレージ番号０を持つストレージではないことを確認した後、ストレージ２０ｅが持つ非存在ストレージ番号の中にストレージ番号０が含まれていないことを確認する。
【０１８１】
さらに、ストレージ２０ｅが持つストレージ番号及び非存在ストレージ番号であって、ストレージ番号０とストレージ番号７の間にあり、かつ、最もストレージ番号０に近い番号を選択する。この場合には、ストレージ番号３を持つ、ストレージ２０ｂが選択される。従って、アクセス命令をストレージ２０ｂに転送する。
【０１８２】
アクセス命令を受信したストレージ２０ｂは、ストレージ２０ｂ自身がストレージ番号０を持つストレージ装置ではないことを確認した後、ストレージ２０ｂが持つ非存在ストレージ番号にストレージ番号０が含まれていることを確認する。このことにより、ストレージ番号０を持つストレージが存在しないことが確認できる。オブジェクトデータ識別子のハッシュ結果から、さらに、ハッシュ値を計算し、ストレージ番号が取れる最大の数に１を加えた数での剰余計算をする。その結果が５であったとする。
【０１８３】
すると、ストレージ２０ｂはストレージ２０ｂ自身がストレージ番号５を持つストレージ装置ではないことを確認した後、ストレージ２０ｂが持つ非存在ストレージ番号にストレージ番号５が含まれることを確認する。このことにより、ストレージ番号５を持つストレージ装置が存在しないことが確認できる。
【０１８４】
そのため、オブジェクトデータ識別子のハッシュ結果から、さらにハッシュ値を計算し、ストレージ番号が取れる最大の数に１を加えた数での剰余計算をする。その結果が１であったとする。
【０１８５】
すると、ストレージ２０ｂはストレージ２０ｂ自身がストレージ番号１を持つストレージ装置ではないことを確認した後、ストレージ２０ｂが持つ非存在ストレージ番号にストレージ番号１が含まれないことを確認する。そして、ストレージ２０ｂが持つストレージ番号と非存在ストレージ番号の中であって、ストレージ番号１とストレージ番号３の間にあり、最もストレージ番号１に近い番号を選ぶ。
【０１８６】
この場合、ストレージ番号１を持つストレージ２０ａが選択される。従って、アクセス命令はストレージ２０ａに転送される。次に、ストレージ２０ａはストレージ２０ａ自身がストレージ番号１であることを確認する。その結果、オブジェクトデータを記憶するストレージはストレージ２０ａと判定され、ストレージ２０ａはアクセス命令を実行する。
【０１８７】
［第２の実施形態］
続いて、第２の実施形態について図面を参照して詳細に説明する。
【０１８８】
図１６は、本実施形態に係るストレージ装置３０の内部構成の一例を示す図である。図１６において図８と同一構成要素には、同一の符号を表し、その説明を省略する。
【０１８９】
ストレージ装置３０は、ストレージ装置又は他の装置が発行したアクセス命令を受信して、アクセス命令のアクセス先のオブジェクトデータを記憶する場合はアクセス命令を実行する。
【０１９０】
オブジェクトデータを記憶しない場合は、予め決められたアルゴリズムに基づいてアクセス命令を他のストレージ装置に転送する。なお、本実施形態においても、オブジェクトデータは、ストレージ装置３０に格納される数値データ及び所定の処理（プロセス、機能、アルゴリズム）が記述されたソフトウェアプログラムの少なくともいずれかを構成するものとする。
【０１９１】
第１の実施形態に係るストレージ装置２０とストレージ装置３０の相違点は、記憶ストレージ決定部１０７ａにおける記憶ストレージの選択処理と、移動先ストレージ決定部１０８ａにて実行するアルゴリズムである。ストレージ装置３０の記憶ストレージ決定部１０７ａは、システム内に存在しないストレージ装置を記憶ストレージとして選択する可能性がある。
【０１９２】
また、移動先ストレージ決定部１０８ａにて実行するアルゴリズムをアルゴリズムＤとする。ストレージ装置３０では、記憶ストレージ決定部１０７ａが、システム内に存在しない記憶ストレージを選択する可能性があり、そのような場合に、記憶ストレージの選択を再度実行し、システム内に存在する記憶ストレージを選択するまで処理を繰り返す記憶先ストレージ決定方法を使用する。
【０１９３】
ここで、アルゴリズムＤについて説明する。
【０１９４】
アルゴリズムＤは、記憶ストレージが存在することが確認されている場合と確認されていない場合で処理が異なるアルゴリズムである。
【０１９５】
図１７は、アルゴリズムＤを説明するためのフローチャートの一例である。
【０１９６】
ステップＳ３０１において、記憶ストレージが存在することが確認されているか否かを判定する。存在が確認されていれば、ステップＳ３０２に遷移する。存在が確認されていなければ、ステップＳ３０３に遷移する。
【０１９７】
ステップＳ３０２では、隣接ストレージ情報及び隣接非存在ストレージ情報に含まれるストレージ装置から、ストレージ識別子が、アルゴリズムＤを実行しているストレージ装置３０のストレージ識別子と記憶ストレージのストレージ識別子の間にあり、かつ、記憶ストレージのストレージ識別子に最も近いストレージ識別子を持つストレージ装置を選択する。この際、記憶ストレージを転送先ストレージとして選択する場合がある。
【０１９８】
ステップＳ３０３では、隣接非存在ストレージ情報に記憶ストレージが含まれているか否かを判定する。記憶ストレージが含まれている場合には、ステップＳ３０４に遷移する。記憶ストレージが含まれていない場合には、ステップＳ３０５に遷移する。
【０１９９】
ステップＳ３０４は、隣接非存在ストレージ情報に記憶ストレージが含まれている、つまり、記憶ストレージが存在しないことを確認した場合の処理である。ステップＳ３０４では、記憶ストレージ決定部１０７ａに、記憶ストレージ再計算命令を返して処理を戻す。その後、記憶ストレージ決定部１０７ａに、次の記憶ストレージを出力させ、移動先ストレージ決定部１０８ａの処理を再度実行する。
【０２００】
ステップＳ３０５は、隣接非存在ストレージ情報に記憶ストレージが含まれていないことを確認した場合の処理である。ステップＳ３０５では、上述の記憶ストレージが存在することが確認されている場合の処理と同様の処理を実行する（ステップＳ３０２と同様の処理を実行する）。
【０２０１】
このような第２の実施形態によれば、上述した第１の実施形態と同様に、複数のストレージ装置に分散してオブジェクトデータを記憶する環境、かつ、対応するストレージ装置が存在しない識別子が少ない環境において、対応するストレージ装置が存在する識別子の情報のみを用いてオブジェクトデータを記憶するストレージ装置に到達する関連技術として実施例で説明した非特許文献１に記載された方法と比較して、より少ないホップ数でオブジェクトデータを記憶するストレージにアクセスすることができる。
【０２０２】
また、この際に、ストレージ装置が追加して記憶しなければならない情報は、対応するストレージ装置が存在しない識別子の数の対数のオーダーである。よって、本実施形態に係る方法によれば、例えば、大規模なデータセンタのように膨大なストレージ装置を対象とするシステムであっても、少ない記憶情報、かつ、少ないホップ数でオブジェクトデータを記憶しているストレージ装置にアクセスすることができる。
【０２０３】
さらに、第２の実施形態ではオブジェクトデータを記憶するストレージ装置を選択するアルゴリズムが一時的に存在しないストレージ装置を選択する可能性があるアルゴリズムである場合でも少ないホップ数でオブジェクトデータを記憶しているストレージ装置にアクセスすることができる。
【０２０４】
ところで、上述した第１及び第２の実施形態においては、オブジェクトデータの配置先として、データを記憶するストレージ装置を想定した。そして、オブジェクトデータは、数値データ及び所定の処理（プロセス、機能、アルゴリズム）が記述されたソフトウェアプログラムの少なくともいずれかを構成すると仮定した。しかし、この範囲に限定する趣旨ではない。例えば、オブジェクトデータは、処理（命令、プロセス、機能、プログラムコード、アルゴリズム等）であっても良い。この場合、当該オブジェクトの配置先は、当該処理が実行されるプロセッサやＩＰコア（Ｉｎｔｅｌｌｅｃｔｕａｌ  Ｐｒｏｐｅｒｔｙ  Ｃｏｒｅ）などの演算実行環境（処理実行環境）である。
【０２０５】
さらに、配置先である演算実行環境に適用する実施形態の場合には、例えば、複数のサーバ間における負荷分散（ロードバランシング）などの処理効率を改善することができる。
【０２０６】
また、オブジェクトデータを物理的な実体のあるものと置き換え、ストレージ装置を物理的な実体のあるものの送り先もしくは保管場所と置き換えることも可能である。さらに、オブジェクトデータの配置先として複数のストレージ装置が選択されることも考えられる。
【０２０７】
最後に、好ましい形態を要約する。
【０２０８】
（形態１）上記第１の視点に係るオブジェクト配置装置のとおりである。
【０２０９】
（形態２）前記配置先探査部は、前記第１の識別子に関する情報の一部と、前記第２の識別子に関する情報の一部と、を用いてオブジェクトの配置先を探査するオブジェクト配置装置。
【０２１０】
（形態３）さらに、前記第１及び第２の識別子に基づいて、オブジェクトの配置先を決定する配置先決定部を備え、前記配置先決定部は、オブジェクトの配置先として、前記第２の配置先が指定された場合には、オブジェクトの配置先の指定と、オブジェクトの配置先の存在確認と、を繰り返すことで、前記第１の配置先を指定するオブジェクト配置装置。
【０２１１】
（形態４）前記配置先決定部は、オブジェクトの配置先として指定された数の配置先を指定すると共に、複数の前記配置先にオブジェクトを配置するオブジェクト配置装置。
【０２１２】
（形態５）前記オブジェクトは、予め定められた情報処理であって、前記配置先決定部は、前記情報処理が実行される実行先を決定するオブジェクト配置装置。
【０２１３】
（形態６）オブジェクトの配置先はストレージ装置であり、前記オブジェクトは、前記ストレージ装置に格納される数値データ及び所定の処理が記述されたソフトウェアプログラムの少なくとも何れかを構成するオブジェクトデータであるオブジェクト配置装置。
【０２１４】
（形態７）前記オブジェクトは物品であって、前記配置先決定部によって決定された配置先に物品を仕分けるよう決定するオブジェクト配置装置。
【０２１５】
（形態８）上記第２の視点に係るオブジェクト配置方法のとおりである。
【０２１６】
（形態９）前記配置先探査工程は、前記第１の識別子に関する情報の一部と、前記第２の識別子に関する情報の一部と、を用いてオブジェクトの配置先を探査するオブジェクト配置方法。
【０２１７】
（形態１０）さらに、前記第１及び第２の識別子に基づいて、オブジェクトの配置先を決定する配置先決定工程を含み、前記配置先決定工程は、オブジェクトの配置先として、前記第２の配置先が指定された場合には、オブジェクトの配置先の指定と、オブジェクトの配置先の存在確認と、を繰り返すことで、前記第１の配置先を指定するオブジェクト配置方法。
【０２１８】
（形態１１）上記第３の視点に係るプログラムのとおりである。
【０２１９】
（形態１２）前記配置先探査処理は、前記第１の識別子に関する情報の一部と、前記第２の識別子に関する情報の一部と、を用いてオブジェクトの配置先を探査するプログラム。
【０２２０】
（形態１３）さらに、前記第１及び第２の識別子に基づいて、オブジェクトの配置先を決定する配置先決定処理を含み、前記配置先決定処理は、オブジェクトの配置先として、前記第２の配置先が指定された場合には、オブジェクトの配置先の指定と、オブジェクトの配置先の存在確認と、を繰り返すことで、前記第１の配置先を指定するプログラム。
【０２２１】
本発明の全開示（請求の範囲を含む）の枠内において、さらにその基本的技術思想に基づいて、実施形態の変更・調整が可能である。また、本発明の請求の範囲の枠内において種々の開示要素（各請求項の各要素、各実施形態の各要素、各図面の各要素等を含む）の多様な組み合わせ、ないし、選択が可能である。すなわち、本発明は、請求の範囲を含む全開示、技術的思想にしたがって当業者であればなし得るであろう各種変形、修正を含むことは勿論である。
【符号の説明】
【０２２２】
１、１０、２０、２０ａ〜２０ｅ、３０  ストレージ装置
２、１０６  識別子入力部
３、１０７、１０７ａ  記憶ストレージ決定部
４、１０８、１０８ａ  移動先ストレージ決定部
５、１０５  隣接ストレージ記憶部
６、２０５  隣接非存在ストレージ記憶部
７、１０９  通信部
８、１１０  データ記憶部
１０１  ストレージ数記憶部
１０２  検索レベル決定部
１０２ａ  第１検索レベル決定部
１０３  要素ベクトル決定部
１０３ａ  第１要素ベクトル決定部
１０４  隣接ストレージ決定部
２０１  非存在ストレージ数記憶部
２０２  第２検索レベル決定部
２０３  第２要素ベクトル決定部
２０４  隣接非存在ストレージ決定部
３０１  ＣＰＵ
３０２  ＲＯＭ
３０３  ＲＡＭ
３０４  ハードディスク
３０５  通信インターフェイス
４００  オブジェクト配置装置
４０１  配置先探査部
【図１】
0006028728.tif 000002
【図２】
0006028728.tif 000003
【図３】
0006028728.tif 000004
【図４】
0006028728.tif 000005
【図５】
0006028728.tif 000006
【図６】
0006028728.tif 000007
【図７】
0006028728.tif 000008
【図８】
0006028728.tif 000009
【図９】
0006028728.tif 000010
【図１０】
0006028728.tif 000011
【図１１】
0006028728.tif 000012
【図１２】
0006028728.tif 000013
【図１３】
0006028728.tif 000014
【図１４】
0006028728.tif 000015
【図１５】
0006028728.tif 000016
【図１６】
0006028728.tif 000017
【図１７】
0006028728.tif 000018