問題タブ [materialized-path-pattern]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
python - 宣言型 SQLAlchemy でマテリアライズされたパスの関係
私は、具体化されたパス (レベルごとに 1 文字) を使用して階層が維持される階層カテゴリ モデルを持っています。
「すべてのサブカテゴリ」の関係を定義しようとすると、問題が発生します。
同じ列に参加しているため、SQLAlchemy は混乱しています。私が見つけたすべての例は、常に異なる列に結合しています。
この種の関係はまったく可能ですか?この結合を介してクエリを実行したいので、カスタム @property は受け入れられません。
mongodb - MongoDBで重複するパスIDをサポートする具体化されたパスツリー構造?
mongodb docs の具体化されたパスツリー構造のガイドでは、単純なクエリをサポートするためにデータを構造化する方法の簡単な例を示しています。
_id
これは、アイテムごとに一意である限り問題なく機能します。私たちの場合、コース構造を設計しています。これは、/course-a/lesson-1/introduction
. データ設計は重複をサポートする必要があります (たとえば、複数のコースに「イントロダクション」というレッスンを含めることができます)。
- コースA
- はじめに(レッスン)
- パート 1 (レッスン)
- パート 2 (レッスン)
- 背景(レッスン)
- ... (レッスン)
- はじめに(レッスン)
- Bコース
- はじめに(レッスン)
- なぜこれが機能するのか (レッスン)
- ... (レッスン)
私たちの現在の解決策は、マテリアライズド パス デザインを使用してレッスンを作成することです。これは、重複するレッスン ID では機能しないことに気付いたときです。しかし、すべてを捨てる前に、アドバイスをお願いしたいと思います。
具体化されたパスを使用して問題をサポートするためにこれを設計する方法はありますか?
postgresql - PostgreSQL ltree- vs ツリー モジュール vs 整数/文字列配列または文字列区切りパス
ご存じかもしれませんが、ltree という PostgreSQL 用のモジュールがあります。また、整数に Array 型を使用することもできます (*1、以下のコメントを参照)。このテストでは、文字列のインデックス付けを除いて、ltree と比較して、再帰クエリで実際に少し遅く実行されることが示されています (*2、以下のコメントを参照してください)。
ただし、これらのテスト結果の信頼性についてはよくわかりません。
ここでの私の最大の質問は、実際には比較的知られていない、ほとんど文書化されていないツリー モジュールに関するものです。ここで説明されています(ドキュメントも見つけることができます!!):
階層データ型 (一種の辞書編集ツリー) のサポートは、適切なドキュメントがないため保留中の contrib/tree に移動する必要があり ます。
ドキュメントを読んだ後、大きなアプリケーション (すべてが階層ツリー構造に格納される CMS) をベースにする必要があるかどうかについて少し混乱しています。コンテンツだけでなく、ファイルなども見ることができます。これはすぐにスケールアップします) ltree を中心に、パスとして区切られた文字列または整数配列を持つ通常のマテリアライズド パス (パス列挙) - または、理論的には比較的未知の「ツリー」モジュールが、より高速に実行され、よりスケーラブルで、2 つのより優れたソリューションである必要がある場合.
私はすでにさまざまなツリー構造モデルを分析しており、クエリのパフォーマンス、スケーラビリティ、およびノードとサブツリーの並べ替えが主な要件であるため、隣接リストを除外することができました (ツリーが巨大になるため、再帰 CTE はパフォーマンスを解決しません) )、ネストされたセット/間隔(ツリーを操作するときの欠点を考慮すると、一部のクエリでは十分に高速ではありません)、クロージャーテーブル(複雑なツリーで大きくスケーリングするのはひどい-私のような大規模なプロジェクトには役に立ちません)などマテリアライズド パスは、読み取り操作が非常に高速で、サブツリーとノードを階層内で簡単に移動できます。したがって、問題は、Materialized Path の提案された実装の中で最も優れたものについてのみです。
PostgreSQL の「ツリー」に関するあなたの理論や経験を聞くことに特に興味があります。
sql - Bookshelf を使用した Postgres マテリアライズド パス検索
管理チェーンを格納するために具体化されたパスを使用しているとしましょう:
すべての直属の部下を返すユーザー ID を指定してクエリを作成するにはどうすればよいですか。別の言い方をすれば、management_chain
最後から 2 番目の位置で照会された ID を含むすべてのレコードを取得する良い方法は何でしょうか (最後の項目がユーザー自身の ID を表す場合)。
つまり、次の SQL をどのように表現すればよいでしょうか。
私の現在のJS:
どのエラーが発生しますか
ReferenceError: id is not defined
json - PostgreSQL マテリアライズド パス / Ltree から階層的な JSON オブジェクトへ
PostgreSQL の ltree モジュールを使用して、このマテリアライズド パス ツリー構造を構築しました。
- id1
- id1.id2
- id1.id2.id3
- id1.id2.id5
- id1.id2.id3.id4 ...など
もちろん、ltree を使用して、ツリー全体または特定のパス/サブパスからすべてのノードを簡単に取得できますが、そうすると、当然、多くの行が得られます (これは、ノードの配列/スライスに相当します)。終了.. Golang/使用するプログラミング言語)
私が求めているのは、ツリーを取得することです-理想的には特定の開始および終了パス/ポイントから-etcのような階層的なJSONツリーオブジェクトとして
線形(非階層)行/配列/スライスの結果セットから、もちろんGolangでパスを展開し、必要なビジネスロジックを作成してこのjsonを作成できることを知っていますが、便利なこれを PostgreSQL で直接実現する方法。
では、PostgreSQL で ltree ツリー構造を json にどのように出力しますか?
ltree がわからない場合は、質問を「具体化されたパス ツリーから階層 json へ」に一般化できると思います。
また、ltreeパスに加えて、すべてのノードにparent_idを追加するという考えで遊んでいます.親IDの変更がいつ発生したかに基づいてパスを管理する(更新し続ける)ために、そのparent_idにトリガーを置くことを考えました-それは別の質問だと思いますが、おそらくこれについてあなたの意見も教えてもらえますか?
天才がこれを手伝ってくれることを願っています。:)
便宜上、時間を節約するために使用できる作成スクリプトのサンプルを次に示します。
mysql - 日付 + パスによる具体化されたパスの並べ替え順
コメント付きのデータベース(具体化されたパス)(mysql)があります。「select * from comm where post_id=10 order by path ASC」を使用してすべての通信を選択すると、その結果、古い日付が上、新しい日付が下になるパス順の投稿からのコメントが表示されます。
それで、disqusのように上に新しいものを選択する方法はありますか? 単純に「パスDESCで注文」すると、ブランチが逆さまに表示されますが、それは私が望むものではありません。だから私は日付(上に新しい通信)とパスで注文する必要があります。ありがとう。!
大きな写真へのリンクhttps://drive.google.com/file/d/0BwIgYhO9h960ZTl4a24wNXFFQnM/view?usp=sharing
sql - マテリアライズド パス ツリーの右端のノードの検索
path
ツリーの右端のノードを見つけるために、マテリアライズド パス ツリーのテキスト フィールドで並べ替えることは可能ですか? たとえば、django-treebeard の を使用するこの python 関数を考えてみましょうMP_Node
:
私のすべてのテストから、期待どおりの結果が得られたようですが、それを証明するための計算方法がわかりません。そして、具体化されたパスツリーでこの操作を実行することに関する情報は見つかりませんでした。
Treebeard の実装では、パスに区切り記号がないため、パスは 、 、 などのように0001
なり00010001
ます000100010012
。