PHP と MySQL: 階層データ ストレージの最適化
複数のノードと無制限のレベルを含む複雑な階層データを扱う場合、以下を採用することが重要です。効率的なデータベースの保存と取得戦略。この目的のために、ネストされたセット モデルが推奨されるアプローチとして登場しました。
ネストされたセット モデルは、ツリー構造内の各ノードに左右の値の一意の範囲を割り当てます。左側の値は XML ドキュメント内のノードのサブツリーの最初の行番号を表し、右側の値は最後の行番号を示します。
MySQL ドキュメントの次のデータ例を考えてみましょう。
+-------------+----------------------+-----+-----+ | category_id | name | lft | rgt | +-------------+----------------------+-----+-----+ | 1 | ELECTRONICS | 1 | 20 | | 2 | TELEVISIONS | 2 | 9 | | 3 | TUBE | 3 | 4 | | 4 | LCD | 5 | 6 | | 5 | PLASMA | 7 | 8 | | 6 | PORTABLE ELECTRONICS | 10 | 19 | | 7 | MP3 PLAYERS | 11 | 14 | | 8 | FLASH | 12 | 13 | | 9 | CD PLAYERS | 15 | 16 | | 10 | 2 WAY RADIOS | 17 | 18 | +-------------+----------------------+-----+-----+
左右の値を XML ドキュメントの行番号として解釈することで、結果の階層構造を視覚化できます。
<electronics> <televisions> <tube/> <lcd/> <plasma/> </televisions> <portable electronics> <mp3 players> <flash/> </mp3 players> <cd players/> <2 way radios/> </portable electronics> </electronics>
この視覚化により、Nested Set Model が非常に効率的である理由が明確になります。連続した範囲の値をノードとそのサブツリーに割り当てることで、単一のクエリでサブツリー全体を取得できます。これにより、複数のクエリや結合が不要になり、パフォーマンスが大幅に向上します。
Doctrine のような ORM を使用している場合、組み込みのネストされたセット機能が提供されるため、このアプローチの実装がさらに簡単になります。ネストされたセット モデルを活用することで、最適な取得速度と複雑な階層データ構造の効率的な管理を確保できます。
以上がネストされたセット モデルは PHP と MySQL の階層データ ストレージをどのように最適化しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。