The Cusp of Helix

Fertile Forest Model
[第一章: RDB に於けるツリー構造データ]

優れたモデルとは?

ツリー構造データを扱うモデルの優劣は、次の2つの基準で判定できます。

  1. 検索クエリの実行速度が実用に耐えられる範囲である事
  2. ツリー構造データのために追加される「延べカラム数」が少ない事

(1) 検索クエリの実行速度が実用に耐えられる範囲である事

Web ページをめくって次のページが表示されるまで2分かかる Web サイトがあったとして、それを「実用に耐えられる速度」と考える人はいないと思います。現在の日本のインターネット環境では、5秒でも遅いと見做されるでしょう。データベースは Web ページの動的表示で使われる用途が多いので、人が遅さを感じるかどうかは Web ページをめくった時の待ち時間を基準として考えます。

検索クエリが index を参照できる場合は、レコード数が数億であったとしても実用に耐えられるだけの実行速度が出ます。反対に index が参照できないクエリでは、数十万のレコード数から検索する場合でも、条件によっては十分な実行速度は得られなくなります。ひとつ目の判定基準は、「 index が参照できる検索クエリが書けるかどうか」と同義であると言えます。

ツリー構造データを RDB で扱う場合、「あるノードの部分木や子ノードを取得する検索クエリ」が最も多く利用されます。従って、「ツリー構造データモデルで実用的な検索クエリが書ける」は、次のように換言できます。

任意のノードの部分木や子ノードを取得する検索クエリを、 index を参照するように記述できる事

部分木や子ノードを検索するクエリが index を参照できるモデルなら、ノード数が数億でも、階層の深さが数百であっても、実用に耐えられるだけの検索速度が維持できるでしょう。

(2) ツリー構造データのために追加される「延べカラム数」が少ない事

延べカラム数というのは、階層構造を保存するためのテーブルに保存するレコード数を考慮した表現です。あるモデルで、階層構造カラムが n 個あり、ひとつのノードにつきレコードを m 個登録しなければならないとします。その場合、レコード数を n とした時の延べカラム数は (n * m) 個になります。ほとんどのモデルではレコード数 (m = 1) になるので、一部のモデルを除いて「述べカラム数=階層構造カラム数」と見做せます。

この延べカラム数が少ないほど、エコノミーで優れたモデルデザインであると言えます。データ量がすくなけば DB サーバーの容量も少なくて済みますし、検索速度への影響も軽減されるからです。

ふたつ目の判定基準は、現在では少し重要度が下がっています。ハードディスクの容量も小さかった頃は保存されるデータ量の大きさが重要な問題でしたが、ハード面の進化により容量に関する問題の影響は軽減されつつあるからです。

とは言え、「ツリー構造データのために追加されるカラム数が少ないモデルが優る」という点について異論を挟む余地はないでしょう。