私は PostgreSQL を使用しているので、 ltreeと呼ばれるモジュールがあります。これは、私のニーズの少なくとも 1 つ、パフォーマンスを満たします (スケーラビリティについてはわかりませんか?具体化されたパス ツリーはうまくスケーリングしないと誰かが言います..)。
私が開発しているアプリケーションは完全に大きなツリー、ノード、サブツリーなどを中心に構築された CMS であるため、これらのノードをキューに入れる際のパフォーマンスは絶対に不可欠ですが、階層的な大きな (成長するにつれて) ツリーであるため、作業し、そこから操作します。 GUI (CRUD)、データベース内のツリー (子レコード) を正しく更新しながら、ユーザーがドラッグ アンド ドロップしてノード、サブツリーなどを並べ替えられるようにしたいと考えています。
ツリー内のノード/サブツリーの移動と並べ替えは、実際には ltree/マテリアライズド パス ツリーの目的ではないことを理解しています。パフォーマンスとサブツリーとノードの移動、またはおそらく... ltreeが実際に過去からの残り物ではなく、まだ使用する価値がある場合、PostgreSQLのltreeモジュールでこれをどのように達成できますか? この場合、なぜ/なぜ ltree を使用しないのですか?
要件:
- もちろん、クエリのパフォーマンスは私の最優先事項です (すべてのノード、サブツリー、リーフ)。
- ツリーは、深いレベルのネストとソートをサポートする必要があります
- そしてもちろん、ツリーは大規模な成長とスケーリングをサポートする必要があります
- 1 つの「なんでも屋」ツリーの実装が存在しない場合、または複雑すぎて価値がない場合は、GUI から再注文する間、少しの待ち時間を許容できます。
また、ブリッジ テーブルとも呼ばれる Closure テーブル (たくさん!)、Nested Intervals (正確な実装方法がわからず、適切な例や要点が現在存在しない?)、または B ツリー モデルも検討しています。これらが上記の4つの要件をどのように満たすか、まだよくわかりません。入れ子になった間隔でサブツリーとノードを再編成することは簡単に思え、パフォーマンスも良さそうです。適切なものを選択するのは非常に困難です。
私は間違いなくパフォーマンス(クエリ/読み取りパフォーマンス)、スケーラビリティ、ソートが必要なので、ソート順のあるクロージャーテーブルは非常に近いと思いましたが、クロージャーテーブルとディスクスペースのオーバーヘッドがツリーとしてどれだけ大きくなるか想像できませんノードが大きくなります。クロージャ テーブルとスケーラビリティについては、よくわかりません。これについて心配するのは間違っていますか?このタスクの最善の解決策は何ですか?