0

レポートの作成に使用される大量 (数百万) のレコードを保存する最良の方法は何ですか? アプリケーションの性質上、検索に一致する各レコードをアプリケーションに送信して処理する必要があるため、クエリの実行速度とクエリ結果の転送速度の両方が大きな要因になります。

現在、私たちのアプリケーションは、クエリ パフォーマンスのために大量のインデックスが作成された 1 つのストレートな MSSQL テーブルにレコードを格納します。データ自体はリレーショナルではないため、レコードを 1 つのテーブルにしか格納できませんが、代替ストレージのアイデアを持っている人はいますか、それともリレーショナル データベースがこれに適していますか?

SQL ソリューションは非常に優れたパフォーマンスを提供しますが、他に優れたバックエンドの代替手段があるかどうかに関心があります。たとえば、NoSQL データベースは検討を開始する有効なソリューションですか?

クエリは少数の列に対して行われますが、結果のサイズはさまざまです (期間やその他のパラメーターに応じて、各実行に必要な行数)。

これについていくつかの新しい視点を得るのを手伝ってくれてありがとう。

私たちは .NET ショップであるため、.NET および Windows サーバーに適したソリューション/アイデアはすべて私たちにとって大きなプラスですが、これについて得ることができるすべての意見に感謝しています. ソリューションとは、MSSQL や他のリレーショナル データベース以外のバックエンドを意味しますか?

4

2 に答える 2

1

クエリの効率は、クエリとインデックスに基づいています

クライアントにデータを転送する場合:

  • まっすぐなDataReaderは非常に効率的です
  • ドラッパーも早いけど使ってない

クエリ結果を保存して再実行する必要があるという有効な解釈がありました
クエリは 1 回だけ実行されます

Data
int ID iden 
varchar Value1
varchar Value2

SavedQuery
int ID iden 
varchar name 

SavedQueryResults 
int QueryID PK
int DataID PK

Select [Data].[Value1],  [Data].[Value2]
From [Data] 
Join [SavedQueryResults]
  on [SavedQueryResults].[DataID] = [Data].[ID]
 and [SavedQueryResults].[QueryID] = x 

SavedQueryResults の PK を使用すると、インデックス シークが発生するはずであり、それ以上のことはできません。

SavedQueryResults を作成するときは、断片化を抑えるために挿入で DataID による順序を使用します

于 2013-04-12T13:29:37.763 に答える
0

トリガーで更新されたいくつかのレポートテーブルがあれば、はるかに効率的です。CQRS の世界のビュー モデルと同じです。

于 2013-04-12T16:27:13.887 に答える