2

ファミリー サイトで Dapper.NET を使用する予定です。

ツリーのようなデータが構造内に多数存在します。循環/非循環ツリー関係を操作するための最適なクエリを提供するデータベースはどれですか?

階層クエリの使いやすさとパフォーマンスの比較を知りたいです。すなわち。SQL Server の CTE、Oracle の Connect By/Start with など。

この種のツリー構造データのマイクロ ORM として dapper は最適な選択でしょうか?

これに適したデータベースと適切な Micro ORM を選択する際に意見が必要です。

私の悪い英語でごめんなさい。

4

1 に答える 1

3

私の質問はまだ残っています:あなたはどのくらいのデータを期待しますか?

ただし、それとは別に、データ用に選択するデータベースのタイプだけでなく、テーブル構造でもあります。階層ツリーは、ニーズに応じてさまざまな方法で保存できます。

テーブル構造

特定の構造は、トラバーサル読み取りでは非常に高速ですが、挿入/更新(つまり、ネストされたセット)では低速であり、他の構造(隣接リスト)はその逆です。読み取りと書き込みの比率が99:1の場合(今日のアプリケーションの大部分は書き込みよりもはるかに多くの読み取りを行います)、左、右、深さ、および親を持つ変更されたネストされたセット構造を選択する可能性があります。これにより、読み取りシナリオの可能性が最も高くなります。

データベースタイプ

大量のデータを対象としている場合を除いて、最もよく知っているSQLデータベース(MSSQL、MySQL、Oracle)のいずれかを使用することをお勧めします。ただし、データベースに膨大な数の階層ノードが含まれる場合は、専用のグラフ指向データベースをいちゃつく方がよい場合があります。

8000万ノード

変更されたネストされたセットソリューションを選択する場合(負の値も使用するため、挿入/更新の半分の更新数)、階層テーブルに。が含まれますleftrightIDおよびParentID約1.2GBのテーブルになる列。しかし、それは少なくとも2年間の使用後のあなたの最高の見積もりです。

私のおすすめ

迅速に作業を進めてください-結局のところ不要であることが判明した場合は、可能な限り最良のデータベースを使用して階層を格納することで過度の設計を行わないでください。したがって、最初はリレーショナルDBを使用することをお勧めします。そうすれば、数百万のレコードの後でソリューションが苦戦し始めても、すぐに市場に参入できます。しかし、データベースが苦戦し始める前に(ここでは何年も話している)、2つのことが得られます。

  1. そもそも製品が普及するかどうかがわかるので(すでに多くの系図サービスがあります)、新しいテクノロジーの学習に投資する必要はありません。実績のあるサポートされているテクノロジーを使用しているため、すぐに市場に参入できます
  2. あなたの製品が成功したとしても(そして私はそれが成功することを心から願っています)、それでも別のストレージソリューションを学び、それを実装するのに十分な時間が与えられます。適切なコードレイヤーがあれば、後で必要になったときにストレージを切り替えるのは難しくありません。
于 2013-02-04T09:56:18.697 に答える