JP2023057546A - コンピュータに実装された方法、コンピュータプログラム又はコンピュータシステム - Google Patents
コンピュータに実装された方法、コンピュータプログラム又はコンピュータシステム Download PDFInfo
- Publication number
- JP2023057546A JP2023057546A JP2022162653A JP2022162653A JP2023057546A JP 2023057546 A JP2023057546 A JP 2023057546A JP 2022162653 A JP2022162653 A JP 2022162653A JP 2022162653 A JP2022162653 A JP 2022162653A JP 2023057546 A JP2023057546 A JP 2023057546A
- Authority
- JP
- Japan
- Prior art keywords
- chunks
- chunk
- final
- data structure
- computer
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
- 238000000034 method Methods 0.000 title claims abstract description 61
- 238000004590 computer program Methods 0.000 title claims abstract description 25
- 238000005192 partition Methods 0.000 claims description 18
- 230000004044 response Effects 0.000 claims description 7
- 238000013459 approach Methods 0.000 abstract description 21
- 238000012545 processing Methods 0.000 description 25
- 238000010586 diagram Methods 0.000 description 24
- 230000008569 process Effects 0.000 description 9
- 230000006870 function Effects 0.000 description 8
- 230000008901 benefit Effects 0.000 description 6
- 230000005540 biological transmission Effects 0.000 description 6
- 230000008859 change Effects 0.000 description 6
- 230000011218 segmentation Effects 0.000 description 6
- 238000012546 transfer Methods 0.000 description 6
- 238000004891 communication Methods 0.000 description 5
- 238000003780 insertion Methods 0.000 description 5
- 230000037431 insertion Effects 0.000 description 5
- 230000006835 compression Effects 0.000 description 3
- 238000007906 compression Methods 0.000 description 3
- 238000012217 deletion Methods 0.000 description 3
- 230000037430 deletion Effects 0.000 description 3
- 230000003287 optical effect Effects 0.000 description 3
- 230000002829 reductive effect Effects 0.000 description 3
- 238000003491 array Methods 0.000 description 2
- 238000011161 development Methods 0.000 description 2
- 230000018109 developmental process Effects 0.000 description 2
- 238000005516 engineering process Methods 0.000 description 2
- 239000004744 fabric Substances 0.000 description 2
- 239000000835 fiber Substances 0.000 description 2
- 230000010354 integration Effects 0.000 description 2
- 230000007246 mechanism Effects 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 230000002093 peripheral effect Effects 0.000 description 2
- 230000001902 propagating effect Effects 0.000 description 2
- RYGMFSIKBFXOCR-UHFFFAOYSA-N Copper Chemical compound [Cu] RYGMFSIKBFXOCR-UHFFFAOYSA-N 0.000 description 1
- 230000009286 beneficial effect Effects 0.000 description 1
- 229910052802 copper Inorganic materials 0.000 description 1
- 239000010949 copper Substances 0.000 description 1
- 238000013479 data entry Methods 0.000 description 1
- 238000013500 data storage Methods 0.000 description 1
- 230000006837 decompression Effects 0.000 description 1
- 230000001419 dependent effect Effects 0.000 description 1
- 230000003292 diminished effect Effects 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 230000002452 interceptive effect Effects 0.000 description 1
- 230000000670 limiting effect Effects 0.000 description 1
- 238000004519 manufacturing process Methods 0.000 description 1
- 238000013507 mapping Methods 0.000 description 1
- 230000006798 recombination Effects 0.000 description 1
- 238000005215 recombination Methods 0.000 description 1
- 230000002441 reversible effect Effects 0.000 description 1
- 239000004065 semiconductor Substances 0.000 description 1
- 238000000638 solvent extraction Methods 0.000 description 1
- 230000003068 static effect Effects 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/22—Indexing; Data structures therefor; Storage structures
- G06F16/2228—Indexing structures
- G06F16/2255—Hash tables
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/22—Indexing; Data structures therefor; Storage structures
- G06F16/2228—Indexing structures
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/23—Updating
- G06F16/2379—Updates performed during online database operations; commit processing
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Databases & Information Systems (AREA)
- Data Mining & Analysis (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Software Systems (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
【課題】データ構造内で一意である各チャンク内のビットシーケンスを識別することに基づいて、データ構造を複数のチャンクへとセグメント化するコンピュータに実装された方法、コンピュータプログラム又はコンピュータシステムを提供する。【解決手段】アプローチ100では、プロセッサがデータ構造を複数の初期チャンクへとセグメント化する。プロセッサは、前記複数の初期チャンクのそれぞれについて、前記データ構造内で一意である個々のチャンク内のビットシーケンスを識別することに基づいて、チャンクキーを決定する。プロセッサは、前記データ構造を複数の最終チャンクへと再セグメント化し、ここで、複数の区分は、前記識別されたビットシーケンスの複数の位置に対応する。【選択図】図2
Description
本発明は、データ構造の分野に、特には、データ構造を格納することに、より特には、データ構造内で一意である各チャンク内のビットシーケンスを識別することに基づいて、データ構造を複数のチャンクへとセグメント化することに、関する。
多くのアプリケーションは、数百メガバイトを超える非常に大きなデータ構造を編集する為に使用される。そのようなデータ構造は、JavaScriptオブジェクトノテーション(JSON:JavaScript Object Notation)ファイル、リッチテキスト形式(RTF:Rich Text Format)ファイル、又はコードでありうる。例えば、最新のウェブベースのエディターアプリケーションは、非常に大きなデータ構造を編集する為に使用される。従って、これらのアプリケーションによる編集プロセス中のデータ構造の保存及び再ロードは典型的には、時間及び計算コストのかかるプロセスであることが判明している。
本発明は、コンピュータに実装された方法、コンピュータプログラム又はコンピュータシステムを提供することを目的とする。
本発明の1つの実施態様に従うと、コンピュータに実装された方法、コンピュータプログラム製品若しくはコンピュータプログラム、及びコンピュータシステムが提供される。プロセッサは、データ構造を複数の初期チャンクへとセグメント化する。プロセッサは、該複数の初期チャンクのそれぞれについて、該データ構造内で一意である個々のチャンク内のビットシーケンスを識別することに基づいてチャンクキーを決定する。プロセッサは、データ構造を複数の最終チャンクへと再セグメント化し、ここで、複数の区分(divisions)は、該識別されたビットシーケンスの複数の位置に対応する。
本発明の1つの実施態様に従うと、コンピュータに実装された方法であって、
データ構造を複数の初期チャンクへとセグメント化すること;
該複数の初期チャンクのそれぞれについて、該データ構造内で一意である個々のチャンク内のビットシーケンスを識別することに基づいてチャンクキーを決定すること;及び、
該データ構造を複数の最終チャンクへと再セグメント化すること、ここで、複数の区分は、該識別されたビットシーケンスの複数の位置に対応する、
を含む、該方法が提供される。
データ構造を複数の初期チャンクへとセグメント化すること;
該複数の初期チャンクのそれぞれについて、該データ構造内で一意である個々のチャンク内のビットシーケンスを識別することに基づいてチャンクキーを決定すること;及び、
該データ構造を複数の最終チャンクへと再セグメント化すること、ここで、複数の区分は、該識別されたビットシーケンスの複数の位置に対応する、
を含む、該方法が提供される。
本発明の別の実施態様に従うと、
コンピュータプログラム製品であって、
1以上のコンピュータ読み取り可能な記憶媒体、及び該1以上のコンピュータ読み取り可能な記憶媒体に集合的に記憶されたプログラム命令を備えており、該プログラム命令が、
データ構造を複数の初期チャンクへとセグメント化する為のプログラム命令と;
該複数の初期チャンクのそれぞれについて、該データ構造内で一意である個々のチャンク内のビットシーケンスを識別することに基づいてチャンクキーを決定する為のプログラム命令と;及び、
該データ構造を複数の最終チャンクへと再セグメント化する為の命令と、ここで、複数の区分は、該識別されたビットシーケンスの複数の位置に対応する、
を含む、該コンピュータプログラム製品が提供される。
コンピュータプログラム製品であって、
1以上のコンピュータ読み取り可能な記憶媒体、及び該1以上のコンピュータ読み取り可能な記憶媒体に集合的に記憶されたプログラム命令を備えており、該プログラム命令が、
データ構造を複数の初期チャンクへとセグメント化する為のプログラム命令と;
該複数の初期チャンクのそれぞれについて、該データ構造内で一意である個々のチャンク内のビットシーケンスを識別することに基づいてチャンクキーを決定する為のプログラム命令と;及び、
該データ構造を複数の最終チャンクへと再セグメント化する為の命令と、ここで、複数の区分は、該識別されたビットシーケンスの複数の位置に対応する、
を含む、該コンピュータプログラム製品が提供される。
本発明の別の実施態様に従うと、コンピュータシステムであって、
1以上のコンピュータプロセッサ、1以上のコンピュータ読み取り可能な記憶媒体、及び、1以上のコンピュータプロセッサのうちの少なくとも1つによって実行する為の、該1以上の記憶媒体のうちの少なくとも1つに集合的に記憶されたプログラム命令を備えており、該プログラム命令は、
データ構造を複数の初期チャンクへとセグメント化する為のプログラム命令と;
該複数の初期チャンクのそれぞれについて、該データ構造内で一意である個々のチャンク内のビットシーケンスを識別することに基づいてチャンクキーを決定する為のプログラム命令と;及び、
該データ構造を複数の最終チャンクへと再セグメント化する為の命令と、ここで、複数の区分は、該識別されたビットシーケンスの複数の位置に対応する、
を含む、該コンピュータシステムが提供される。
1以上のコンピュータプロセッサ、1以上のコンピュータ読み取り可能な記憶媒体、及び、1以上のコンピュータプロセッサのうちの少なくとも1つによって実行する為の、該1以上の記憶媒体のうちの少なくとも1つに集合的に記憶されたプログラム命令を備えており、該プログラム命令は、
データ構造を複数の初期チャンクへとセグメント化する為のプログラム命令と;
該複数の初期チャンクのそれぞれについて、該データ構造内で一意である個々のチャンク内のビットシーケンスを識別することに基づいてチャンクキーを決定する為のプログラム命令と;及び、
該データ構造を複数の最終チャンクへと再セグメント化する為の命令と、ここで、複数の区分は、該識別されたビットシーケンスの複数の位置に対応する、
を含む、該コンピュータシステムが提供される。
本発明をより良く理解する為に、且つ、本発明がどのように実施されうるかをより明確に示す為に、例としてのみ、添付の図面が参照されるであろう。
既知の圧縮技術が利用されたとしても、データ構造が編集の為に開かれ、且つ該データ構造への編集が保存される為に、送受信されるべき大量のデータが依然として存在する。従って、より少ない量のデータフローを示す格納及びロードの為のアプローチの為の必要性が存在する。
データ量を減らす為にありうる方法は、編集されたデータ構造が保存されるときに、データ構造の変更の記録を送信することである。従って、変更の該記録のみが保存の為にメモリに送信され、そこで変更の該記録が、完全に最新のデータ構造を更新且つ保存する為に使用されうる。しかしながら、本発明の実施態様は、そのようなアプローチがデータ構造を保存する為のパフォーマンスを改善する一方で、該アプローチが、完全なデータ構造がアプリケーションによって取り出されるべき必要があるところのデータ構造を開く為のパフォーマンスを改善しないことを認識している。
事実、複数のユーザがデータ構造をローカルに保存している場合がありうる。1人のユーザが該データ構造を編集し、引き続き、共通の保存場所において該データ構造を(おそらく、上記された変更の記録を使用して)更新する場合、他のユーザは、最新のデータ構造を取得する為に、共通ストレージからデータ構造全体をロードする必要がある。
本発明は、以下に、図面を参照して説明されるだろう。
発明の詳細な説明及び特定の例は、装置、システム及び方法の例示的な実施態様を示しているが、説明のみを目的としており、本発明の範囲を限定することを意図していないことが理解されるべきである。本発明の装置、システム及び方法のこれら及び他の特徴、観点及び利点は、下記の発明の詳細な説明、添付の特許請求の範囲及び添付の図面からよりよく理解されるであろう。図面は単なる概略であり、一定の縮尺で描かれていないことが理解されるべきである。同じ又は同様の部品を示す為に、同じ参照番号が図全体を通して使用されていることがまた理解されるべきである。
開示された実施態様に対する変形は、図面、開示及び添付の特許請求の範囲を検討することにより、請求された発明を実施する当業者によって理解され且つ実行されることができる。特許請求の範囲において、単語「含む」(comprising)は他の要素又は工程を除外するものでなく、不定冠詞「1つ」(a)または「1つ」(an)は複数を除外するものでない。語「~適合される」が特許請求の範囲又は発明の詳細な説明において使用される場合、語「~適合される」は、語「~構成される」と同等であることが意図されていることに留意されたい。
本出願の文脈において、本発明の実施態様が方法を構成する場合、そのような方法は、コンピュータによる実行のためのプロセス、すなわち、コンピュータに実装可能な方法でありうることが理解されるべきである。それ故に、該方法の様々な工程は、コンピュータプログラムの様々な部分、例えば1以上のアルゴリズムの様々な部分、を反映しうる。
また、本出願の文脈において、システムは、本発明の方法の1以上の実施態様を実行するように適合された単一のデバイス又は分散されたデバイスの集合でありうる。例えば、システムは、パーソナルコンピュータ(PC)、サーバ、又はネットワークを介して接続されたPC若しくはサーバ又はそれらの組み合わせの集合体、例えば、ローカルエリアネットワーク、インターネット等、であり、本発明の方法の少なくとも1つの実施態様を協働して実行する。
本開示に従う実装は、データ構造を格納することに関する様々な技法、方法、スキーム若しくは解決策又はそれらの組み合わせに関する。特に、該データ構造はセグメント化され、対応するチャンクキーを持つデータの最終チャンクを生成する。該最終チャンクの複数の区分は、(複数の初期チャンクのそれぞれの該データ構造内で一意である)ビットシーケンスの複数の位置に対応するように選択され/構成され、ここで、該チャンクキーは、該識別されたビットシーケンスに基づく。
該データ構造をより小さな最終チャンクへとセグメント化することにより、該データ構造をロードするときに、ローカルに(例えば、キャッシュに)に格納されていない最終チャンクのみが取得される必要がある。従って、フェッチされる必要があるデータの量が減少し、計算の複雑さと時間の消費との両方の点でパフォーマンスが向上する。
しかしながら、データ構造を、固定されたサイズのチャンクへとセグメント化するだけでは、問題が発生することがよくある。特に、該データ構造のビットが付け加えられ又は削除された場合に、ビットが付け加えられ又は削除されたところのチャンクだけでなく、後続の全てのチャンクがまた更新される必要がある。従って、該データ構造が編集されるたびに(小さな方法であっても)、多くのチャンクが更新することを必要とするであろう。各クライアントは最新のデータ構造を取得する為に多くのチャンクを再ロードする必要がある故に、これは、多くのクライアントが使用の為にローカルにチャンクを格納する状況において特に問題になる可能性がある。
本発明の実施態様は、本発明によって生成された最終チャンク及びチャンクキーが上記の問題を克服しうることを認識する。特には、該データ構造は最初に、複数の初期チャンクへとセグメント化される。次に、各初期チャンクが分析されて、一意のビットシーケンスを識別する。次に、各初期チャンク内で識別された一意のビットシーケンスが、複数の該初期チャンクのそれぞれに対応するチャンクキーの基礎として使用される。引き続き、該データ構造は、一意のビットシーケンスの複数の位置に対応する位置で再セグメント化される。その結果、対応する最終チャンクを識別するチャンクキーのアレイが取得される。
従って、ビットが該データ構造に編集中に追加又は削除されるときに、それらの追加された又は削除されたビットに対応する最終チャンクのみが更新される。これは、特定された長さの最終チャンクではなく、該チャンクキーが最終チャンクのそれぞれの開始に対応するためである。
別の言い方をすれば、本発明の実施態様は、データ構造を複数の最終チャンクへとセグメント化することを提供し、それは、最終チャンクに適用される変更「デルタ」を可能にして、変更する最終チャンクの数を最小化する。従って、ローカルにキャッシュされた最終チャンクが次に、(例えば、ネットワークを介して、更新されたデータ構造全体を使用する必要がないように避けることによって)該データ構造をロードする負担を軽減する為に利用されうる。
提案された発明の更なる実施態様は、データ構造をロードする為の、コンピュータ実装された方法を提供する。該方法は、複数の最終チャンクと、該データ構造に関連付けられた対応するチャンクキーとを取り出すこと、ここで、該最終チャンクの複数の区分は、該データ構造内で一意であるビットシーケンスの複数の位置に対応し、及び該チャンクキーは該ビットシーケンスに基づく;該チャンクキーを、ローカルに格納された複数のチャンクと比較して、ローカルに格納された関連付けられたチャンクを有しないチャンクキーを識別すること;並びに、該識別されたチャンクキーに関連付けられた最終的なチャンクをロードすることを含む。
このようにして、ローカルに保存されていない最終チャンクのみがロードされる必要がある為、多くの最終チャンク、又はおそらくは該データ構造全体でさえ、ダウンロードする負担が軽減される。これは、データをチャンクキーに対応する最終チャンクへとセグメント化することによって可能になり、ここで、該最終チャンクは、該データ構造内で一意であるビットシーケンスの複数の位置に対応する位置で分割される。
幾つかの実施態様において、該データ構造をロードする方法は、該複数の最終チャンクを一緒にして、該データ構造を取得することをさらに含みうる。このようにして、最新のデータ構造が取得されうる。
該データ構造を格納する為の提案された1以上の概念の他の実施態様に目を向けると、該ビットシーケンスを識別することは、最初のチャンクの最初のビットから該最初のチャンクの最後のビットまで該データ構造を逐次スキャンニングして、該データ構造内で一意であり且つ該最初のビットに最も近いところの該チャンク内のビットシーケンスを識別することを含みうる。
該最初のチャンクを最初から最後までスキャンすることによって、一意のビットシーケンスが該最初のビットのできるだけ近くで識別されうる。このようにして、該最終チャンクを生成する該データ構造の区分は、それらが該初期チャンクのサイズにできるだけ近くなるようにしうる。これは、所与のサイズのチャンクが望ましい場合に特に有利であることを証明しうる。加えて、該最初のチャンクを最初のビットから最後のビットまでスキャンすることにより、該データ構造内で一意の該ビットシーケンスを効率的且つ確実に識別することを可能にしうる。
他の実施態様において、該データ構造を格納する方法は、該データ構造に対して行われた変更を含む変更の記録を受け取ること、該複数の最終チャンクを一緒にして、該データ構造を取得すること、変更の該記録に基づいて、該データ構造を更新すること、及び、該更新されたデータ構造を複数の更新された最終チャンクへとセグメント化すること、ここで、複数の区分は、該識別されたビットシーケンスの該複数の位置に対応する、を更に含みうる。
完全に更新されたデータ構造でなく、変更の記録が受信される為に、データ送信の負担が軽減される。変更の該記録に含まれるデータは、更新されたデータ構造よりもはるかに少ない場合があり、特に、行われた変更が該データ構造のサイズに比べて相対的に小さい場合はそうである。その後、変更の該記録を元のデータ構造と一緒にすることにより、更新されたデータ構造が簡単な方法で得られうる。既に生成されたチャンクキーは、最終チャンクを配信する為に再利用でき、該更新されたデータ構造をセグメント化する為に必要な全体的な処理量を削減する。
幾つかの実施態様において、該データ構造を格納する方法は、該複数の最終チャンクのそれぞれについて、該最終チャンクのサイズが所定の上限閾値よりも大きいかどうかを判断すること;及び、該最終チャンクの該サイズが所定の上限閾値よりも大きいと判断したことに応答して、該最終チャンクをセグメント化することを更に含みうる。
複数の該最終チャンクのそれぞれのサイズの為に上限閾値を効果的に設定することによって、セグメント化の利点が減少されるほど大きいチャンクが回避されうる。このことは、例えば、最初のチャンクの為の、該識別された(一意の)ビットシーケンスが該チャンクの最初のビットの近くにある場合に、且つ2番目の連続するチャンクの為の、該識別された(一意の)ビットシーケンスが最後のビットの近くにある場合に生じうる。結果として、該最終チャンクの該複数の区分は、該最終チャンクが非常に大きいものである可能性があり、それ故に、更なるセグメント化を要する。
なお更なる実施態様において、該データ構造を格納する方法は、該複数の最終チャンクのそれぞれについて、該最終チャンクのサイズが所定の下限閾値よりも小さいかどうかを判断すること;及び、該最終チャンクの該サイズが該所定の下限閾値未満であると判断したことに応答して、該最終チャンクを、隣接する最終チャンクと一緒にすることを更に含みうる。
上限閾値を設定することと同様に、下限閾値を設定することによって、セグメント化の利点が減少されるほど小さいチャンクが回避されうる。隣接するチャンクを一緒にすることによって、より適切なサイズを有するチャンクが得られうる。
追加の実施態様において、該データ構造を格納するアプローチは、該複数の最終チャンクのそれぞれについて、該最終チャンクのデータの1つのハッシュを計算すること、及び該ハッシュ及びセパレータを、該最終チャンクに対応する該チャンクキーに付け加えることを更に含みうる。
従って、該ハッシュは、該チャンクキーが対応する最終的なチャンクを識別しうる。
幾つかの実施態様において、該データ構造を格納するアプローチは、該複数の最終チャンクのそれぞれを圧縮すること、及び、該複数の圧縮された最終チャンクと、関連付けられた複数のチャンクキーとをサーバ上に格納することを更に含む。
データ構造を圧縮すること並びに該データ構造を複数のチャンクへとセグメント化することによって、より効率的なデータストレージ及び転送が実現されうる。
更なる実施態様において、該データ構造が、JavaScriptオブジェクトノテーション(JSON)データ構造、リッチテキスト形式(RTF)ファイル、又はコードファイルである。
JSONデータ構造は、特に多くの保存、読み込み及び再読み込みが必要である場合に、転送に問題のある大きなデータ構造になる傾向がある。JSONデータ構造は理解しやすく且つ使いやすい一方、多くの場合、それらは小さなオブジェクトでさえも表現するのに多くのバイトを必要とするため、スペース効率がよくない。従って、JSONデータ構造をセグメント化することによって、該JSONデータ構造を格納する方法を実装することにより、該JSONデータ構造の効率的な格納及び転送が達成されうる。
事実、該方法は、圧縮されていない任意のデータ構造に拡張されうる。例えば、RT ファイル又はコードファイルは、上記された方法において保存することでメリットが得られうる。
更に説明すると、非常に大きなデータ構造(例えば、100MBの長さの文字列)が与えられた場合、該文字列を管理可能なチャンク(例えば、それぞれ10MB)に分割することは有利でありうる。簡単な解決策は、該100MBの文字列を10MBのチャンクに単純に分けることでありうる。しかしながら、これは、100MBの文字列内の任意の数のビットを挿入又は削除することにより、それらのビット以降の全てのチャンクにおける変更をもたらすことを意味する。結果として、所望の長さ(例えば、10MB)に近いチャンクを生じうるが、同時に、挿入又は削除の結果として変化するチャンクの数を最小限にするところのチャンクメカニズムが望ましい。
本発明の実施態様に従うと、このセグメント化は、下記の工程によって達成されうる:
(i) 該データ構造を、(通常のサイズの)複数の初期チャンクへと分けること;
(ii) 初期チャンクのそれぞれについて、左から右にスキャンして、以前の任意の初期チャンクにおいても存在しない一意のビットシーケンス(例えば、一意の20バイトシーケンス)を見つけること;
(iii) 該識別された一意のビットシーケンスのそれぞれをチャンクキーのアレイに追加すること;
(iv) 該識別されたチャンクキーの複数の位置に対応する位置で該初期データ構造を再び分けて、複数の最終チャンクを得ること;
(v) 結果として得られた最終チャンクのいずれかが閾値の最小サイズよりも小さい場合に、それを以前の最終チャンクに付け加え、そして、対応するチャンクキーを破棄すること;
(vi) 結果として得られた最終チャンクのいずれか閾値の最大サイズよりも大きい場合に、工程(i)~(iv)と同じメカニズムを使用してその最終チャンクを分けること;及び、
(vii) チャンクキーのそれぞれについて、1つのセパレータと、該チャンクキーに対応する該最終チャンクの該チャンクデータの1つのハッシュとを付け加える。例えば、MD5又はセキュアハッシュアルゴリズム(SHA:secure hash algorithm)ハッシュが使用されうる。
(i) 該データ構造を、(通常のサイズの)複数の初期チャンクへと分けること;
(ii) 初期チャンクのそれぞれについて、左から右にスキャンして、以前の任意の初期チャンクにおいても存在しない一意のビットシーケンス(例えば、一意の20バイトシーケンス)を見つけること;
(iii) 該識別された一意のビットシーケンスのそれぞれをチャンクキーのアレイに追加すること;
(iv) 該識別されたチャンクキーの複数の位置に対応する位置で該初期データ構造を再び分けて、複数の最終チャンクを得ること;
(v) 結果として得られた最終チャンクのいずれかが閾値の最小サイズよりも小さい場合に、それを以前の最終チャンクに付け加え、そして、対応するチャンクキーを破棄すること;
(vi) 結果として得られた最終チャンクのいずれか閾値の最大サイズよりも大きい場合に、工程(i)~(iv)と同じメカニズムを使用してその最終チャンクを分けること;及び、
(vii) チャンクキーのそれぞれについて、1つのセパレータと、該チャンクキーに対応する該最終チャンクの該チャンクデータの1つのハッシュとを付け加える。例えば、MD5又はセキュアハッシュアルゴリズム(SHA:secure hash algorithm)ハッシュが使用されうる。
上記のセグメント化プロセスの結果は、チャンクキーのアレイと、データの対応する最終的なチャンクである。最終的なデータチャンクは、キャッシュキーとしてチャンクハッシュを使用して、ブラウザー上でローカルにキャッシュされうる。事実、最新のWEB開発アプリケーションにおいて、ローカルにキャッシュされたデータチャンクを格納する為に利用されうる非同期ストレージのサポートが存在することがしばしばある。
上記された様式において該データ構造をセグメント化することによって、該最終チャンク及びチャンクキーは以下に記載された様式で使用されうる。
最初に該データを保存する際に、全ての最終的なチャンクが圧縮され、そして、対応するチャンクキーとともにサーバに送信される。該サーバは、最終チャンクに関連付けられたデータベースに該最終チャンクを保存しうる。該サーバはまた、該チャンクキーを保存しうる。引き続き、該データをロードするときに、クライアントは該チャンクキーを該サーバから取得しうる。最後のチャンク毎に、該クライアントは該ローカルキャッシュを最初にチェックする(そして、利用可能な場合はそれを使用する)。最終チャンクがローカルキャッシュにおいて利用できない場合、次に、クライアントはその最終チャンクをサーバから取得し、そして、該キャッシュに追加しうる。該クライアントは、該最終的なチャンクを解凍し、そして一緒にして、完全なデータ構造を取得しうる。
その上、編集内容を該データ構造に保存する場合、該クライアントは、初期データ構造と該データ構造の更新されたバージョンとの間の変更の記録を計算し、そして、引き続き、変更の該記録を該サーバに送信しうる。次に、該サーバは、保存された最終チャンクを一緒にすることによって初期データ構造を再構築することができ、そして次に、変更の該記録を適用して、該更新されたデータ構造を取得する。次に、該サーバは、既存のチャンクキーを使用して、該更新されたデータ構造をセグメント化し、そして、結果として得られた更新された最終チャンクを保存する。換言すれば、該サーバは、上述の工程(iv)~(vii)に従って、該更新されたデータ構造をセグメント化しうる。
従って、これは、更新された複数の最終チャンクの1セットを結果としてもたらし、そのうちの一部は、以前の最終チャンクの間で一致する(変更の範囲に依存する)。このことは、クライアントが、更新された最終チャンクであって、変更されていない該最終チャンクをサーバからロードするだけで済む。例えば、該データ構造の先頭に挿入することが、最初の最終チャンクのみが影響を受け、他の全ての最終チャンクは同じままであろう。最終的に、このことは、サーバへの保存時とクライアントによるロード時の両方で、最新のデータ構造を取得する為に必要であるデータ転送量を削減する。
ここで図1に目を向けると、例示的な実施態様の観点が実装されうるところの例示的なシステム200のブロック図が提示されている。システム200は、コンピュータ、例えば、分散処理システムにおけるクライアント、の一例であり、該コンピュータにおいて、本発明の例示的な実施態様のプロセスを実装するコンピュータ使用可能なコード又は命令が配置されうる。例えば、システム200は、1つの実施態様に従うデータ操作ユニット及びチャンクキー生成ユニットを実装するように構成されうる。
図示されている例において、システム200は、ハブアーキテクチャ、例えば、ノースブリッジ及びメモリコントローラハブ(NB/MCH)202と、サウスブリッジ及び入出力(I/O)コントローラハブ(SB/ICH)204とを包含するハブアーキテクチャ、を使用する。処理ユニット206、メインメモリ208、及びグラフィックプロセッサ210は、NB/MCH 202に接続される。グラフィックプロセッサ210は、アクセラレーテッドグラフィックスポート(AGP:accelerated graphics port)を通じて、NB/MCH 202に接続されうる。
図示されている例において、ローカルエリアネットワーク(LAN:local area network)アダプタ212は、SB/ICH 204に接続する。オーディオアダプター216、キーボード及びマウスアダプター220、モデム222、読み取り専用メモリ(ROM:read only memory)224、ディスク、例えばハードディスクドライブ(HDD)226、CD-ROMドライブ230、ユニバーサルシリアルバス(USB:universal serial bus)ポート及び他の通信ポート232、並びにPCI/PCIeデバイス234は、第1のバス238及び第2のバス240を通じて、SB/ICH 204に接続する。PCI/PCIeデバイスは例えば、ノートブックコンピュータの為のイーサネットアダプタ、アドインカード及びPCカードを包含する。PCIはカードバスコントローラを使用する一方、PCIeを使用しない。ROM 224は例えば、フラッシュ基本入出力システム(BIOS:basic input/output system)でありうる。
HDD 226及びCD-ROMドライブ230は、第2のバス240を介して、SB/ICH 204に接続する。HDD 226及びCD-ROMドライブ230は例えば、インテグレーティド・ドライブ・エレクトロニクス(IDE:integrated drive electronics)又はシリアル・アドバンスド・テクノロジー・アタッチメント(SATA:serial advanced technology attachment)インタフェースを使用しうる。スーパーI/O(SIO:Super I/O)デバイス236は、SB/ICH 204に接続されうる。
オペレーティングシステムは、処理ユニット206において実行される。該オペレーティングシステムは、図2におけるシステム200内の様々コンポーネントの制御を調整し且つ提供する。クライアントとして、該オペレーティングシステムは、商業的に入手可能なオペレーティングシステムでありうる。オブジェクト指向プログラミングシステム、例えば、Java(登録商標)プログラミングシステム、は、オペレーティングシステムと連動して実行してもよく、且つシステム200上で実行されるJava(登録商標)プログラム又はアプリケーションからオペレーティングシステムへの呼び出しを提供する。Java(登録商標)及び全てのJava(登録商標)ベースの商標及びロゴは、Oracle及び/又はその関連会社の商標又は登録商標である。
サーバとして、システム200は例えば、Advanced Interactive Executive(AIX(登録商標))オペレーティングシステム又はLinux(登録商標)オペレーティングシステムを実行する、IBM(登録商標) eServer(商標)システムpコンピュータシステムでありうる。システム200は、処理ユニット206中に複数のプロセッサを含む対称型マルチプロセッサ(SMP:symmetric multiprocessor)システムでありうる。代替的には、単一のプロセッサシステムが使用されうる。IBM(登録商標)、eServer(商標)及びAIX(商標)は、米国及び/又は他の国におけるインターナショナル・ビジネス・マシーンズ・コーポレーションの商標である。登録商標Linux(登録商標)は、世界における該商標の所有者であるリーナス・トーバルズ(Linus Torvalds)の独占的ライセンシーであるリナックス(登録商標)ファウンデーション(Linux(登録商標) Foundation)からのサブライセンスに従って使用されている。
オペレーティングシステム、プログラミングシステム、及びアプリケーション又はプログラムの命令は、ストレージデバイス、例えばHDD 226、において配置され、処理ユニット206による実行の為にメインメモリ208へとロードされうる。同様に、1つの実施態様に従う1以上のメッセージ処理プログラムは、該ストレージデバイス若しくはメインメモリ208又はそれらの組み合わせによって格納されるように適合されうる。
本発明の例示的な実施態様のプロセスは、コンピュータで使用可能なプログラムコードを使用して、処理ユニット206によって実行され、該プログラムコードは、メモリ、例えば、メインメモリ208、ROM 224、に、又は1以上の周辺デバイス226及び230に配置されうる。
バスシステム、例えば、図1に示されている第1のバス238又は第2のバス240、は、1以上のバスを備えうる。もちろん、該バスシステムは、ファブリック又はアーキテクチャに接続された異なるコンポーネント又はデバイスの間のデータ転送を提供する任意のタイプの通信ファブリック又はアーキテクチャを使用して実装されうる。通信ユニット、例えば、図1のモデム222又はネットワークアダプタ212、は、データを送受信する為に使用される1以上のデバイスを備えうる。メモリは例えば、メインメモリ208、ROM 224、又はキャッシュ、例えば図1におけるNB/MCH 202において見られるキャッシュ、でありうる。
当業者は、図1におけるハードウェアが実装に依存して変わりうることを理解するであろう。他の内部ハードウェア又は周辺装置、例えば、フラッシュメモリ、同等の不揮発性メモリ又は光ディスクドライブ等、が、図1に示されているハードウェアに加えて又はその代わりに使用されうる。また、例示的な実施態様のプロセスは、本発明の精神及び範囲から逸脱することなしに、前述されたシステム以外のマルチプロセッサデータ処理システムに適用されうる。
その上、システム200は、多数の異なるデータ処理システム、例えば、クライアントコンピューティングデバイス、サーバコンピューティングデバイス、タブレットコンピュータ、ラップトップコンピュータ、電話又は他の通信デバイス、パーソナルデジタルアシスタント(PDA:personal digital assistant)等を包含する該データ処理システム、のいずれかの形態をとりうる。幾つかの例示的な実施態様において、システム200は、例えば、オペレーティングシステムファイル若しくはユーザ生成データ又はそれらの組み合わせを格納する為の不揮発性メモリを提供する為にフラッシュメモリで構成されたポータブルコンピューティングデバイスでありうる。従って、システム200は基本的に、アーキテクチャ上の制限のない、既知の又は後に開発される任意のデータ処理システムでありうる。
ここで図2を参照すると、例示的な実施態様に従うデータ構造を格納する為のアプローチの流れ図100が示されている。
工程102では、プロセッサは、データ構造を複数の初期チャンクへとセグメント化する。該セグメント化は、該データ構造が規則的なチャンク(例えば、10MB)に分けられるように規則的な間隔で実行されてもよく、又は個々に選択されてもよい。該チャンクのサイズは、所定の値に設定されてもよく、又はユーザによって選択されてもよい。
該データ構造は、データの挿入又は削除が、該挿入/削除の前に又は後の時点で該データ構造に変化を生じさせないところの任意のデータ構造でありうる。例えば、該データ構造は、圧縮されていないJSONデータ構造、コードファイル又はテキストファイルでありうる。しかしながら、該データ構造は、.docファイルでない場合がありうる。
工程104では、該複数の初期チャンクのそれぞれについて、プロセッサは、該データ構造内で一意である該チャンク内のビットシーケンスを識別する。該ビットシーケンスは、所定の長さ(例えば、20バイト)に設定されうる。
該ビットシーケンスを識別することは、該初期チャンクの最初のビットから該初期チャンクの最後のビットまで該データ構造を逐次スキャンニングして、該データ構造内で一意であり且つ該最初のビットに最も近いところの該チャンク内のビットシーケンスを識別することを含む。しかしながら、ビットの(固有の)シーケンスを検索する代替的な方法が利用されうる。該ビットシーケンスが、任意の以前のチャンクに存在しない単なるビットのシーケンスである場合がありうる。
工程106では、該複数の初期チャンクのそれぞれについて、プロセッサは、その初期チャンク内の該識別されたビットシーケンスに基づいてチャンクキーを決定する。
このようにして、該チャンクキーが、該データ構造のチャンクを一意に識別する為に使用されうる。該チャンクキーは単に、該識別されたビットシーケンスであってもよく、又は該識別されたビットシーケンスの別の表現、例えば、該識別されたビットシーケンスの圧縮されたバージョン、であってもよい。最後に、該チャンクキーは、チャンクのアレイに格納されうる。
工程108では、プロセッサは、該データ構造を複数の最終チャンクへと再セグメント化し、ここで、複数の区分は、該識別されたビットシーケンスの複数の位置に対応する。
別の言い方をすれば、該データ構造の複数の最終チャンクが得られ、最終チャンクのそれぞれが、対応するチャンクキーを有する。データが任意の個々の最終チャンクに挿入又はそれから削除されるときに、他の最終チャンクは変更されない。その結果、該データ構造を編集し、変更し、又は他の方法で変更する場合に、該最終チャンクの一部のみが変更される場合がありうる。これは最終的に、更新されたバージョンのデータ構造を、ローカルに格納された古いバージョンのデータ構造を有するクライアントにダウンロードするときに、該変更されたチャンクのみがダウンロードされる必要があるという効果を有する。
幾つかの実施態様において、アプローチ100は更に、工程110~112若しくは工程114~116又はそれらの組み合わせを含みうる。
工程110では、該複数の最終チャンクのそれぞれについて、プロセッサは最終チャンクの該データのハッシュを計算する。例えば、該データの該ハッシュは、該データのMD5ハッシュ、該データのSHAハッシュ、又は任意の既知のハッシュ技術でありうる。
工程112では、該複数の最終チャンクのそれぞれについて、プロセッサは、該ハッシュ及びセパレータを、該最終チャンクに対応する該チャンクキーに付け加える。
従って、チャンクキーのアレイは、最終チャンクデータのハッシュを使用して得られうる。この情報は、ローカルにキャッシュされうる。ウェブ開発アプリケーションにおいて、この情報は、ブラウザーにおいてローカルにキャッシュされうる。
工程114では、プロセッサは、該複数の最終チャンクのそれぞれを圧縮する。該最終チャンクは個々に圧縮され得、転送及び保存の速度と効率と向上させる。例えば、最終チャンクは、LZW圧縮又は他の既知の圧縮技術を使用して圧縮されうる。
工程116では、プロセッサは、該複数の圧縮された最終チャンクを格納し、そして、関連付けられた複数のチャンクキーが格納される。言い換えれば、該複数の圧縮された最終チャンク及びチャンクキーは、多くのクライアントによる使用の為に共通にアクセス可能なサーバ内に格納されうる。このようにして、必要に応じて該データ構造が、複数のクライアントによってロードされうる。更新が該サーバに送信され、そして、該クライアントは該サーバから(更新された最終チャンクをフェッチすることによって)最新のデータ構造にアクセスしうる。
図3A及び図3Bは、例示的な実施態様の1つの観点に従う、最終チャンクを更に処理する為のアプローチの流れ図を示す。どちらのアプローチも、所望のサイズの最終チャンクを配信することに向けられている。より特には、図3Aは、最終チャンクのそれぞれが所定の上限閾値を超えないことを保証し、及び図3Bは、最終チャンクのそれぞれが所定の下限閾値を少なくとも満たすことを保証する。
工程120では、プロセッサは、該最終チャンクのサイズが所定の上限閾値よりも大きいかどうかを判断する。該最終チャンクのサイズが該所定の上限閾値よりも大きくないと判断すると、該方法は終了する。
工程122では、該最終チャンクの該サイズが該所定の上限閾値よりも大きいと判断したことに応じて、プロセッサは、最終チャンクをセグメント化する。該最終チャンクは、図2に関連して説明されたアプローチを使用してセグメント化され得、対応するチャンクキーを有する複数の準最終チャンクを生成する。
従って、最終チャンクが過度に大きく、従って、データ構造を複数のチャンクへとセグメント化することに関連づけられた利点が抑制又は失われる。
工程130では、プロセッサは、該最終チャンクのサイズが所定の下限閾値よりも小さいかどうかを判断する。該最終チャンクの該サイズが所定の下限閾値未満でないと判断したことに応じて、該アプローチは終了する。
工程132では、最終チャンクのサイズが所定の下限閾値未満であるとの決定に応じて、プロセッサは、該最終チャンクを、隣接する最終チャンクと一緒にする。幾つかの実施態様において、該隣接する最終チャンクは以前の最終チャンクでありうる。この場合、小さすぎると判断されたところの該最終チャンクに関連付けられたチャンクキーは破棄されうる。過度に小さいところの最終チャンクの場合、再結合と個々の送信における増加された複雑さによる負担が、該データ構造を複数のチャンクへと分割することに伴う利点を上回る。
ここで図4を参照すると、例示的な実施態様の1つの観点に従う、該データ構造を更新すする(編集する)為のアプローチ140の流れ図が示されている。
工程142では、プロセッサは、該データ構造に対して行われた変更を含む変更の記録を受け取る。該変更の記録は、追加されるべき複数のビットとそれらの対応する複数の挿入位置、削除されるべき複数のビットとそれらの対応する複数の位置、及び変更されるべき複数のビットとそれらの対応する複数の位置を含みうる。
このように、完全に更新されたデータ構造を送信する為の計算と帯域幅との要求は、変更のみを送信することによって回避される。このことは、該データ構造に対して行われた変更の数が少ない場合に特に有益でありうる。しかしながら、このことは、古いバージョンの該データ構造が受信側で利用可能である必要がある。
工程144では、プロセッサは、該データ構造を得る為に、該複数の最終チャンクを一緒にする。別の言い方をすれば、古いバージョンの該データ構造は、格納された最終チャンクを一緒にすることによって取得される。このことは、最終チャンクの解凍を必要としうる。
工程146では、プロセッサは、変更の該記録に基づいて、該データ構造を更新する。
変更の該記録は、該データ構造に対して行われた更新の簡単なリストを提供しうる。それ故に、ビットが該データ構造に追加又は削除され、及びビットが変更されうる。このことにより、該以前のデータ構造から完全に最新のデータ構造が提供される。
工程148では、プロセッサは、該更新されたデータ構造を複数の更新された最終チャンクへとセグメント化し、ここで、複数の区分は、該識別されたビットシーケンスの該複数の位置に対応する。
該更新されたデータ構造が前に識別されたビットシーケンス(該チャンクキーに反映されている)の複数の位置に従って再セグメント化される場合に、更新されている最終チャンクが取得されうる(なぜならば、該最終チャンクは、追加されたビット、削除されたビット若しくは更新されたビット、又はそれらの組み合わせが行われたビットが含まれているからである)。追加されたビット、削除されたビット若しくは更新されたビット、又はそれらの組み合わせが行われたビットが含まれていない為に、未変更の最終チャンクがまた取得されうる。従って、以前のバージョンの該データ構造を有するクライアントが該更新されたデータ構造をロードしようとすると、変更されているそれらの最終チャンクをロードするだけでよい場合がありうる。
図5は、別の例示的な実施態様に従うデータ構造をロードする為のアプローチ300の流れ図を示す。
工程302では、プロセッサは、複数の最終チャンクと、該データ構造に関連付けられた対応するチャンクキーとを取り出す。該最終チャンクの複数の区分は、該データ構造内で一意であるビットシーケンスの複数の位置に対応し、及び、該チャンクキーは、該ビットシーケンスに基づく。言い換えれば、該データ構造は、図2~4に関して記載された方法のいずれかに従って格納される。
工程304では、プロセッサは、該チャンクキーを、ローカルに格納された複数のチャンクと比較して、関連付けられたローカルに格納されたチャンクを持たないチャンクキーを識別する。
別の言い方をすれば、該ローカルに格納されたチャンクは、以前のバージョンのデータ構造に対応しうる。ローカルに格納されたチャンクが関連付けられていないチャンクキーがある場合、このことは、ローカルに格納されたデータ構造が以前のバージョンであることを意味する。該識別されたチャンクキーは、該データ構造の最新バージョンを取得する為に、どの最終チャンクがロードされる必要があるかを示す。
工程306では、プロセッサは、該識別されたチャンクキーに関連付けられた最終チャンクをロードする。
このようにして、データ構造全体のロードが回避され得、従って、データ構造を格納及びロードするこの方法が適用されるネットワークを通じてデータの流れの量を減少させる。
アプローチ300の幾つかの実施態様は、工程308を更に含みうる。工程308では、プロセッサは、該データ構造を取得する為に、該複数の最終チャンクを一緒にする。
従って、該データ構造を格納し、ロードし、及び更新する為のシステムを通じて流れるデータの量を最小限に抑えながら、完全に更新されたデータ構造がロードされうる。
ここで図6を参照すると、データ構造を格納する為のシステム400の単純化されたブロック図が示されている。システム400は、少なくともデータ操作ユニット410及びチャンクキー生成ユニット420を備えている。任意的に、システム400は、インタフェースユニット430を備えうる。
第1に、データ操作ユニット410は、該データ構造を複数の初期チャンクへとセグメント化するように構成される。チャンクキー生成ユニット420は、(該複数の初期チャンクのそれぞれについて)該データ構造内で一意であるチャンク内のビットシーケンスの識別を識別することに基づいてチャンクキーを決定するように構成される。
更に、データ操作ユニット410は、該データ構造を複数の最終チャンクへと再セグメント化するように構成されており、ここで、複数の区分は、該識別されたビットシーケンスの複数の位置に対応する。
幾つかの実施態様において、チャンクキー生成ユニット420は、該データ構造内で一意であり且つ該最初のビットに最も近いところの該チャンク内のビットシーケンスを識別する為に、該最初のチャンクの最初のビットから該最初のチャンクの最後のビットまで該データ構造を逐次スキャンすることによって、該ビットシーケンスを識別するように構成される。
その上、システム400は更に、インタフェースユニット430を備えうる。インタフェースユニット430は、データ構造に対して行われた変更を含む変更の記録を受け取るように構成されうる。この場合、データ操作ユニット410は更に、該複数の最終チャンクを一緒にして、該データ構造を取得し、変更の該記録に基づいて、該データ構造を更新し、該更新されたデータ構造を複数の更新された最終チャンクへとセグメント化するように構成されており、ここで、複数の区分は、該識別されたビットシーケンスの該複数の位置に対応する。
更なる例として、図7に示されているように、実施態様は、ネットワーク化されたシステム7の一部を形成しうるコンピュータシステム70を備えうる。例えば、ディスプレイ装置によって表示されるべき画像を編集する為のシステムは、コンピュータシステム70によって実装されうる。コンピュータシステム/サーバ70の構成要素は、例えば、プロセッサ又は処理ユニット71、システムメモリ74、並びに、様々なシステム構成要素、例えばシステムメモリ74を包含する様々なシステム構成要素、を処理ユニット71に接続するバス90を包含するが、これらに限定されない。
システムメモリ74は、揮発性メモリの形態、例えば、ランダムアクセスメモリ(RAM)若しくはキャッシュメモリ76又はそれらの組み合わせ、でコンピュータシステム読み取り可能な媒体を含むことができる。コンピュータシステム/サーバ70は更に、他のリムーバブル/非リムーバブル、揮発性/不揮発性のコンピュータシステムストレージ媒体77をさらに備えうる。そのような例において、それぞれが、1以上のデータ媒体インタフェースによってバス90に接続されることができる。メモリ74は、提案された実施態様の機能を実行するように構成されたプログラムモジュールのセット(例えば、少なくとも1つ)を有する少なくとも1つのプログラム製品を包含しうる。例えば、メモリ74は、提案された実施態様に従うデータ構造を格納する方法をシステムに実行させる為に、処理ユニット71によって実行可能なプログラムを有するコンピュータプログラム製品を包含しうる。
プログラムモジュール79のセット(少なくとも1つ)を有するプログラム/ユーティリティ78は、メモリ74内に格納されうる。プログラムモジュール79は一般的に、データ構造を格納する為に提案された実施態様の機能若しくは方法論又はそれらの組み合わせを実行する。
コンピュータシステム/サーバ70はまた、1以上の外部デバイス80、例えば、キーボード、ポインティングデバイス、ディスプレイ85等、ユーザがコンピュータシステム/サーバ70と対話することを可能にする1以上のデバイス、若しくはコンピュータシステム/サーバ70が1以上の他のコンピューティングデバイスと通信することを可能にする任意のデバイス(例えば、ネットワークカード、モデム等)、又はそれらの組み合わせと通信しうる。そのような通信は、入出力(I/O)インタフェース72を介して行うことができる。さらに、コンピュータシステム/サーバ70は、ネットワークアダプタ73を介して、1以上のネットワーク、例えば、ローカルエリアネットワーク(LAN)、一般的なワイドエリアネットワーク(WAN)、若しくは公衆ネットワーク(例えば、インターネット)、又はそれらの組み合わせと(例えば、データ構造に対して行われた変更を含む変更の記録を受け取る為に)通信することができる。
本出願の文脈において、本発明の実施態様が方法を構成する場合、そのような方法は、コンピュータによる実行の為のプロセス、すなわちコンピュータに実装可能な方法、であることが理解されるべきである。それ故に、該方法の様々な工程が、コンピュータプログラムの様々な部分、例えば1以上のアルゴリズムの様々な部分、を反映する。
本発明は、統合の任意のありうる技術的詳細レベルで、システム、方法又はコンピュータプログラム若しくはコンピュータプログラム製品又はそれらの組み合わせでありうる。該コンピュータプログラム製品は、プロセッサに本発明の観点を実行させる為のコンピュータ可読プログラム命令を有する1以上のコンピュータ可読記憶媒体を包含しうる。
該コンピュータ可読記憶媒体は、命令実行デバイスによって使用する為の命令を保持且つ記憶することができる有形のデバイスであることができる。該コンピュータ可読記憶媒体は、例えば、電子記憶装置、磁気記憶装置、光記憶装置、電磁記憶装置、半導体記憶装置、又はこれらの任意の適切な組み合わせでありうるが、これらに限定されない。該コンピュータ可読記憶媒体のより具体的な例の非網羅的なリストは、下記を包含する:ポータブルコンピュータ・ディスケット、ハードディスク、ランダムアクセスメモリ(RAM:random access memory)、読み取り専用メモリ(ROM:read-only memory)、消去可能なプログラム可能な読み取り専用メモリ(EPROM(erasable programmable read-only memory)又はフラッシュメモリ)、スタティック・ランダム・アクセス・メモリ(SRAM:static random access memory)、ポータブル・コンパクト・ディスク読み取り専用メモリ(CD-ROM:compact disc read-only memory)、デジタル多用途ディスク(DVD:digital versatile disk)、メモリスティック、フロッピーディスク、機械的に符号化されたデバイス、例えばパンチカード若しくは命令が記録されている溝内の隆起構造又はこれらの任意の適切な組み合わせ。本明細書において使用される場合、コンピュータ可読記憶媒体は、一時的な信号それ自体、例えば電波又は他の自由に伝播する電磁波、導波管若しく他の伝送媒体を伝播する電磁波(例えば、光ファイバケーブルを通過する光パルス)、又は電線を介して送信される電気信号、であると解釈されるべきでない。
本明細書において記載されたコンピュータ可読プログラム命令は、コンピュータ可読記憶媒体から個々のコンピューティングデバイス/処理デバイスに、又はネットワーク、例えばインターネット、ローカルエリアネットワーク、ワイドエリアネットワーク若しくはワイヤレスネットワーク又はそれらの組み合わせ、を介して外部コンピュータ又は外部記憶デバイスにダウンロードされることができる。該ネットワークは、銅線伝送ケーブル、光伝送ファイバ、無線伝送、ルータ、ファイアウォール、スイッチ、ゲートウェイコンピュータ若しくはエッジサーバ又はこれらの組み合わせで構成されうる。各コンピューティングデバイス/処理デバイスにおけるネットワークアダプタカード又はネットワーク・インターフェースは、ネットワークからコンピュータ可読プログラム命令を受信し、そして、該コンピュータ可読プログラム命令を、個々のコンピューティングデバイス/処理デバイス内にコンピュータ可読記憶媒体中に記憶する為に送信する。
本発明の動作を実行する為のコンピュータ可読プログラム命令は、アセンブラ命令、命令セットアーキテクチャ(ISA:instruction-set-architecture)命令、マシン命令、マシン依存命令、マイクロコード、ファームウェア命令、状態設定データ、集積回路の為の構成データ、又は、1以上のプログラミング言語、例えばオブジェクト指向プログラミング言語(例えば、Smalltalk、C++等)、慣用的な手続き型プログラミング言語(例えば「C」プログラミング言語又は同様のプログラミング言語)、の任意の組み合わせで書かれているソースコード又はオブジェクトコードのいずれか、でありうる。該コンピュータ可読プログラム命令は、ユーザのコンピュータ上で全体的に、ユーザのコンピュータ上で部分的に、ユーザのコンピュータ上でスタンドアロン・ソフトウェア・パッケージとして部分的に、ユーザのコンピュータ上で部分的に且つリモートコンピュータ上で部分的に、又はリモートコンピュータ若しくはサーバ上で全体的に、実行されうる。後者のシナリオにおいて、該リモートコンピュータは、任意のタイプのネットワーク、例えばローカルエリアネットワーク(LAN:local area network)若しくはワイドエリアネットワーク(WAN:wide area network)、を介してユーザのコンピュータに接続されうるか、又は該接続は(例えば、インターネットサービスプロバイダを使用したインターネットを通じて)外部コンピュータに対して行われうる。幾つかの実施態様において、電子回路、例えばプログラマブル論理回路、フィールドプログラマブルゲートアレイ(FPGA:field-programmable gate arrays)又はプログラマブルロジックアレイ(PLA:programmable logic arrays)、は、本発明の観点を実行する為に、コンピュータ可読プログラム命令の状態情報を利用することによって、電子回路をパーソナライズすることによって、コンピュータ可読プログラム命令を実行しうる。
本発明の観点は、本発明の実施態様に従う、方法、装置(システム)及びコンピュータプログラム若しくはコンピュータプログラム製品のフローチャート図若しくはブロック図又はそれらの組み合わせを参照して本明細書において記載されている。該フローチャート図若しくは該ブロック図又はそれらの組み合わせの各ブロック、並びに該フローチャート図若しくは該ブロック図又はそれらの組み合わせにおける複数のブロックの組み合わせは、コンピュータ可読プログラム命令によって実装されることができることが理解されるべきであろう。
これらのコンピュータ可読プログラム命令は、該コンピュータ又は他のプログラム可能なデータ処理装置のプロセッサを介して実行する命令が該フローチャート若しくはブロック図又はそれらの組み合わせの1以上のブロックにおいて特定された機能/動作を実装するための手段を生成するように、コンピュータのプロセッサ又は他のプログラム可能なデータ処理装置に提供されて、マシンを作り出しうる。これらのコンピュータ可読プログラム命令はまた、記憶された命令を有するコンピュータ可読記憶媒体が、該フローチャート図若しくはブロック図又はそれらの組み合わせの1以上のブロックにおいて特定される機能/動作の観点を実装する命令を含む製造品を含むように、コンピュータプログラム可能なデータ処理装置若しくは他のデバイス又はこれらの組み合わせに特定の様式で機能するように指示することができるコンピュータ可読記憶媒体中に記憶されうる。
該コンピュータ可読プログラム命令はまた、コンピュータ上、他のプログラム可能なデータ処理装置上又は他のデバイス上で実行される命令が、該フローチャート若しくはブロック図若しくはそれらの組み合わせの1以上のブロックにおいて特定される機能/動作を実装するように、上記のコンピュータ上、他のプログラム可能なデータ処理装置上又は他のデバイス上にロードされて、コンピュータ、他のプログラム可能な装置又は他のデバイス上で一連の動作ステップを実行させて、コンピュータに実装されたプロセスを生成しうる。
図面中のフローチャート及びブロック図は、本発明の様々な実施態様に従う、システム、方法及びコンピュータプログラム若しくはコンピュータプログラム製品のありうる実装の、アーキテクチャ、機能及び動作を示す。これに関連して、該フローチャート又はブロック図における各ブロックは、命令のモジュール、セグメント、又はその一部を表し得、それは、特定された1以上の論理機能を実装する為の1以上の実行可能命令を含む。幾つかの代替の実装において、該ブロックにおいて示されている機能は、図面中に示されている順序とは異なって生じうる。例えば、連続して示されている2つのブロックは、実際には、関与する機能に依存して、同時に、実質的に同時に、部分的又は全体的に時間的に重複する様式で実行される1つのステップとして達成されうるか、又は該ブロックは、逆の順序で実行されうる。該ブロック図若しくはフローチャート図又はこれらの組み合わせの各ブロック、並びに該ブロック図若しくはフローチャート図又はこれらの組み合わせの複数のブロックの組み合わせは、特定された機能又は動作を実行する特別な目的のハードウェアベースのシステムによって実装できることができ、又は特別な目的のハードウェアとコンピュータ命令との組み合わせを実行することができることにまた留意されたい。
本発明の様々な実施態様の記述は、例示の目的の為に示されているが、網羅的であることを意図されるものでなく、開示された実施態様に限定されることを意図されるものでもない。同様に、本明細書に記載された本発明の実施態様の特徴又は機能の例は、特定の実施態様説明において使用されるか又は例として記載されるかにかかわらず、本明細書に記載された本発明の実施態様を限定すること、又は本明細書に記載された例に開示を限定することを意図するものでない。記述された実施態様の範囲及び精神から逸脱すること無しに、多くの修正及び変形が当業者には明らかであろう。本明細書において使用されている語は、実施態様の原理、市場で見られている技術に対する実際の適用若しくは技術的改善を説明する為に、又は当業者が本明細書において開示された実施態様を理解できることを可能にする為に選択された。
Claims (20)
- コンピュータに実装された方法であって、
データ構造を複数の初期チャンクへとセグメント化すること;
前記複数の初期チャンクのそれぞれについて、前記データ構造内で一意である個々のチャンク内のビットシーケンスを識別することに基づいてチャンクキーを決定すること;及び、
前記データ構造を複数の最終チャンクへと再セグメント化すること、ここで、複数の区分は、前記識別されたビットシーケンスの複数の位置に対応する、
を含む、前記方法。 - 前記ビットシーケンスを識別することが、前記個々のチャンクの最初のビットから前記個々のチャンクの最後のビットまで前記データ構造を逐次スキャンニングして、前記データ構造内で一意であり且つ前記最初のビットに最も近いところの前記チャンク内のビットシーケンスを識別することを含む、請求項1に記載の、コンピュータに実装された方法。
- 前記データ構造に対して行われた変更を含む変更の記録を受け取ること;
前記複数の最終チャンクを一緒にして、前記データ構造を取得すること;
変更の前記記録に基づいて、前記データ構造を更新すること;及び、
前記更新されたデータ構造を複数の更新された最終チャンクへとセグメント化すること、ここで、複数の区分は、前記識別されたビットシーケンスの前記複数の位置に対応する、
を更に含む、請求項1に記載の、コンピュータに実装された方法。 - 前記複数の最終チャンクのそれぞれについて、前記個々の最終チャンクのサイズが所定の上限閾値よりも大きいことを判断すること;及び、
前記個々の最終チャンクの前記サイズが前記所定の上限閾値よりも大きいと判断したことに応じて、前記個々の最終チャンクをセグメント化すること
を更に含む、請求項1に記載の、コンピュータに実装された方法。 - 前記複数の最終チャンクのそれぞれについて、前記個々の最終チャンクのサイズが所定の下限閾値よりも小さいことを判断すること;及び、
前記個々の最終チャンクの前記サイズが前記所定の上限閾値未満であると判断したことに応じて、前記個々の最終チャンクを、隣接する最終チャンクと一緒にすること
を更に含む、請求項1に記載の、コンピュータに実装された方法。 - 前記複数の最終チャンクのそれぞれについて、
前記個々の最終チャンクの前記データの1つのハッシュを計算すること;及び、
前記1つのハッシュ及び1つのセパレータを、前記個々の最終チャンクに対応する前記チャンクキーに付け加えること
を更に含む、請求項1に記載の、コンピュータに実装された方法。 - 前記複数の最終チャンクのそれぞれを圧縮すること;及び、
前記複数の圧縮された最終チャンクと、関連付けられた複数のチャンクキーとをサーバ上に格納すること
を更に含む、請求項1に記載の、コンピュータに実装された方法。 - 前記データ構造が、JavaScriptオブジェクトノテーション(JSON)データ構造、リッチテキスト形式(RTF)ファイル、及びコードファイルからなる群から選択されるものである、請求項1に記載の、コンピュータに実装された方法。
- 前記チャンクキーをローカルに格納された複数のチャンクと比較して、ローカルに格納された関連付けられたチャンクを有しないチャンクキーを識別すること;及び、
前記識別されたチャンクキーに関連付けられた前記個々の最終チャンクをロードすること
を更に含む、請求項1に記載の、コンピュータに実装された方法。 - 前記複数の最終チャンクを一緒にして、前記データ構造を取得することを更に含む、請求項1に記載の、コンピュータに実装された方法。
- 前記複数の最終チャンクと、前記データ構造に関連付けられた対応するチャンクキーとを取り出すこと、ここで、
前記最終チャンクの複数の区分は、前記データ構造内で一意であるビットシーケンスの複数の位置に対応し;及び、
前記チャンクキーは、前記ビットシーケンスに基づく;
前記チャンクキーを、ローカルに格納された複数のチャンクと比較して、ローカルに格納された関連付けられたチャンクを有しないチャンクキーを識別すること;及び、
前記識別されたチャンクキーに関連付けられた前記最終チャンクをロードすること
を更に含む、請求項1に記載の、コンピュータに実装された方法。 - コンピュータプログラムであって、
データ構造を複数の初期チャンクへとセグメント化する為のプログラム命令と;
前記複数の初期チャンクのそれぞれについて、前記データ構造内で一意である個々のチャンク内のビットシーケンスを識別することに基づいてチャンクキーを決定すること;及び、
前記データ構造を複数の最終チャンクへと再セグメント化する為の命令と、ここで、複数の区分は、前記識別されたビットシーケンスの複数の位置に対応する、
を含む工程をプロセッサに実行させる、前記コンピュータプログラム。 - 前記ビットシーケンスを識別することが、前記個々のチャンクの最初のビットから前記個々のチャンクの最後のビットまで、前記データ構造を逐次スキャンニングして、前記データ構造内で一意であり且つ前記最初のビットに最も近いところの前記チャンク内のビットシーケンスを識別することを含む、請求項12に記載のコンピュータプログラム。
- 前記データ構造に対して行われた変更を含む変更の記録を受け取ること;
前記複数の最終チャンクを一緒にして、前記データ構造を取得すること;
変更の前記記録に基づいて、前記データ構造を更新すること;及び、
前記更新されたデータ構造を複数の更新された最終チャンクへとセグメント化すること、ここで、複数の区分は、前記識別されたビットシーケンスの前記複数の位置に対応する、
を含む工程を前記プロセッサに更に実行させる、請求項12に記載のコンピュータプログラム。 - 前記複数の最終チャンクのそれぞれについて、前記個々の最終チャンクのサイズが所定の上限閾値よりも大きいことを判断すること;及び、
前記個々の最終チャンクの前記サイズが前記所定の上限閾値よりも大きいことを判断したことに応じて、前記個々の最終チャンクをセグメント化すること
を含む工程を前記プロセッサに更に実行させる、請求項12に記載のコンピュータプログラム。 - 前記複数の最終チャンクのそれぞれについて、前記個々の最終チャンクのサイズが所定の下限閾値よりも小さいことを判断すること;及び、
前記個々の最終チャンクの前記サイズが前記所定の下限閾値よりも小さいと判断したことに応じて、前記個々の最終チャンクを、隣接する最終チャンクと一緒にすること
を含む工程を前記プロセッサに更に実行させる、請求項12に記載のコンピュータプログラム。 - 前記複数の最終チャンクのそれぞれについて、
前記個々の最終チャンクの前記データの1つのハッシュを計算すること;及び、
前記ハッシュ及びセパレータを、前記個々の最終チャンクに対応する前記チャンクキーに付け加えること、
を含む工程を前記プロセッサに更に実行させる、請求項12に記載のコンピュータプログラム。 - 前記複数の最終チャンクのそれぞれを圧縮すること;及び、
前記複数の圧縮された最終チャンクと、関連付けられた複数のチャンクキーとをサーバ上に格納すること
を含む工程を前記プロセッサに更に実行させる、請求項12に記載のコンピュータプログラム。 - 前記データ構造が、JavaScriptオブジェクトノテーション(JSON)データ構造、リッチテキスト形式(RTF)ファイル、及びコードファイルからなる群から選択されるものである、
請求項12に記載のコンピュータプログラム。 - コンピュータシステムであって、
1以上のコンピュータプロセッサ、1以上のコンピュータ読み取り可能な記憶媒体、及び、1以上のコンピュータプロセッサのうちの少なくとも1つによって実行する為の、前記1以上の記憶媒体のうちの少なくとも1つに集合的に記憶されたプログラム命令を備えており、前記プログラム命令は、
データ構造を複数の初期チャンクへとセグメント化する為のプログラム命令と;
前記複数の初期チャンクのそれぞれについて、前記データ構造内で一意である個々のチャンク内のビットシーケンスを識別することに基づいてチャンクキーを決定する為のプログラム命令と;及び、
前記データ構造を複数の最終チャンクへと再セグメント化する為の命令と、ここで、複数の区分は、前記識別されたビットシーケンスの複数の位置に対応する、
を含む、前記コンピュータシステム。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US17/497,993 | 2021-10-11 | ||
US17/497,993 US11907193B2 (en) | 2021-10-11 | 2021-10-11 | Storing a data structure |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2023057546A true JP2023057546A (ja) | 2023-04-21 |
Family
ID=85798711
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2022162653A Pending JP2023057546A (ja) | 2021-10-11 | 2022-10-07 | コンピュータに実装された方法、コンピュータプログラム又はコンピュータシステム |
Country Status (3)
Country | Link |
---|---|
US (1) | US11907193B2 (ja) |
JP (1) | JP2023057546A (ja) |
CN (1) | CN115963984A (ja) |
Family Cites Families (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8108353B2 (en) * | 2008-06-11 | 2012-01-31 | International Business Machines Corporation | Method and apparatus for block size optimization in de-duplication |
US9077681B2 (en) | 2010-10-05 | 2015-07-07 | Microsoft Technology Licensing, Llc | Page loading optimization using page-maintained cache |
US20120089579A1 (en) * | 2010-10-08 | 2012-04-12 | Sandeep Ranade | Compression pipeline for storing data in a storage cloud |
EP2444134A1 (en) | 2010-10-19 | 2012-04-25 | Travian Games GmbH | Methods, server system and browser clients for providing a game map of a browser-based online multi-player game |
US9408050B2 (en) | 2013-01-31 | 2016-08-02 | Hewlett Packard Enterprise Development Lp | Reducing bandwidth usage of a mobile client |
US9355116B2 (en) * | 2013-03-04 | 2016-05-31 | Vmware, Inc. | Cross-file differential content synchronization using cached patches |
US9697228B2 (en) * | 2014-04-14 | 2017-07-04 | Vembu Technologies Private Limited | Secure relational file system with version control, deduplication, and error correction |
CN105608142B (zh) | 2015-12-17 | 2019-02-12 | 浙江大华技术股份有限公司 | 一种Json数据的存储方法及装置 |
WO2021102673A1 (en) * | 2019-11-26 | 2021-06-03 | Citrix Systems, Inc. | Document storage and management |
-
2021
- 2021-10-11 US US17/497,993 patent/US11907193B2/en active Active
-
2022
- 2022-10-07 JP JP2022162653A patent/JP2023057546A/ja active Pending
- 2022-10-10 CN CN202211234948.4A patent/CN115963984A/zh active Pending
Also Published As
Publication number | Publication date |
---|---|
CN115963984A (zh) | 2023-04-14 |
US11907193B2 (en) | 2024-02-20 |
US20230110803A1 (en) | 2023-04-13 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11243915B2 (en) | Method and apparatus for data deduplication | |
CN109254733B (zh) | 用于存储数据的方法、装置和系统 | |
US10089338B2 (en) | Method and apparatus for object storage | |
US20120089579A1 (en) | Compression pipeline for storing data in a storage cloud | |
US20120089775A1 (en) | Method and apparatus for selecting references to use in data compression | |
CN110109915B (zh) | 用于管理哈希表的方法、设备和计算机程序产品 | |
AU2013210018B2 (en) | Location independent files | |
US10452615B2 (en) | Mixing software based compression requests with hardware accelerated requests | |
CN112748863B (zh) | 用于处理数据的方法、电子设备和计算机程序产品 | |
US10970254B2 (en) | Utilization of tail portions of a fixed size block in a deduplication environment by deduplication chunk virtualization | |
CN114416670B (zh) | 适用于网盘文档的索引创建方法、装置、网盘及存储介质 | |
US20170123677A1 (en) | Integration of Reference Sets with Segment Flash Management | |
JP2023057546A (ja) | コンピュータに実装された方法、コンピュータプログラム又はコンピュータシステム | |
US11507511B2 (en) | Method, electronic device and computer program product for storing data | |
US11042329B2 (en) | Reordering a sequence of files based on compression rates in data transfer | |
CN114840502A (zh) | 使用不同的散列大小和压缩大小进行散列 | |
CN113076325A (zh) | 一种大字段数据处理方法、装置、设备及存储介质 | |
US11907128B2 (en) | Managing data of different cache types within a storage system | |
US11675513B2 (en) | Selectively shearing data when manipulating data during record processing | |
US11500590B2 (en) | Method, device and computer program product for data writing | |
US20240028519A1 (en) | Data processing method, electronic device and computer program product | |
US20220035534A1 (en) | Method, device, and computer program product for extending partition of storage system | |
CN111831620B (zh) | 用于存储管理的方法、设备和计算机程序产品 | |
CN114840500A (zh) | 用于通过跳过选定数据进行重复数据删除的散列 | |
CN114840501A (zh) | 使用多个散列引擎对数据集进行散列 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
RD16 | Notification of change of power of sub attorney |
Free format text: JAPANESE INTERMEDIATE CODE: A7436 Effective date: 20221227 |
|
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A821 Effective date: 20221227 |
|
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20230202 |