(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2023-12-06
(45)【発行日】2023-12-14
(54)【発明の名称】動的適応型パーティション分割
(51)【国際特許分類】
G06F 16/176 20190101AFI20231207BHJP
【FI】
G06F16/176
(21)【出願番号】P 2022539389
(86)(22)【出願日】2019-12-27
(86)【国際出願番号】 US2019068666
(87)【国際公開番号】W WO2021133405
(87)【国際公開日】2021-07-01
【審査請求日】2022-07-13
(73)【特許権者】
【識別番号】520155228
【氏名又は名称】ヒタチ ヴァンタラ エルエルシー
(74)【代理人】
【識別番号】110000279
【氏名又は名称】弁理士法人ウィルフォート国際特許事務所
(72)【発明者】
【氏名】グリマルディ,ケビン カヌエッテ
(72)【発明者】
【氏名】モンゾン, ジョシュア ジェン
【審査官】松尾 真人
(56)【参考文献】
【文献】米国特許出願公開第2009/0157776(US,A1)
【文献】特開2001-142752(JP,A)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 16/00-16/958
(57)【特許請求の範囲】
【請求項1】
システムであって、
実行可能命令によって操作を実行するように構成された1又は複数のプロセッサを含み、
前記操作は、
前記1又は複数のプロセッサによって、複数のメタデータオブジェクトを含む第1パーティションを分割する命令を受信することと、
前記1又は複数のプロセッサによって、第1時点における前記複数のメタデータオブジェクトの状態の第1スナップショットを格納することと、
前記1又は複数のプロセッサによって、それぞれが前記メタデータオブジェクトの一部分を受信する第2パーティション及び第3パーティションであって、それぞれが
前記メタデータオブジェクトについてのメトリックスキーマを含む前記第2パーティション及び前記第3パーティションを作成することと、
前記1又は複数のプロセッサによって、前記第1スナップショットの情報に基づいて、前記第2パーティション及び前記第3パーティションの前記メトリックスキーマについての情報を決定することと、
前記決定することの間に、前記1又は複数のプロセッサによって、前記第1パーティションへのライトを受信することと、
前記1又は複数のプロセッサによって、前記ライトに基づいて前記第1パーティションを更新し、
前記第1パーティションの分割進行中における前記ライトによる影響を記録するデータ構造に
、前記ライトによる前記メトリックスキーマへの影響を示す分割更新コマンドを追加することと、
前記1又は複数のプロセッサによって、前記分割更新コマンドに基づいて前記第2パーティション又は前記第3パーティションの前記メトリックスキーマのうちの少なくとも1つを更新することと、
を含
み、
前記操作は、
前記第1スナップショット
の情報に基づいて、前記第2パーティション及び前記第3パーティションの前記メトリックスキーマについて
の情報を前記決定することの後に、前記第1パーティションの第2スナップショットを取得することと、
前記第2スナップショット
の情報及び前記データ構造に基づいて、前記第2パーティション及び前記第3パーティションの前記メトリックスキーマについての追加情報を決定することと、
をさらに含む、システム。
【請求項2】
前記操作は、
前記第2スナップショットの前記情報及び前記データ構造に基づいて、前記第2パーティション及び前記第3パーティションの前記メトリックスキーマについての前記追加情報を前記決定することの間に、前記第1パーティションへの追加ライトを受信することと、
前記追加ライトに基づいて前記第1パーティションを更新し、前記追加ライトに基づいて、追加分割更新コマンドを前記データ構造に追加することと、
前記追加分割更新コマンドに基づいて、前記第2パーティション又は前記第3パーティションの前記メトリックスキーマのうちの少なくとも1つを更新することと、
をさらに含む、請求項
1に記載のシステム。
【請求項3】
前記分割更新コマンドは、前記少なくとも1つのメトリックスキーマを、前記第2パーティション又は前記第3パーティションのそれぞれの1つにおける
前記ライトを反映した内容に更新するための情報を含む、請求項1に記載のシステム。
【請求項4】
前記操作は、前記
分割更新コマンドを用いて前記メトリックスキーマのうちの前記少なくとも1つを更新する間に、前記第1パーティションへのライトをブロックすることをさらに含む、請求項
3に記載のシステム。
【請求項5】
前記操作は、
前記分割更新コマンドに基づいて前記メトリックスキーマが更新された前記第2パーティション又は前記第3パーティションのうち
の少なくとも1つの前記メタデータオブジェクトの前記一部分を、前記ライトに基づいて更新することをさらに含む、請求項1に記載のシステム。
【請求項6】
前記操作は、
ライトを受信するため及び前記第1パーティションに削除のマーク付けを行うために、前記第2パーティション及び前記第3パーティションをアクティブ化することをさらに含む、請求項1に記載のシステム。
【請求項7】
前記操作は、
非暗号化ハッシュアルゴリズムを使用して、前記メタデータオブジェクトに前記第1パーティションのそれぞれのキー範囲に割り当てることをさらに含む、請求項1に記載のシステム。
【請求項8】
前記分割する命令は、前記第1パーティションに関連付けされた少なくとも1つの閾値を満たしている前記第1パーティションに少なくとも部分的に基づいて受信され、前記少なくとも1つの閾値は、閾値パーティションサイズ、トラフィック量閾値、応答待ち時間閾値、ディスク又はメモリ使用量閾値、又はネットワーク待ち時間閾値のうちの少なくとも1つを特定する、請求項1に記載のシステム。
【請求項9】
前記ライトは、
ライトコマンド、削除コマンド、作成コマンド又は更新コマンドのうちの少なくとも1つを含む、請求項1に記載のシステム。
【請求項10】
前記システムは、
ネットワークストレージと通信状態にあり、
前記メタデータオブジェクトは、前記ネットワークストレージによって格納されているオブジェクトに関する情報を含む請求項1に記載のシステム。
【請求項11】
方法であって、
演算装置によって、第1時点における第1パーティションの複数のデータオブジェクトの状態の第1スナップショットを格納することと、
前記演算装置によって、それぞれが前記データオブジェクトの一部分を受信する第2パーティション及び第3パーティションであって、それぞれが
前記データオブジェクトについてのメトリックスキーマを含む前記第2パーティション及び前記第3パーティションを作成することと、
前記演算装置によって、前記第1スナップショットの情報に基づいて、前記第2パーティション及び前記第3パーティションの前記メトリックスキーマについての情報を決定することと、
前記決定することの間に、1又は複数のプロセッサによって、前記第1パーティションへのライトを受信することと、
前記演算装置によって、前記ライトに基づいて前記第1パーティションを更新し、
前記第1パーティションの分割進行中における前記ライトによる影響を記録するデータ構造に
、前記ライトによる前記メトリックスキーマへの影響を示す分割更新コマンドを追加することと、
前記演算装置によって、前記分割更新コマンドに基づいて前記第2パーティション又は前記第3パーティションの前記メトリックスキーマのうちの少なくとも1つを更新することと、
を含
み、
前記第1スナップショットの情報に基づいて、前記第2パーティション及び前記第3パーティションの前記メトリックスキーマについての情報を前記決定することの後に、前記第1パーティションの第2スナップショットを取得することと、
前記第2スナップショットの情報及び前記データ構造に基づいて、前記第2パーティション及び前記第3パーティションの前記メトリックスキーマについての追加情報を決定することと、
をさらに含む、方法。
【請求項12】
前記分割更新コマンドは、
前記少なくとも1つのメトリックスキーマを、前記第2パーティション又は前記第3パーティションのそれぞれの1つにおける前記ライト
を反映した内容に更新するための情報を含む、請求項
11に記載の方法。
【請求項13】
1又は複数のプロセッサによって実行されたときに、1又は複数のプロセッサを操作を実行するように構成する命令を格納する1又は複数の非一時的なコンピュータ可読媒体であって、
前記操作は、
演算装置によって、第1時点における第1パーティションのデータの状態の第1スナップショットを格納することと、
前記演算装置によって、それぞれが前記データの一部分を受信する第2パーティション及び第3パーティションであって、それぞれが
前記データについてのメトリックスキーマを含む前記第2パーティション及び前記第3パーティションを作成することと、
前記演算装置によって、前記第1スナップショットの情報に基づいて、前記第2パーティション及び前記第3パーティションの前記メトリックスキーマについての情報を決定することと、
前記決定することの間に、前記1又は複数のプロセッサによって、前記第1パーティションへのライトを受信することと、
前記演算装置によって、前記ライトに基づいて前記第1パーティションを更新し、
前記第1パーティションの分割進行中における前記ライトによる影響を記録するデータ構造に
、前記ライトによる前記メトリックスキーマへの影響を示す分割更新コマンドを追加することと、
前記演算装置によって、前記分割更新コマンドに基づいて前記第2パーティション又は前記第3パーティションの前記メトリックスキーマのうちの少なくとも1つを更新することと、
を含
み、
前記操作は、
前記第1スナップショットの情報に基づいて、前記第2パーティション及び前記第3パーティションの前記メトリックスキーマについての情報を前記決定することの後に、前記第1パーティションの第2スナップショットを取得することと、
前記第2スナップショットの情報及び前記データ構造に基づいて、前記第2パーティション及び前記第3パーティションの前記メトリックスキーマについての追加情報を決定することと、
をさらに含む、1又は複数の非一時的なコンピュータ可読媒体。
【請求項14】
前記分割更新コマンドは、
前記少なくとも1つのメトリックスキーマを、前記第2パーティション又は前記第3パーティションのそれぞれの1つにおける前記ライト
を反映した内容に更新するための情報を含む、請求項
13に記載の1又は複数の非一時的なコンピュータ可読媒体。
【発明の詳細な説明】
【技術分野】
【0001】
本開示は、データベース、データストレージ及びストレージ管理の技術分野に関する。
【背景技術】
【0002】
多重パーティション型分散データベースは、「演算ノード」とも呼ばれる複数の演算装置の間でデータを分けることにより、水平方向のスケーラビリティを提供し得る。一例として、パーティションが大きくなると、パーティションは、例えば、パーティションのデータへのアクセスを向上させ、及び/又はパーティションのサイズを制御するために、分割、又はそれ以外の方法で2つのパーティションに分けてもよい。このように、パーティションを分割すると、融通性のあるストレージのスケーリングが可能になる。しかしながら、パーティション分割が実行されると、システムが元のパーティションと新たなパーティションとの間のデータの一貫性を維持するための処理を実行している間に、分割の対象となるパーティションへのアクセスが制限される場合がある。この時間の間における制限されたアクセスは、パーティションのデータを用いて作業するユーザにとって不便な場合がある。
【発明の概要】
【課題を解決するための手段】
【0003】
いくつかの実装形態は、第1時点における第1パーティションのデータの状態の第1スナップショットを格納する演算装置を含む。演算装置は、それぞれがデータの一部分を受信する第2パーティション及び第3パーティションであって、それぞれがメトリックスキーマを含む第2パーティション及び第3パーティションを作成してもよい。さらに、演算装置は、第1スナップショットの情報に基づいてメトリックスキーマについて情報を決定してもよい。メトリックスキーマについての情報を決定することの間に、演算装置は、第1パーティションへのライトを受信してもよい。演算装置は、ライトに基づいて第1パーティションを更新してもよく、ライトに基づいてデータ構造に分割更新コマンドを追加してもよい。加えて、演算装置は、分割更新コマンドに基づいて、第2パーティション又は第3パーティションのメトリックスキーマのうちの少なくとも1つを更新してもよい。
【図面の簡単な説明】
【0004】
添付図面を参照して詳細な説明を記載する。図において、参照番号の最も左側の桁はその参照番号が初めて登場した図を識別する。異なる図における同じ参照番号を使用することは、同様の又は同一のアイテム又は特徴を示している。
【0005】
【
図1】
図1は、いくつかの実装形態に係るパーティション分割されたデータを含むシステムのアーキテクチャ例を示す。
【0006】
【
図2】
図2は、いくつかの実装形態に係るパーティション分割の実行中のシステムの論理的構造例を示すブロック図である。
【0007】
【
図3】
図3は、いくつかの実装形態に係る第1パーティションを第2パーティションと、第3パーティションとに分割した後のシステムを示す。
【0008】
【
図4】
図4は、第1パーティション204(1)を2つの新たなパーティションに分割し、いくつかの実装形態に係る単純化された例を示すブロック図である。
【0009】
【
図5】
図5は、いくつかの実装形態に係るパーティション分割の開始前及び開始後の第1パーティションを示す。
【0010】
【
図6】
図6は、いくつかの実装形態に係る第1パーティションで新たなライトを受信できるようにしている間に第1パーティションのスナップショットを処理するする例を示す。
【0011】
【
図7】
図7は、いくつかの実装形態に係る新たなライトを第2パーティション及び第3パーティションに適用する例を示す。
【0012】
【
図8】
図8は、いくつかの実装形態に係る第1パーティションを分割した後の第1パーティション、第2パーティション、及び第3パーティションの構成例を示すブロック図である。
【0013】
【
図9】
図9は、いくつかの実装形態に係る動的適応型パーティション分割の処理例を示すフロー図である。
【0014】
【
図10】
図10は、本明細書に記載のシステムの機能性の少なくとも一部を実装するために使用し得る、サービス演算装置のコンポーネントの選択例を示す。
【発明を実施するための形態】
【0015】
本明細書に記載のいくつかの実装形態は、パーティション分割とも呼ばれる、1つのパーティションを複数のパーティションに分ける間にパーティションへのライトがブロックされる時間を短縮又は排除するための技術及び配置に向けられている。例えば、本明細書に記載の技術は、従来の技術と比較して、利用可能性の大幅な向上、及びデータアクセス中断時間の短縮につながるようにすることができる。いくつかの例では、非同期分割前最適化フェーズは、パーティションへのライトを阻止するパーティションのロックを伴わずに、バックグラウンドで実行してもよい。パーティションに対する分割操作の実行中に、システムによって典型的には阻止される可能性があるパーティションへのライト操作の例は、既存のオブジェクトへのデータのライト、オブジェクトの作成、オブジェクトの削除、メタデータへの変更などを含んでもよい。
【0016】
パーティション分割中にライトがブロックされる時間ウィンドウを削減するために、本明細書に記載のいくつかの例は、例えば、クライアントなどによるパーティションへのライトを許容する間に、パーティションのスナップショットを使用してパーティションの既存のレコードをバックグラウンド処理として処理してもよい。一例として、処理中に受信された新たなライトについてのレコード情報は、データ構造に分割更新コマンドとして格納されてもよい。パーティションに現在存在するすべてのレコードを処理した後、システムは、次に、ライトをブロックし、パーティションの既存のレコードが処理されていた間に受信したライトについての分割更新データ構造に格納されていたすべての新たなレコードを処理してもよい。追加的に、いくつかのケースでは、追加のスナップショットを新たなライトを含むパーティションについて取得してもよく、この追加のスナップショットは、ライトをブロックする必要性をさらに低減又は排除するために使用されてもよい。分割更新データ構造のすべてのレコードが処理された後、システムは、分割操作中に作成された新たなパーティションを起動し、古いパーティションを閉鎖し、削除のマークを付け、新たなパーティションによるライト操作を許容するようにしてもよい。これによって、分割処理がスナップショットに対して実行されている間に受信されたライトに対応する分割更新データ構造のごく一部のレコードの処理中にのみ、ライトをブロックすることにより、本明細書に記載の例は、クライアントがパーティションにライトできない時間を大幅に短縮する。
【0017】
加えて、パーティション分割を実行するとき、本明細書に記載の実装は、従来の技術と比較して向上した速度でパーティションの各レコードを処理することができる。例えば、指示されたスキーマに従ってパーティションのレコードを処理するとき、システムは各キーをハッシュして、各レコードを探し出してもよい。従来の技術のように、暗号による安全なハッシュアルゴリズムを採用するのではなく、本明細書に記載の実装は、低衝突の非暗号の安全なハッシュアルゴリズムを使用することにより、処理速度を向上させる。適切なハッシュアルゴリズムの一例としては、本明細書に記載のキーをハッシュすることに採用することができるFarmHash Fingerprint64オープンソースアルゴリズムがあり、これは、各レコードの処理時間を大幅に短縮する。このように、処理されるレコードの数を減らし、各レコードを処理する時間を速くすることにより、本明細書に記載の実装は、パーティション分割中にライトがブロックされる時間を大幅に短縮することができる。
【0018】
いくつかの実装では、各スキーマ(例えば、データベース、データ、又はその一部分の組織又は構造)は、クラスタ内の、又はその他の複数の演算ノードの1又は複数のパーティションから始まってもよい。特定のパーティションが大きくなると、パーティションはサイズ閾値、又はその他のメトリック閾値に達する可能性があり、このことがパーティションの分割をトリガする可能性がある。一例として、パーティションは、2つの子パーティションに動的に分けられてもよく、これらの子パーティションは、そのスキーマのスループットが実質的に2倍になるように、複数の演算ノードの別々のノードに分散されてもよい。
【0019】
本明細書に記載のいくつかの例は、水平方向のスケーラビリティを実現することが可能なRaftアルゴリズムベースのパーティション分割された分散データベースを含んでもよい。例えば、データベースは、スキーマの単一のパーティションから始まると仮定する。パーティションが大きくなると、パーティションは、2つ以上の子パーティションに分割してもよい。さらに、これらの子パーティションは、複数の演算ノード内で別々の演算ノードに分散させてもよく、これは、そのスキーマのスループットを向上する。データの取り込みが増えるにつれて、パーティションは大きくなり、本明細書に記載の実装に従って、継続的に動的に分割してもよい。これにより、パーティションのデータをクラスタ内のすべての演算装置全体にわたって別個のパーティションに分散させることが可能になり、クラスタの複数の演算装置の負荷を均一に分散させる。さらにまた、クラスタにより多くの演算装置が追加されると、パーティションの数は増え続けることができ、追加の演算ノードがシステムに加えられると、パーティションは、システム全体にわたって融通性を有して、且つ無制限に広がることができる。追加的に、非暗号の安全なハッシュ関数を使用することによって、パーティションのレコードは均一に広げられて、分散パーティションの最適なスループットを提供することができる。
【0020】
本明細書に記載の例は、複数のサービス演算装置にわたる分散パーティション構成に強い一貫性のあるデータのコピーを格納することによって、格納されたデータの利用可能性を大いに高める。場合によっては、分散パーティションの分散データの一貫性がRaft合意アルゴリズムを使用して維持されてもよい。Raft合意アルゴリズムでは、1つの演算ノードがリーダとして選ばれ、すべてのリード及びライト操作の取り扱いを担ってもよい。その他の演算ノードは、すべてのトランザクションのコピーを受信して、それらを自身のパーティションに更新できるようにするフォロワノードである。万一、リーダ演算ノードに故障が発生した場合には、フォロワ演算ノードのうちの1つがリーダとして選ばれ、リード及びライトトランザクションの取り扱いを引き継いでもよい。本明細書に記載のシステムのクライアント演算装置は、Raftのリーダである演算ノードを見つけ出し、その演算ノードに要求を指示することができる。パーティションのリーダを変更しなければならない場合には、クライアントは自動的に新たなリーダにルーティングされてもよい。
【0021】
説明の目的のために、本明細書に記載のいくつかの例では、パーティションは、メタデータデータベースのメタデータを含んでもよく、メタデータには、1又は複数の外部ストレージノード、システムのストレージノード、クラウドストレージデバイスなどに格納されているデータが記述されている。ただし、本明細書に記載の実装は、この使用に限定されず、他のタイプのデータ、データベース、ストレージ構成などに適用されてもよい。さらにまた、いくつかの実装例は、分散メタデータデータベースを使用してデータの格納を管理するために、クラウドストレージ又は他のネットワークストレージシステムと通信する1又は複数のサービス演算装置の環境において説明されている。さらにまた、本明細書に記載の例ではパーティション分割を説明しているが、本明細書に記載の技術は、パーティションのマージにも適用してもよい。したがって、本明細書に記載の実装は、記載されている特定の例に限定されず、本明細書に記載の開示を考慮すれば当業者には明白であるように、他のタイプの演算システムのアーキテクチャ、他のタイプのストレージ環境、他のタイプのクライアント構成、他のタイプのデータなどに拡張してもよい。
【0022】
図1は、いくつかの実装形態に係るパーティション分割されたデータを含むシステム100のアーキテクチャ例を示す。システム100は、1又は複数のネットワーク106などを通して、少なくとも1つのネットワークストレージシステム104と通信可能である、又はそれ以外の方法で結合可能である複数のサービス演算装置102(いくつかの例では「演算ノード」とも呼ばれる)を含む。さらに、サービス演算装置102は、1つ又は複数のユーザ演算デバイス108と、1又は複数の管理者デバイス110と、ネットワーク106上で通信することができる。これらのデバイスは、以下で追加的に説明するように、様々なタイプの演算デバイスのいずれかとしてもよい。
【0023】
いくつかの例では、サービス演算装置102は、いくつものやり方で具体化し得る1又は複数のサーバを含んでもよい。例えば、サービス演算装置102のプログラム、他の機能コンポーネント、及び、データストレージの少なくとも一部分は、サーバのクラスタ、サーバファーム、データセンタ、クラウドホストコンピューティングサービス、分散演算システムなどといったような、少なくとも1つのサーバに実装してもよい。ただし、他のコンピュータアーキテクチャを追加的又は代替的に使用してもよい。サービス演算装置102のさらなる詳細については、
図10に関して以下で説明する。
【0024】
サービス演算装置102は、ユーザ112にストレージ及びデータ管理サービスを提供するように構成してもよい。いくつかの非限定的な例として、ユーザ112は、ビジネス、企業、組織、政府機関、学術機関などのための機能を実行するユーザを含んでもよく、いくつかの例では、非常に大量のデータのストレージを含んでもよい。それでも、本明細書に記載の実装は、システム100及び本明細書に記載のその他のシステム及び配置に対するいかなる特定の使用、又は適用に限定されるものではない。
【0025】
ネットワークストレージシステム104は、いくつかの例では、「クラウドストレージ」又は「クラウドベースストレージ」と呼ばれることがあり、場合によっては、サービス演算装置102で利用可能なローカルストレージよりもギガバイト当たりのコストが低くなるストレージソリューションを可能にしてもよい。さらにまた、いくつかの例では、ネットワークストレージシステム104は、当技術分野で既知の商用のクラウドストレージを含んでもよい一方、他の例では、ネットワークストレージシステム104は、サービス演算装置102に関連付けられているエンティティによってのみアクセス可能な、個人又は企業のストレージシステム、又はそれらの組み合わせを含んでもよい。
【0026】
1又は複数のネットワーク106は、インターネットなどのワイドエリアネットワーク、イントラネットなどのローカルエリアネットワーク(LAN)、携帯電話ネットワークなどのワイヤレスネットワーク、Wi-Fiなどのローカルワイヤレスネットワーク、及び/又はBLUETOOTH(登録商標)などの短距離ワイヤレス通信、ファイバチャネル、光ファイバ、Ethernet(登録商標)、若しくは任意の他のそのようなネットワークを含む有線ネットワーク、直接有線接続、又はこれらの任意の組み合わせを含む、任意の適切なネットワークを含んでもよい。したがって、1又は複数のネットワーク106は、有線及び/又はワイヤレス通信技術の両方を含んでもよい。このような通信に使用されるコンポーネントは、ネットワークのタイプ、選択された環境、又はその両方に少なくとも部分的に影響を受ける可能性がある。このようなネットワーク上で通信するためのプロトコルは、よく知られており、本明細書では詳しく説明しない。したがって、サービス演算装置102、ネットワークストレージシステム104、ユーザデバイス108、及び管理デバイス110は、有線又はワイヤレス接続、及びそれらの組み合わせを使用して、1又は複数のネットワーク106上で通信することができる。
【0027】
加えて、サービス演算装置102は、1又は複数のネットワーク107上で互いに通信できてもよい。いくつかのケースでは、1又は複数のネットワーク107はLAN、プライベートネットワークなどであってもよく、他のケースでは、1又は複数のネットワーク107は上記で説明したネットワーク106のいずれかであってもよい。
【0028】
各ユーザデバイス108は、デスクトップ、ラップトップ、タブレットコンピューティングデバイス、モバイルデバイス、スマートフォン、ウェアラブルデバイス、端末、及び/又はネットワーク上でデータ送信が可能な任意の他のタイプのコンピューティングデバイスなど、任意の適切なタイプのコンピューティングデバイスであってもよい。ユーザ112は、例えば、それぞれのユーザアカウント、ユーザログイン資格情報などを通じて、ユーザデバイス108に関連付けられてもよい。さらにまた、ユーザデバイス108は、1又は複数のネットワーク106を通して、別々のネットワークを通して、又は任意の他の適切なタイプの通信接続を通して、サービス演算装置102と通信できてもよい。多数の他の変形形態は、本明細書に記載の開示の恩恵を受ける当業者には明白となろう。
【0029】
さらに、各ユーザデバイス108は、例えば、サービス演算装置102上で実行可能なユーザウェブアプリケーション116と通信するために、例えば、ネットワークストレージシステム104に格納するためのデータをユーザに送信するために、及び/又はデータ要求118などを通してネットワークストレージシステム104から格納されているデータを受信するために、ユーザデバイス108上で実行可能なユーザアプリケーション114のそれぞれのインスタンスを含んでもよい。いくつかのケースでは、アプリケーション114は、ブラウザを含んでもよく、又はブラウザを通して操作できてもよく、他のケースでは、アプリケーション114は、1又は複数のネットワーク106上でユーザウェブアプリケーション116と通信可能にする通信機能性を有する任意の他のタイプのアプリケーションを含んでもよい。
【0030】
システム100では、ユーザ112は、自身のそれぞれのユーザデバイス108が通信状態にあるサービス演算装置102との間でデータを格納したり、データを受信したりしてもよい。したがって、サービス演算装置102は、ユーザ112及びそれぞれのユーザデバイス108にローカルストレージを提供してもよい。定常状態での動作中に、サービス演算装置102と定期的に通信しているユーザ108がいてもよい。
【0031】
加えて、管理者デバイス110は、デスクトップ、ラップトップ、タブレットコンピューティングデバイス、モバイルデバイス、スマートフォン、ウェアラブルデバイス、端末、及び/又はネットワーク上でデータ送信が可能な任意の他のタイプのコンピューティングデバイスなど、任意の適切なタイプのコンピューティングデバイスであってもよい。管理者120は、例えば、それぞれの管理者アカウント、管理者ログイン資格情報などを通じて、管理者デバイス110に関連付けてもよい。さらにまた、管理者デバイス110は、1又は複数のネットワーク106を通して、別々のネットワークを通して、又は任意の他の適切なタイプの通信接続を通して、サービス演算装置102と通信してもよい。
【0032】
さらに、各管理者デバイス110は、例えば、複数のサービス演算装置を管理するためにサービス演算装置上で実行されるプログラムと通信するための、管理者デバイス110上で実行可能な管理者アプリケーション122のそれぞれのインスタンスを含んでもよい。一例として、管理者アプリケーションは、例えば、システム100を管理するための管理命令を送信するためだけでなく、ネットワークストレージシステム104に格納するための管理データを送信するために、及び/又は、格納されている管理データを例えば、管理要求126などを通して、ネットワークストレージシステム104から受信するために、サービス演算装置102上で実行可能な管理ウェブアプリケーション124と通信できてもよい。いくつかのケースでは、管理者アプリケーション122は、ブラウザを含んでもよく、又はブラウザを通して操作できてもよく、他のケースでは、管理者アプリケーション122は、1又は複数のネットワーク106上で管理ウェブアプリケーション124と、又はサービス演算装置102上で実行される他のプログラムと通信することを可能にする通信機能性を有する任意の他のタイプのアプリケーションを含んでもよい。
【0033】
サービス演算装置102は、ストレージプログラム130を実行してもよく、これは、例えば、ネットワークストレージシステム104に格納されるデータを送信するために、また、要求されたデータをネットワークストレージシステム104から検索するために、ネットワークストレージシステム104へのゲートウエイを提供してもよい。加えて、ストレージプログラム142は、例えば、データ保持期間、データ保護レベル、データ複製などを管理するために、システム100によって格納されたデータを管理してもよい。
【0034】
サービス演算装置102は、データベース(DB)132をさらに含んでもよく、これは、複数のDBパーティション134(1)~134(N)に分けてもよく、複数のサービス演算装置102全体にわたって分散させてもよい。例えば、DB132は、ネットワークストレージシステム104に格納されたオブジェクトデータ136を管理するために使用されてもよい。DB132は、個々のオブジェクトに関する情報、個々のオブジェクトへのアクセス方法、オブジェクトデータのストレージ保護レベル、ストレージ保持期間、オブジェクト所有者情報、オブジェクトサイズ、オブジェクトタイプなどの、オブジェクトデータ136に関する多数のメタデータを格納するか、それ以外の方法で含んでもいてもよい。さらに、DB管理プログラム138は、例えば、新たな演算ノードをDB132に追加し、新たなオブジェクトが格納され、古いオブジェクトが削除され、オブジェクトが移行されるなどすると、DB132の更新を調整するために、DB132を管理し、維持してもよい。
【0035】
加えて、調整サービスプログラム140は、選択されたパーティションリーダに命令を送信して、パーティション分割を実行するようにパーティションリーダに命令してもよい。例えば、調整サービスプログラム140は、パーティションリーダを有するサービス演算装置102を監視してもよく、サービス演算装置102のそれぞれのデータベースパーティション134のサイズをさらに監視してもよい。いくつかの例では、調整サービスプログラム140は、例えば、パーティションサイズ閾値、トラフィック量閾値、応答待ち時間閾値などに到達したパーティションに基づいて、パーティションを分割する命令をパーティションリーダに送信することを決定してもよい。
【0036】
上述したように、DBパーティション134は、サービス演算装置102の複数のパーティション全体にわたって分散された重複パーティションを含む複数のパーティションを含んでもよい。いくつかの例では、DBパーティション134を含む複数のサービス演算装置102は、例えば、複数のサービス演算装置102でDB132の冗長性を提供するために、パーティション分割されたデータを管理するためのRaft合意アルゴリズム構成で構成されてもよい。本明細書に記載のパーティション分割DB132は、パーティションの分割中に最小限の中断時間でライト及び削除をできるようにすることにより、高い利用可能性を提供することができる。さらに、本明細書に記載のDB132は、メタデータをパーティション分割し、DB演算ノードとしての役割を果たす別個のサービス演算装置全体にわたってメタデータを分散させることにより、スケーラビリティを提供する。各パーティション134は、パーティションリーダとしての役割を果たす単一のサービス演算装置を有してもよい。パーティションリーダは、その特定のパーティション134のすべての要求を処理する役割を担ってもよい。さらに、本明細書に記載のソリューションは、ユーザアプリケーション114などのクライアントアプリケーションが、パーティション134にデータをライトする性能を最適化する一方で、従来の技術と比較して、パーティション分割中にデータのライトがブロックされる時間を大幅に短縮する。
【0037】
いくつかの例では、以下で追加的に説明するように、分割を実行するときに、リーダパーティションを維持するサービス演算装置102は、パーティション分割の処理を開始する前に、パーティション134のスナップショット142を取得してもよい。パーティションリーダは、分割されているパーティションの分割更新データ構造(DS)144をさらに維持してもよく、対応するレコードを分割更新DS144に格納することにより、スナップショットを取得した後に受信されたパーティションへのライトを処理してもよい。いくつかの例では、分割更新DS144は、別々のスキーマ、表などといったような、任意の適切なタイプのデータ構造であってもよい。いくつかのケースでは、分割更新DS144は、分割更新DS144がシステムクラッシュなどに耐えられるような耐久性のあるデータ構造であってもよい。一例として、分割更新DS144は、Raftアルゴリズムに従って、例えば、他のサービス演算装置102に格納されている分割更新DS144の2つのコピーを備えるように複製してもよい。本明細書に記載の実装は、分割更新DS144のいかなる特定の構成にも限定されない。
【0038】
さらにまた、サービス演算装置102は、サービス演算装置102によって実行されて、パーティションの分割、及び本明細書に記載のサービス演算装置102に帰属する他の機能を実行するノード管理プログラム146を含んでもよい。パーティションを分ける処理がバックグラウンドでスナップショット142に対して実行されているので、パーティションに対して受信されたすべてのライトはパーティションに格納され、分割更新DS144は、受信されたライトに対応する分割更新コマンドで更新されてもよい。パーティション分割の処理が完了すると、パーティションリーダは、分割更新DS144に格納されているコマンドを新たなパーティションに適用してもよく、これにより、オブジェクトの総数又はオブジェクトの合計サイズなど、スナップショット142に対するメトリックの変更を示してもよい。追加的に、いくつかのケースでは、新たなパーティションの更新が完了したときに、この段階でライトをブロックするのではなく、パーティションに格納された新たに受信されたライトを含む元のパーティションの第2スナップショット142を取得してもよい。いくつかの例では、この再帰プロセスを、終わりのないループにならないように3回又は4回などの限られた回数だけ繰り返してもよい。さらに、いくつかのケースでは、分割更新DS144に更新がない場合には、その時点でパーティションへのライトをブロックする必要はなく、元のパーティションの分割により生じる新たなパーティションは、使用が開始され、新たなライトの受信を開始してもよい。本明細書に記載のパーティション分割技術の追加の詳細について、以下で説明する。
【0039】
いくつかのケースでは、サービス演算装置102は、サイト150で1又は複数のグループ、クラスタ、システムなどに配置してもよい。いくつかのケースでは、例えば、データ複製、災害復旧保護などを提供するために、複数のサイト150は互いに地理的に分散配置されてもよい。さらに、いくつかのケースでは、複数の異なるサイト150にあるサービス演算装置102は、例えば、複数のサイト150の連合体を提供するために、互いに安全に通信するように構成されてもよい。
【0040】
図2は、いくつかの実装形態に係るパーティション分割を実行中の、システム200の論理的構造例を示すブロック図である。いくつかの例では、本明細書に記載の開示の恩恵を受ける当業者には明白となるように、システム200は、システム100に対応してもよく、また、サービス演算装置202は、上記で説明したサービス演算装置102、又は様々な他の実現可能なコンピューティングシステムアーキテクチャのいずれかに対応してもよい。システム200では、格納されているデータを論理的にパーティション分割し、到達している1又は複数の閾値に基づいてパーティションを動的に分割して、元のパーティションの機能を果たすために2つ以上のパーティションを提供することによって、スケーラビリティを提供してもよい。
【0041】
図示されている例では、複数のサービス演算装置202(1)~202(4)は、システム200に含まれている。例えば、Raft合意アルゴリズムなどに基づいて、第1パーティションはシステム200に作成され、第1パーティションは、リーダパーティション204(1)と、2つのフォロワパーティション204(2)及び204(3)と、を含むものとする。上述したように、パーティション分割、及び複数のサービス演算装置202にわたるパーティションの分散に関する決定は、調整サービスプログラム140(
図2に図示せず)によって管理してもよく、これにより、パーティションが、確実に複数の演算装置の全体にわたって均一にバランスが保たれるようにする。いくつかの例では、調整サービスプログラム140は、自身のステートレスコンテナでホストされていてもよい。さらに、いくつかのケースでは、パーティションは、ある特定のサイズ閾値に到達したとき、又は何らかの他のメトリック閾値を満たしたときに、分割するように命令されてもよい。サイズ閾値は、いくつかのケースでは、動的であってもよく、及び/又は、パーティション分割の頻度を増加又は抑制するように動的に調節されてもよく。分割するパーティションを決定するその他の基準は、地理的配置、パーティションが存在するサービス演算装置のディスク又はメモリ使用量、パーティションが存在するサービス演算装置のネットワーク待ち時間、トラフィック量閾値、応答待ち時間閾値などに依存してもよい。
【0042】
図示されている例では、第1パーティションリーダ204(1)を維持するサービス演算装置202(1)は、第1パーティション204を分割する命令を調整サービスプログラムから受信したとする。したがって、いくつかのケースでは、パーティションの分割は、パーティションリーダ204(1)を維持するサービス演算装置202(1)によって扱われてもよい。第1パーティション204(1)を維持するサービス演算装置202(1)が、第1パーティション204を分割するための分割要求を受信すると、サービス演算装置202(1)は、例えば、任意の適切な手法によって、例えば、
図5~
図8に関して以下で説明するようなインジケータを使用することによって、第1パーティションに現在分割されているというマークを付けてもよい。上述したように、分割は、サービス演算装置202(1)でノード管理プログラム146を実行することにより実行してもよい。
【0043】
いくつかの例では、3つの第1パーティションのすべてが分割操作を実行してもよく、一方、他の例では、第1パーティションリーダが存在するサービス演算装置202(1)だけが分割を実行してもよく、その後、新たなパーティションは他のサービス演算装置202に複製されてもよい。図示の例では、サービス演算装置202(1)、202(2)、及び202(4)の3つの第1パーティションのすべてが、自身の分割操作を実行するとする。それでも、図を分かり易くするために、この例では、サービス演算装置202(1)上の分割操作の詳細のみが示されており、サービス演算装置202(2)によって実行される分割操作は本質的に同じであるが、例外として、第1パーティションリーダサービス演算装置202(1)は、すべての新たなライトを第1パーティションフォロワサービス演算装置202(2)及び202(4)に転送するが、フォロワデバイスは、この操作を実行する必要はない。
【0044】
分割を初期化する直前に、サービス演算装置202(1)は、第1パーティション204に現在存在するすべてのレコードのメモリ内スナップショット142(1)を取得してもよい。例えば、第1パーティション204(1)は、スナップショット142(1)が取得される間ロックされてもよく、次に、直ちにロックが解除されるので、例えば、クライアント演算装置などからのライト206を継続することができる。例えば、スナップショット142(1)は、第1パーティション204のレコード又はその他のデータの読み取り専用のコピーであり、スナップショット142(1)が取得された時点で凍結させてもよい。サービス演算装置202(1)は、第1パーティションに対するライト206を引き続き許容しながら、分割に要求される必要な計算(例えば、それぞれの新たなパーティションのメトリックスキーマのための情報を決定すること)を実行するためにスナップショット142(1)を使用してもよい。サービス演算装置202(1)は、これらの計算の結果を、新たなパーティション、例えば、この例では、第2パーティション208(1)及び第3パーティション210(1)の適切なスキーマに記録してもよい。計算されたメトリックはすべて、新たなパーティション208(1)、210(1)のそれぞれのメトリックスキーマに格納してもよい。
【0045】
サービス演算装置202(1)は、スナップショット142(1)を使用して、パーティションを分割するための計算を実行してもよいが、計算は、第1パーティションの各レコードが属する新たなパーティションを識別することが含まれてもよい。この計算を高速化するために、いくつかの実装は、上記で説明した、低衝突及び速度について最適化されたFarmHash Fingerprint64オープンソースアルゴリズムなどのFarmHash fingerprinting アルゴリズムを採用してもよい。FarmHashアルゴリズムは、パーティション内の複数のエントリを迅速に比較して、新たなキースペースにマップするかどうかを決定することが可能になる。このため、FarmHashアルゴリズムを使用して処理する間に、第2パーティション208(1)及び第3パーティション210(1)は作成されてもよく、第1パーティション204(1)に格納されているデータは、ハッシュアルゴリズムに基づいて第2パーティション208(1)と、第3パーティション210(1)との間で分けられる。例えば、ハッシュアルゴリズムは、第1パーティション204(1)に格納されている各レコードのパスを文字列などに変換してもよく、文字列を、その値に基づいて第2パーティション208(1)又は第3パーティション210(1)のいずれか1つに割り当てられてもよい。
【0046】
上術したように、第1パーティション204(1)を分割するためにスナップショット142(1)を使用して実行される処理の間に、ライト206は、第1パーティション204(1)に引き続き適用されてもよく、Raftアルゴリズムに従って、第1パーティションリーダ204(1)から第1パーティションフォロワ204(2)及び204(3)まで、伝播させてもよい。計算の結果は、新たなパーティション208(1)又は210(1)内の適切なスキーマに記録される。例えば、計算されたメトリックはすべて、新たなパーティション208(1)又は210(1)のそれぞれのメトリックスキーマに格納される。メトリックのいくつかの例は、オブジェクト数及びオブジェクトサイズである。これらのメトリックを計算するために、プロセッサはソースパーティション204(1)の各エントリを調べ、それぞれのエントリが第1パーティション又は第2パーティションのいずれに属しているかを識別し、それぞれの特定のパーティションに属するレコードに基づいてこれらのメトリックの値を計算してもよい。
【0047】
スナップショット142(1)の処理によって第1パーティション204が分割されている間にライト206が受信されるときは、第1パーティションのプライマリスキーマへの通常のライト操作を実行することに加えて、サービス演算装置202(1)は、本明細書では分割更新DS144と呼ばれる、新たなスキーマ、又はその他のデータ構造に分割更新コマンドを記録してもよい。例えば、パーティションが分割されておらず、且つ、新たなライト206が受信された場合、分割更新は、分割更新DS144に記録されない。しかしながら、分割が進行中であり、且つ、新たなライトが受信された場合、分割更新DS144は、バックグラウンドで実行されている元の計算が、この新たな書き込みによってどんな影響を受けるかを取り込む。例えば、新たなオブジェクトが第1パーティションに追加される場合には、これにより、オブジェクト数を1だけ増分する。オブジェクト数が1だけ増分するという事実は、レコードとして分割更新DS144に格納されてもよい。同様に、オブジェクトが削除された場合には、サービス演算装置202(1)は、オブジェクト数が1だけ減分するという事実をレコードとして分割更新DS144に格納してもよい。分割更新DSに格納されている分割更新レコードは、受信した更新を適用すべき新たなパーティションに対応する、関連付けられたキーを保持してもよい。
【0048】
一例として、キーが文字列であり、キースペースがnullとnullとの間である第1パーティション204(1)(ソースパーティション)を、2つの新たなターゲットパーティション、例えば、キースペースがそれぞれ、nullとmaxとの間、及びmaxとnullとの間である第2パーティション208及び第3パーティション210に分割する間、「foo」と呼ばれる新たなレコードが、第1パーティションに追加されると仮定する。これに対応して、サービス演算装置202(1)は、fooに関連付けされた分割更新レコードを2というキーで格納してもよい。いくつかのケースでは、レコードが新たなライトごとに分割更新DSに格納されるため、パーティションが分割されているときに発生するライト応答時間がわずかに長くなることがある。しかしながら、これは、従来の代案形態におけるような、ライトを完全にブロックすることに対して優れたソリューションであると考えることができる。すなわち、エンドユーザが、ライト待ち時間がほんのわずかに増えるだけか、まったくライトができないか、の違いに気付けば、エンドユーザ体験がはるかに向上する可能性がある。
【0049】
いくつかの例では、サービス演算装置202(1)がスナップショット142(1)の処理を完了した後、サービス演算装置202(1)はライトをブロックし、次に、スナップショット142(1)の処理が行われていた間に受信されたワイトから蓄積された分割更新コマンドを使用して、記録されたばかりの結果を更新する。典型的に、分割更新DS144の分割更新コマンドの数は、スナップショット142(1)から処理されたレコードの数よりも数桁小さくなる。典型的に、分割更新DS144のレコードのごく一部のみが処理されるので、処理の時間ウィンドウは、ライトがブロックされる可能性がある従来の時間ウィンドウよりも大幅に小さくなる。
【0050】
加えて、中断時間をさらにもっと短縮するために、本明細書に記載の実装は、以前のスナップショットの処理が実行されていた間にライトされたすべてのレコードの追加のスナップショットを再帰的に処理する機能を有する。サービス演算装置202(1)は、レコードの数が閾値数に達したとき、又はある決まった数の再帰呼出しの後にのみ、ライトをブロックして、パーティション分割が最終的に完了することを確実にするようにしてもよい。この技術は、ライトがブロックされる時間ウィンドウを非常に小さくすることができ、分割中のシステム200の応答性をはるかに向上するようにできる。例えば、第1スナップショット142(1)が処理されていた間に受信されたライト206を含む第1パーティション204(1)の第2スナップショット142(2)を取得してもよい。第2スナップショット142(2)の処理中に受信されたすべてのライト、及び分割更新DS144の対応するレコードは、第1パーティション204に格納されることを続けてもよいが、以前のスナップショットのdeltaだけが処理されているので、処理時間は典型的には第1スナップショット142(1)の場合よりもはるかに短くなり、その結果、スナップショット142(2)の処理中に受信されるライト206は、大幅に少なくなる可能性が高い。このため、数回のこのような反復の後、実際には処理する追加のライトはほとんどないか、又はまったくなく、第2パーティション208及び第3パーティション210は、使用が開始される。
【0051】
上記で説明したプロセスは、サービス演算装置202(1)、202(2)及び202(4)で同時に実行され得るので、このプロセスの結果、3つの第2パーティション208(1)、208(2)及び208(3)と、3つの第3パーティション210(1)、210(2)及び210(3)と、が得られる可能性がある。或いは、他の例では、パーティションリーダ演算装置のみが処理を実行することができ、その結果得られる第2パーティション208(1)及び第3パーティション210(1)はそれぞれ、例えば、Raftアルゴリズムに基づくか、又は調整サービスプログラム140からの命令に従って、他のサービス演算装置202に複製されてもよい。
【0052】
図3は、いくつかの実装形態に係る第1パーティションを第2パーティションと、第3パーティションとに分割した後のシステム200を示す。例えば、分割に後続して、システムは、システム内のサービス演算装置全体にわたって処理及び/又はストレージの負荷を分散させてリバランスさせるようにしてもよい。上述したように、本明細書に記載のいくつかの例では、各パーティションは、Raft合意アルゴリズムに従って動作して、パーティションの冗長なバックアップを提供するように構成されてもよい。例えば、Raftアルゴリズムは、各サービス演算装置202がそれぞれのパーティションのデータに対する同じ変更について同意することを確実にする。Raftグループは、選ばれたリーダを介して合意を実現する。例えば、特定のパーティションを含むRaftグループの特定のサービス演算装置202は、特定のパーティションについてのリーダ又はフォロワのいずれかであってもよい。リーダは、パーティションに対する変更をフォロワコ演算ノードに複製することに責任があってもよい。リーダは、ハートビートメッセージを送信することにより、フォロワにその存在を定期的に通知してもよい。リーダが閾値期間内にハートビートメッセージを送信しなければ、フォロワはフォロワの中から新たなリーダを選んでもよい。
【0053】
したがって、いくつかの例では、Raft合意アルゴリズムに基づいて、本明細書に記載の分散データベースの各パーティションは、高い利用可能性及び冗長性を実現するために、パーティション内のデータを複製する3つのパーティションメンバを含んでもよい。Raft合意アルゴリズムを使用して、パーティションメンバ間の合意を実現してもよい。Raft合意アルゴリズムでは、リーダは、すべてのクライアント要求(例えば、リード、ライトなど)を処理するパーティションメンバであってもよい。リーダパーティションを維持するサービス演算装置202は、リーダパーティションの変更をサービス演算装置202のうちの他のサービス演算装置のフォロワパーティションに複製してもよい。どのサービス演算装置202でも、自身が管理するパーティションのいずれかのリーダになることができる。
【0054】
この例では、サービス演算装置202(2)は、第2パーティション208(2)をリーダとして、また、第3パーティション210(2)をフォロワとして管理する。さらに、例えば、負荷のバランスを保つために、サービス演算装置202(1)に最初に作成された第3パーティション210(1)は、サービス演算装置202(3)に移動させてもよく、このデバイスが第3パーティション210(1)をフォロワとして管理してもよい。このように、各サービス演算装置202は、複数の別々のRaftグループの一部であってもよく、各Raftグループは異なるパーティションを表す。加えて、第2パーティション及び第3パーティションが使用開始された後、第1パーティションは、310で示されているように、第1パーティション204のメンバーごとに削除のマークを付けてもよい。さらに、第3パーティション210(3)がサービス演算装置202(3)に移動された後、サービス演算装置202(1)の第3パーティション210(1)は、非アクティブ化され、314で示されているように、削除のマークが付けられてもよい。
【0055】
各サービス演算装置202は、パーティションマップエントリと、Raftグループとの間のパーティションマッピングを維持してもよい。サービス演算装置202がクライアントから要求を受信すると、パーティションマッピングは、その要求がどのRaftグループに属するかを決定するために調べられてもよい。サービス演算装置202が特定の要求に対するマッピングを有していない場合には、要求元クライアントにエラーが返されてもよい。それ以外の場合には、正しいRaftグループに要求が転送されてもよい。サービス演算装置202がそのRaftグループのリーダである場合には、要求はサービス演算装置によって処理される。それ以外の場合には、サービス演算装置がそのRaftグループのフォロワである場合のような場合には、エラーが、Raftグループのリーダの接続情報を含められて、要求元クライアントに返される。これにより、要求元クライアントは、どのサービス演算装置に要求の送り先を変更すべきかに関する情報が、送り返されたエラーメッセージの中で提供される。
【0056】
図4は、いくつかの実装形態に係る第1パーティション204(1)を2つの新たなパーティション208(1)及び210(1)に分割する単純化された例400を示すブロック図である。本明細書に記載のデータにおけるデータのパーティション分割を行うと、データの領域の担当をシステムの別個のサービス演算装置全体にわたって分けることによって、データのスケーリングが可能になる。パーティションを分割することは、単一のパーティションにより扱われるキースペース範囲を2つ以上の新たなパーティションに分けることを含んでもよい。パーティションの分割は、パーティションに含まれるメタデータの量が大きくなり、より多くの数のサービス演算装置にわたってメタデータを拡張することが好ましい場合に発生してもよい。この例では、第1パーティション204(1)の分割は、キースペース(すなわち、すべての可能なキーのセット)を、新たなパーティション、すなわち第2パーティション208(1)及び第3パーティション210(1)に関連付けされたキースペース範囲に分けることによって成し遂げられる。各パーティションは、パーティション識別子と、パーティションを管理するサービス演算装置が担うキースペース範囲のセットと、が与えられてもよい。
【0057】
図示された例では、第1パーティション204(1)は、キースペースがゼロで始まり、264で終わる、すなわち、キースペース範囲402、404、406、...408、410、及び412を含むスキーマを含むとする。さらに、第1パーティション204(1)は232である分割点を使用して分割され、第2パーティション208(1)及び第3パーティション210(1)が作成されるとする。第2パーティション208(1)は、キーが232未満であるキースペース範囲、すなわち、レコード範囲402、404、406、...414を含むスキーマを有し、一方、第3パーティション210(1)は、キーが232よりも大きく、且つ、264よりも小さい、すなわち416、...408、410、412であるキースペース範囲のスキーマを有する。上記で説明したように、演算ノードは、例えば、各サービス演算装置によって管理されるデータ量のバランスを保つこと、特定の演算ノードへのトラフィック量を管理することなどのために、パーティションを分割するか、又は分けることを動的に決定してもよい。
【0058】
さらに、この例では、第1パーティションは、例えば、調整サービスプログラム140によって、又は様々な他の手法のうちのいずれかによって決定されてもよいキースペースの分割点で分割してもよい。例えば、他の例では、分割点は、キースペース及びそこに含まれるレコードの生成方法に応じて、異なる場所にあるように決定してもよい。本明細書に記載のいくつかの例では、キースペース内でレコードを均一に分散させるために、各レコードのパスは、上記で説明したFarmHash Fingerprint 64関数などのハッシュ関数を使用してハッシュされる。ハッシュ関数を使用すると、キースペースの領域がキースペースの特定の場所で、レコードで埋め尽くされることを防ぐのに役立ち、むしろ、キースペース全体にレコードをよりランダムに分散させる役割を果たす。さらにまた、上述したように、キースペースには非常に多くのレコードが存在する可能性があり、また、各レコードに対してハッシュ関数を実行すると非常に多くの時間を消費する可能性があるため、パーティション分割されたデータベースに格納されているレコードのキーを決定するために、本明細書に記載の実装は、高速で、低衝突の非暗号のハッシュ関数を用いてもよい。
【0059】
図5~
図8は、いくつかの実装形態に係る第1パーティションを2つの新たなパーティションに分割することのより詳細な例を示す。
図5は、いくつかの実装形態に係るパーティション分割の開始前及び開始後の第1パーティションを示す。この例では、500に示されているように、第1パーティション502は、プライマリスキーマ504と、キースペース範囲506と、現在のトランザクション状態508と、現在状態510と、パーティションの分割又はマージが保留中であるかどうかのインジケータ512と、を含む。この例では、第1パーティションについて保留中のパーティションのマージ又は分割が示されていないため、この値は偽(false)であることが示されている。加えて、第1パーティション502は、パーティションで維持されている514で示されている複数のオブジェクトを含むとともに、第1パーティションの合計サイズ518と、第1パーティションに格納されているオブジェクトのオブジェクト数520と、を含むメトリックスキーマ516をさらに含む。
【0060】
530において、第1パーティション502を維持するサービス演算装置は、第1パーティション502を分割する命令を受信したとする。これに応答して、サービス演算装置は、532に示されているように、保留中の分割マージのインジケータ512を偽から真(true)に変更することを含め、第1パーティションを更新してもよい。加えて、サービス演算装置は、第1パーティション514のオブジェクトの現在の状態のスナップショット534を生成してもよい。
【0061】
536に示されるように、スナップショットの生成前及び生成後の両方で、第1パーティション502へのライトが許可される。しかしながら、いくつかのケースでは、第1パーティションについてスナップショット534が生成されている間、ライトが一時的に中断されてもよい。さらにまた、この例では、説明を容易にするために、第1パーティションに存在する7つのオブジェクト514のみを示している。しかしながら、実際には、分割が実行されているときには、分割されるパーティションに数十万ものレコードが存在してもよい。
【0062】
図6は、いくつかの実装形態に係る新たなライトが第1パーティションで受信されることを許容している間の第1パーティションのスナップショットの処理例を示す。
図6の例では、602で示されているように、第1パーティションスナップショット534の処理の間に、第1パーティション502へのライトが許容される。例えば、この例では、4つの新たなオブジェクトの追加、及び別のオブジェクトの削除を含む、第1パーティション502への新たなライト604が示されている。第1パーティション502を第2パーティション606及び第3パーティション608に分割するための第1パーティションスナップショット534の処理の間に、受信されると、新たなライト604は第1パーティション502に追加されてもよい。例えば、610に示されているように、第1パーティションスナップショットの処理は、ライトが第1パーティション502のプライマリスキーマでまだ発生している間に、スナップショット534からメトリックを再計算することを含んでもよい。スナップショット534からのメトリックの再計算は、第2パーティション606及び第3パーティション608の新たなメトリックスキーマを決定してもよい。
【0063】
例えば、第2パーティション606は、プライマリスキーマ612と、範囲614と、トランザクション状態616と、状態618と、保留中分割マージインジケータ620と、を含む。この例では、第2パーティション606がまだアクティブではないため、トランザクション状態616は許可されず、状態618は非アクティブであり、保留中分割マージインジケータ620は、偽である。さらにまた、第2パーティション606は、第1パーティションからの複数のオブジェクト622と、オブジェクト622の合計サイズ626及びオブジェクト数628を含むメトリックスキーマ624と、を含む。
【0064】
同様に、第3パーティション608は、プライマリスキーマ630と、範囲632と、トランザクション状態634と、状態636と、保留中分割マージインジケータ638と、を含む。この例では、第3パーティション608がまだアクティブではないため、トランザクション状態634は許可されず、状態636は非アクティブであり、保留中分割マージインジケータ638は、偽である。さらにまた、第3パーティション608は、第1パーティションからの複数のオブジェクト640と、オブジェクト640の合計サイズ644及びオブジェクト数646を含むメトリックスキーマ642と、を含む。
【0065】
さらにまた、この例では、第1パーティション502のプライマリスキーマ504の分割点が、キースペース範囲「max」にあるとする。したがって、第2パーティション606の範囲614がmaxで終わり、第3パーティション608のキースペース範囲がmaxで始まる。したがって、第2パーティション606に含まれるオブジェクト622は、範囲614に対応し、一方、第3パーティションに含まれるオブジェクト640は、範囲632に対応する。
【0066】
新たなライト604が第1パーティション502に受信されると、サービス演算装置は、パーティション分割の処理を実行し、第1パーティションについての保留中分割及びマージインジケータ512が真に設定されているか否かを確認してもよい。真に設定されていれば、650で示されているように、第1パーティション502のプライマリスキーマ504への新たなライト604が受信されると、分割更新データ構造(DS)652について分割更新コマンドもまた生成され、第2パーティション606及び第3パーティション608のメトリックスキーマ624、642が後で更新されるようにする。
【0067】
分割更新DS652は、パーティションIDを示すキー654と、指定されたスキーマを更新するためにコマンドが実行されることを示す値656と、を含む。加えて、分割更新DS652は、第2パーティション606又は第3パーティション608のメトリックスキーマにコマンドが適用されるかどうかを示すキーインジケータ2又は3を含む、複数の分割更新コマンド658を含む。したがって、それぞれの新たなライト604が第1パーティションによって受信されると、分割を実行するサービス演算装置は、その新たなライトが最終的に追加されるパーティションの対応するメトリックスキーマ624又は642への変更を示す、対応する分割更新コマンド658により、分割更新DS652を更新してもよい。
【0068】
図7は、いくつかの実装形態に係る新たなライトを第2パーティション及び第3パーティションに適用する例を示す。例えば、702に示されているように、
図7の処理の間、第1パーティションへのライトはブロックされてもよい、一方、第2パーティション606及び第3パーティション608は、第2パーティション及び第3パーティションのメトリックスキーマを計算するためにスナップショットが使用されている間に、第1パーティション602で受信された新たなライト604について更新される。例えば、第1パーティション502のトランザクション状態は、リード及びライトからリード専用に変更してもよい。
【0069】
この例では、第2パーティション606及び第3パーティション608のオブジェクトは、第1パーティション502で受信された新たなライト604に基づいて更新される。例えば、第1パーティション502に追加された「cat」オブジェクト及び「apple」オブジェクトは、第2パーティション606のオブジェクト622に追加される。同様に、第1パーティション502に追加された「zebra」オブジェクトは、第3パーティション608のオブジェクト640に追加され、第1パーティション502から削除された「van」オブジェクトは、第3パーティション608のオブジェクト640から削除される。
【0070】
加えて、分割更新データ構造652からの分割更新コマンド658は、第2パーティション606及び第3パーティション608のメトリックスキーマ624及び642をそれぞれ更新するために使用される。例えば、キーが「2」の分割更新コマンドは、第2パーティション606のメトリックスキーマ624に適用される。同様に、キーが「3」の分割更新コマンドは、第3パーティション608のメトリックスキーマ642に適用される。したがって、分割更新コマンドの適用に基づいて、第2パーティションのメトリックスキーマ624の合計サイズ626は、182 350から増加し、一方、オブジェクト数628が4から5に増加する。同様に、第3パーティション608のメトリックスキーマ642の合計サイズ644は100から140に増加し、一方、オブジェクト数646は同じままである。これは、1つのオブジェクトが追加され、別の1つのオブジェクトが削除されたからである。このため、第2パーティション606及び第3パーティション608のメトリックスキーマに分割更新を適用することは、スナップショットが処理されて受信された新たなライトがすべて反映されたときに、既存のメトリックを更新する役割を果たす。したがって、ライトがブロックされる時間は、第2パーティション606及び第3パーティション608のメトリックスキーマの全計算の間、ライトがブロックされた場合よりも大幅に短くなる可能性がある。
【0071】
さらにまた、上記で説明したように、代替的な実装では、第1パーティション502の第2スナップショットを取得してもよい(
図7に図示せず)。第2スナップショット及び分割更新データ構造652は、更新が実行されている間にライトをブロックすることなく、むしろ、第1パーティション502によって新たなライトを引き続き受信しながら、第2パーティション606及び第3パーティション608を更新するのに使用されてもよい。この処理は、固定された回数再帰的に実行され、これにより、ライトがブロックされる可能性がある時間を継続的に短縮することができる。
【0072】
図8は、いくつかの実装形態に係る第1パーティションを分割した後の第1パーティション502、第2パーティション606、及び第3パーティション608の構成例を示すブロック図である。分割が完了した後、802に示されるように、第1パーティション502は、を非アクティブ化してもよく今後一切のライトを永久に許可しないようにしてもよい。例えば、第1パーティションのトランザクション状態508を「不許可」に変更してもよく、第1パーティションの状態510を「非アクティブ」に変更してもよい。さらにまた、第1パーティション502は、削除してもよく、及び/又は削除のマークを付けて、例えば、ガーベッジコレクション機能などを通して、第1パーティションをシステムから最終的に削除するようにしてもよい。
【0073】
さらにまた、804に示されるように、新たな第2パーティション606及び第3パーティション608は、アクティブ化され、新たなパーティションへのライトが許可される。例えば、第2パーティション606及び第3パーティション608のトランザクション状態616及び634はそれぞれ、「リード-ライト」に切り替えられ、状態618及び636はそれぞれ、アクティブに設定される。さらにまた、分割に後続して、第2パーティション及び第3パーティションは、上記で説明したようなraftアルゴリズムに従って、システムの他のサービス演算装置に複製してもよい。
【0074】
図9は、いくつかの実装形態に係る動的適応型パーティション分割の処理を示すフロー図である。この処理は、論理フロー図のブロックの集合として示され、一連の操作を表しており、その一部又は全部をハードウェア、ソフトウェア、又はそれらの組み合わせで実装してもよい。ソフトウェアの文脈では、ブロックは、1又は複数のコンピュータ可読媒体に格納されているコンピュータ実行可能命令を表すことができ、これらの命令は、1又は複数のプロセッサによって実行されると、列挙された操作を実行するようにプロセッサをプログラムする。概して、コンピュータ実行可能命令は、特定の機能を実行するか、又は特定のデータタイプを実装するルーチン、プログラム、オブジェクト、コンポーネント、データ構造などを含む。ブロックが記述される順序は、限定であると解釈されないものとする。任意の数の記述されたブロックは任意の順序で、及び/又は並行して組み合わされて、この処理又は代替的な処理を実装してもよい、また、すべてのブロックが実行される必要があるわけではない。説明の目的のために、処理は、本明細書に記載の例で説明されている環境、枠組み、及びシステムに関連して説明されるが、処理は、種々様々の他の環境、枠組み、及びシステムで実装してもよい。
図9では、処理900は、ノード管理プログラム146を実行する1又は複数のサービス演算装置92、202によって、少なくとも部分的に実行されてもよい。
【0075】
902において、演算装置は、データを第1パーティションにパーティション分割してもよい。いくつかの例では、演算装置は、非暗号ハッシュアルゴリズムを使用して、第1パーティションのそれぞれのキー範囲に個々のデータオブジェクトを割り当ててもよい。
【0076】
904において、第1パーティションに関連付けされた、超過している少なくとも1つの閾値に基づいて、演算装置は、第1パーティションを分割することを決定してもよい。例えば、分割命令は、第1パーティションに関連付けされた少なくとも1つの閾値を満たしている第1パーティションの少なくとも部分的に基づいて受信してもよく、この少なくとも1つの閾値は、閾値パーティションサイズ、トラフィック量閾値、応答待ち時間閾値、ディスク又はメモリ使用量閾値、又はネットワーク待ち時間閾値のうちの少なくとも1つを指定する。
【0077】
906において、演算装置は、第1時点における第1パーティションのデータの状態のスナップショットを格納してもよい。
【0078】
908において、演算装置は、それぞれがデータの一部分を受信する第2パーティション及び第3パーティションであって、それぞれがメトリックスキーマを含む第2パーティション及び第3パーティションを作成してもよい。
【0079】
910において、演算装置は、スナップショットの情報に基づいて、第2パーティション及び第3パーティションのメトリックスキーマについての情報を決定してもよい。
【0080】
912において、決定することの間に、演算装置は、第1パーティションへのライトを受信してもよい。例えば、ライトは、ライトコマンド、削除コマンド、作成コマンド、又は更新コマンドのうちの少なくとも1つを含んでもよい。
【0081】
914において、演算装置は、第1パーティションへのライトを格納し、ライトに基づいて分割更新コマンドをデータ構造に追加してもよい。
【0082】
916において、演算装置は、第1パーティションへのライトをブロックする。例えば、演算装置は、更新分割コマンドを用いてメトリックスキーマのうちの少なくとも1つを更新する間、第1パーティションへのライトをブロックする。
【0083】
918において、演算装置は、分割更新コマンドに基づいて、第2パーティション又は第3パーティションのメトリックスキーマのうちの少なくとも1つを更新し、ライトに基づいて、メトリックスキーマが更新された第2パーティション又は第3パーティションの少なくとも1つのデータ部分を更新してもよい。例えば、分割更新コマンドは、少なくとも1つのメトリックスキーマを、第2パーティション又は第3パーティションのそれぞれの1つにおけるライトに含まれることに対応する条件に変更するための情報を含んでもよい。追加的に、いくつかの例では、演算装置は、第1スナップショットの情報に基づいて、第2パーティション及び第3パーティションのメトリックスキーマについての情報を決定することの後に、第1パーティションの第2スナップショットを取得してもよい。演算装置は、第2スナップショット及びデータ構造の情報に基づいて、第2パーティション及び第3パーティションのメトリックスキーマについての追加の情報を決定してもよい。さらにまた、第2スナップショット及びデータ構造の情報に基づいて、第2パーティション及び第3パーティションのメトリックスキーマについての追加の情報を決定することの間に、演算装置は、第1パーティションへの追加のライトを受信してもよく、追加のライトに基づいて、第1パーティションを更新してもよく、且つ、追加のライトに基づいて、データ構造に追加の分割更新コマンドを追加してもよい。加えて、演算装置は、追加の分割更新コマンドに基づいて、第2パーティション又は第3パーティションのメトリックスキーマの少なくとも1つを更新してもよい。
【0084】
920において、演算装置は、第2パーティション及び第3パーティションをアクティブ化することにより、ライトを有効にするようにしてもよい。
【0085】
922において、演算装置は、第1パーティションを非アクティブ化し、第1パーティションに削除のマークを付けてもよい。
【0086】
本明細書に記載の処理例は、説明の目的のために提供される処理の例にすぎない。多数の他の変形形態は、本明細書に記載の開示を考慮すれば当業者には明白となろう。さらに、本明細書に記載の開示は、処理を実行するための適切な枠組み、アーキテクチャ、及び環境のいくつかの例を記載しているが、本明細書に記載の実装は、示されて説明されている特定の例に限定されない。さらにまた、この開示は、説明され、且つ図面に示されているような様々な実装例を提供する。しかしながら、この開示は、本明細書に説明され且つ図示されている実装に限定されるのではなく、当業者であれば知っているように、又は知るところとなるように、他の実装形態に拡張することが可能である。
【0087】
図10は、本明細書に記載のシステムの機能性の少なくとも一部を実装するために使用し得る、サービス演算装置102、202のコンポーネントの選択例を示す。サービス演算装置102は、1又は複数のサーバ、又はいくつものやり方で具体化し得る他のタイプの演算装置を含んでもよい。例えば、サーバの場合、プログラム、その他の機能コンポーネント、及びデータは、単一のサーバ、サーバのクラスタ、サーバファーム又はデータセンタ、クラウドホストコンピューティングサービスなどに実装されてもよく、他のコンピュータアーキテクチャを追加的又は代替的に使用されてもよい。複数のサービス演算装置102、202は、まとめて、又は別々に配置され、例えば、仮想サーバ、サーババンク、及び/又はサーバファームとして、組織化されていてもよい。説明されている機能性は、単一の実体又は企業のサーバによって提供されてもよく、又は、複数の異なる実体、若しくは、企業のサーバ及び/又はサービスによって提供されてもよい。
【0088】
図示されている例では、サービス演算装置102、202は、1又は複数のプロセッサ1002と、1又は複数のコンピュータ可読媒体1004と、1又は複数の通信インタフェース1006と、を含むか、又はそれらに関連付けられてもよい。各プロセッサ1002は、単一の処理ユニット又は複数の処理ユニットであってもよく、単一のコンピューティングユニット若しくは複数のコンピューティングユニット、又は複数のプロセッシングコアを含んでもよい。プロセッサ1002は、1又は複数の中央処理ユニット、マイクロプロセッサ、マイクロコンピュータ、マイクロコントローラ、デジタル信号プロセッサ、ステートマシン、論理回路類、及び/又は動作命令に基づいて信号を操作する任意のデバイスとして実装することができる。一例として、プロセッサ1002は、本明細書に記載のアルゴリズム及びプロセスを実行するように特別にプログラム又は構成された、任意の適切なタイプの1又は複数のハードウェアプロセッサ、及び/又は論理回路を含んでもよい。プロセッサ1002は、コンピュータ可読媒体1004に格納されているコンピュータ可読命令をフェッチし、実行するように構成されてもよく、これにより、本明細書に記載の機能を実行するようにプロセッサ1002をプログラムすることができる。
【0089】
コンピュータ可読媒体1004は、コンピュータ可読命令、データ構造、プログラムモジュール、又はその他のデータなどの情報を格納するための任意のタイプの技術で実装された揮発性及び不揮発性メモリ、及び/又は、リムーバブル及び非リムーバブル媒体を含んでもよい。例えば、コンピュータ可読媒体1004は、RAM、ROM、EEPROM、フラッシュメモリ又はその他のメモリ技術、光学ストレージ、ソリッドステートストレージ、磁気テープ、磁気ディスクストレージ、RAIDストレージシステム、ストレージアレイ、ネットワーク接続型ストレージ、ストレージエリアネットワーク、クラウドストレージ、又は、所望の情報を格納するために使用可能であり、且つ、演算装置によってアクセスが可能な任意の他の媒体を含んでもよいが、これらに限定されない。サービス演算装置102、202の構成に応じて、コンピュータ可読媒体1004は、非一時的なコンピュータ可読媒体と言うとき、エネルギー、搬送波信号、電磁波、及び/又は信号それ自体のような媒体を除外する範囲で、有形の非一時的な媒体としてもよい。いくつかのケースでは、コンピュータ可読媒体1004は、サービス演算装置102、202と同じ場所にあってもよく、一方、他の例では、コンピュータ可読媒体1004は、サービス演算装置102、202から部分的に離れていてもよい。例えば、いくつかのケースでは、コンピュータ可読媒体1004は、
図1に関して上記で説明したネットワークストレージ104のストレージの一部分を含んでもよい。
【0090】
コンピュータ可読媒体1004は、プロセッサ1002によって実行可能な任意の数の機能コンポーネントを格納するために使用されてもよい。多くの実装では、これらの機能コンポーネントは、プロセッサ1002によって実行可能であり、且つ、実行されると、本明細書に記載のサービス演算装置102、202に帰属する動作を実行するようにプロセッサ1002を特別にプログラムする命令又はプログラムを含む。コンピュータ可読媒体1004に格納されている機能コンポーネントは、ノード管理プログラム146を含んでもよく、この管理プログラムは、例えば、パーティション分割及びマージを実行すること、他のサービス演算装置102、202及びクライアントデバイスから通信を受信し、それに応答すること、Raftアルゴリズムに従って動作を実行することなどによって、サービス演算装置102、202のパーティションを管理するために、それぞれのサービス演算装置102、202によって実行されてもよい。サービス演算装置102、202のうちの1又は複数に格納されている追加の機能コンポーネントは、ユーザウェブアプリケーション106と、管理ウェブアプリケーション124と、ストレージプログラム130と、データベース管理プログラム138と、調整サービスプログラム140と、を含んでもよく、これらのそれぞれは、1又は複数のコンピュータプログラム、アプリケーション、実行可能コード、又はそれらの一部分を含んでもよい。さらに、これらのプログラムは、この例ではまとめて示されているが、使用中に、これらのプログラムのうちの一部又は全部は、別々のサービス演算装置102、202で実行されてもよい。
【0091】
加えて、コンピュータ可読媒体1004は、本明細書に記載の機能及びサービスを実行するために使用されるデータ、データ構造、及びその他の情報を格納してもよい。例えば、コンピュータ可読媒体1004は、DBパーティション134を含むメタデータデータベース132を格納してもよく、少なくとも一時的に、スナップショット142及び分割更新データ構造144を格納してもよい。さらに、これらのデータ構造は、この例ではまとめて示されているが、使用中に、これらのデータ構造のうちの一部又は全部は別々のサービス演算装置102、202に格納されてもよい。サービス演算装置102、202は、他の機能コンポーネント及びデータを含む、又は維持してもよく、それらは、プログラム、ドライバ、等々と、機能コンポーネントによって使用、又は生成されたデータと、を含んでもよい。さらに、サービス演算装置102、202は、多くの他の論理的、プログラム的、及び物理的なコンポーネントを含んでもよく、そのうち、上述したものは、本明細書に記載の説明に関する単なる例である。
【0092】
1又は複数の通信インタフェース1006は、1又は複数のネットワーク106、107上などで、様々な他のデバイスとの通信を可能にするための、1又は複数のソフトウェア、及びハードウェアコンポーネントを含んでもよい。例えば、通信インタフェース1006は、LAN、インターネット、ケーブルネットワーク、携帯電話ネットワーク、ワイヤレスネットワーク(例えば、Wi-Fi)及び有線ネットワーク(例えば、ファイバチャネル、光ファイバ、Ethernet)、直接接続を通しての通信、のうちの1又は複数だけでなく、本明細書の他の箇所で追加的に列挙されているような、BLUETOOTH(登録商標)などのような、近距離通信を介して通信を可能にしてもよい。
【0093】
本明細書に記載の様々な命令、方法、及び技術は、コンピュータ可読媒体に格納され、本明細書に記載のプロセッサによって実行されるコンピュータプログラム及びアプリケーションなど、コンピュータ実行可能命令の一般的な文脈において考慮してもよい。概して、プログラム及びアプリケーションという用語は、交換可能に使用されてもよく、特定のタスクを実行するか、又は特定のデータタイプを実装するための命令、ルーチン、モジュール、オブジェクト、コンポーネント、データ構造、実行可能コード、等々を含んでもよい。これらのプログラム、アプリケーションなどは、ネイティブコードとして実行されてもよく、又は仮想マシン若しくは他のジャストインタイムのコンパイル実行環境などでダウンロードされて、実行されてもよい。典型的に、プログラム及びアプリケーションの機能性は、様々な実装において所望の通りに組み合わせたり、分散させたりしてもよい。これらのプログラム、アプリケーション、及び技術の実装は、コンピュータ記憶媒体に格納されたり、又は何らかの形の通信媒体を介して送信されたりしてもよい。
【0094】
主題は、構造上の特徴及び/又は方法論的な行為に特定の言語で説明してきたが、添付の特許請求の範囲に定義されている主題は、説明されている特定の特徴又は行為に必ずしも限定されないことを理解されたい。もっと正確に言えば、特定の特徴及び行為は、特許請求の範囲を実装する形の例として開示されている。