ツリーをモデル化するデータベースがあります。このデータは、かなり巨大になる可能性があります。つまり、数百万行になる可能性があります。(主キーは実際にはbigint
であるため、数十億行をサポートしたい可能性があると思いますが、これはおそらく実現しないでしょう)。
1 つのノードは非常に大量の直接の子を持つことができ、階層の上位にあるほど可能性が高くなります。リーフの実際の最大深度、つまりルートに到達するためにトラバースする必要があるノードの数に指定された制限はありませんが、実際には、これは通常、せいぜい数百を超えることはありません。普通なら20以下でしょう。
このテーブルへの挿入は非常に頻繁に行われるため、高性能である必要があります。挿入される挿入ノードは常にリーフ ノードであり、常に最後の兄弟の後にあります。ノードが移動されることはありません。削除は常にサブツリー全体として行われます。サブツリーの検索は、このテーブルに対して行われるもう 1 つの操作です。同じパフォーマンス要件はありませんが、もちろん、できるだけ高速にしたいと考えています。
現在、これは親/子モデルでモデル化されており、挿入には効率的ですが、サブツリーの検索には非常に時間がかかります。テーブルが大きくなると、これは非常に遅くなり、サブツリーの検索に数分かかる場合があります。
そこで、これをおそらく SQL Server で新しい hierarchyid 型を使用するように変換することを考えていました。しかし、これが適切かどうかを判断するのに苦労しています。私にはわかりませんが、このシナリオで実行する操作には、このようなツリーが適しています。(ここで間違っている場合は修正してください)。
ただし、hierarchyid の最大サイズは 892 バイトであるとも述べています。ただし、これが実際に何を意味するのかについての情報は見つかりません。hierarchyid はどのようにエンコードされますか? ヒエラルキー ID が不足するのはいつですか?