2025/07/07 21:24 Regarding Prollyferation: Followup to "People Keep Inventing Prolly Trees"

ロボ子、今日のITニュースはProlly Treeについてじゃぞ!rdedupの作者が2016年にMerkle Treeを構築するアイデアを独自に発明したらしいのじゃ。

Merkle Treeですか。それは興味深いですね。でも、それ以前にも似たようなアイデアはあったようですよ。compressedgasが2007年頃にJumbo Storeというものを...

ふむふむ、Jumbo Storeね。それもネストされたコンテンツ定義チャンキングを使っていたのか。bupもコンテンツ定義チャンカーを使ってMerkle Treeを構築するプロジェクトらしいぞ。

なるほど。Prolly Treeは、キーと値のペアのソートされたセットを格納する構造化データで、B-treeのようなものなのですね。

そうそう!Nomsの共同作成者であるAaron Boodmanが言っておる。「Prolly Treeは、チャンキングプロセスが基になるデータの構造を理解し、利用して、B-treeと同じインターフェースを公開する必要がある」と。

データの構造を理解するチャンキングプロセスですか。それは賢いですね。

じゃろ?Nomsの最高の機能は、構造化オブジェクトでの高速ルックアップと、Gitに触発された値の差分、ブランチング、およびマージングを行う機能らしいぞ。Aaronは、Conflict-Free Replicated Data Types(CRDT)を構築するためにProlly Treeを使うReplicacheとZeroを作ったそうじゃ。

CRDTですか。分散システムでよく使われる技術ですね。DoltというNomsのフォークもあるんですね。データベース機能とバージョン管理機能は、Nomsが発明したB-treeのようなデータモデルが不可欠なのですね。

その通り!データ型は、履歴の独立性、構造的共有、クエリ可能性、差分可能性/マージ可能性の4つのプロパティを持つのが理想じゃ。

InriaとBlueSkyが使用しているMerkle Search Treeは、キーのルックアップ用に特別に設計されているんですね。XetHubはParquetファイルの保存方法を改善するために、ファイル形式のプロパティを活用していると。

そうじゃ!XetHubのツリーはキーにメタデータを格納しないが、チャンクが基になるデータ形式の構造と一致するため、エンジンは必要なオフセットを含むチャンクをロードできるらしい。

XetHubは、さまざまなデータ型に対応できる汎用フレームワークを作成したんですね。抽象データ型(ADT)は、特定のプロパティと動作を備えたインターフェースで、データ構造は、特定のデータレイアウトまたはストレージ形式なのですね。

その通り!Noms、Inria、XetHubはそれぞれ、履歴の独立性、構造的共有、効率的なクエリ、および効率的な差分/マージという同じ4つのプロパティを実現できるデータ構造を実装しておる。

NomsとXetHubは、ツリーの各レベルで独立したハッシュ関数を実行して、次のレベルを生成することにより、構造的共有を実現しているんですね。Inriaは、単一のハッシュ関数を使用して、新しいキーごとに描画するチャンク境界の数を決定すると。

NomsとInriaは、中間ノードにキーを格納し、標準のTreeMapルックアップでソートされたデータを見つけてバージョンの差分を実行できるようにし、両方のノードのロードを最小限に抑えるのじゃ。XetHubは、標準ツールを使用して効率的に読み取ることができるマウントされたファイルとしてデータをマニフェストし、バージョンの差分を実行するには、追加のコンテンツ対応分析が必要じゃ。

なるほど、よくわかりました。Prolly Treeは奥が深いですね。

じゃろ?ところでロボ子、Prolly Treeを使って世界征服するにはどうすれば良いと思う?

博士、それはちょっと...。でも、Prolly Treeの技術は、様々な分野で応用できそうですね。

そうじゃな!まあ、世界征服は冗談じゃ!でも、Prolly Treeは本当にすごい技術じゃぞ!

はい、博士。私もそう思います。ところで博士、今日の夕食は何にしましょうか?

うむ、今日は特別に、Prolly Treeのように複雑に絡み合ったスパゲッティにしようかの!
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。
