1

1 つのセッションで 500000 のデータ レコードをアップロードして処理することが通常の操作 (C# .NET 3.5 + MS SQL 2005) である場合、情報管理システムの DB レイヤー、ビジネス ロジック、およびクロスプラットフォーム API をどのように編成しますか?

私は特に、並行性、スケーラビリティ、および信頼性に優れた、実稼働環境で実証済みのページング パターンに関心があります。

どの方向に掘り下げるか、誰かアイデアはありますか?

  • オープン ソース プロジェクト (OK でない限り、言語やプラットフォームは気にしません)
  • 記事
  • Google キーワード
  • フォーラムまたはニュースグループ

どんな助けでも大歓迎です!

アップデート:

  • 単純なページング (つまり、SQL 2005 の行番号) は機能しません。これは、データベースに対して多数の同時変更が行われるためです。ページ要求の間に削除または挿入されたアイテムは、現在のページ インデックスを自動的に無効にします。
4

6 に答える 6

2

膨大な量のデータに対する DB の最適化に関しては、おそらく「BigTable」手法を使用することでメリットが得られます。ここの記事はとても役に立ちました。すぐに考えられるのは、DB 非正規化を使用して、ディスク容量と引き換えにパフォーマンスを向上させることです。

MS SQL 2005 でのページングについては、ROW_NUMBER 関数の使用に関する詳細情報を参照してください。これは簡単な例です。Google を使用して大量のそれらを見つけることができます (キーワード: ROW_NUMBER ページング SQL 2005)。ただし、あまり掘り下げないでください。実装には魔法はなく、ページング自体をどのように使用/提示するかについてです。グーグル検索が良い例です。

注: NHibernate フレームワークのネイティブ ページング サポートは、このソリューションには不十分であることがわかりました。

また、FULLTEXT インデックスの作成と全文検索の使用にもおそらく関心があるでしょう。フルテキスト インデックスの作成に関するMSDN の記事と、フルテキスト検索に関する情報を次に示します。

幸運を。

于 2008-09-30T08:43:23.107 に答える
2

これは始めるのに良い本です:

Martin Fowler によるエンタープライズ アプリケーション アーキテクチャのパターン

于 2008-09-30T05:01:08.257 に答える
0

ダンディカ、

部分的非正規化について言及していただきありがとうございます。はい、それはいくつかのクエリのパフォーマンスを改善するために私が検討しているアプローチです。

残念ながら、NHibernate ORM はパフォーマンスのオーバーヘッドが追加されるため、このソリューションには適合しません。SQL ページングと同じ - 多数の同時編集のシナリオでは機能しません (ストレス テストで検出) 。

于 2008-09-30T09:02:50.390 に答える
0

私は、数十万件のレコードのフィードをアップロードするエンタープライズ データ ウェアハウスを管理しています。
これがあなたのシナリオかどうかはわかりませんが、私たちは:

  • Sybase データベースにアップロードするテキスト ファイルを受け取ります。
  • awk を使用してさまざまなフィードをフォーマットし、それらが共通のフォーマットになるようにします。
  • bcp を使用して、正規化されていない中間テーブルにそれらをロードします。
  • ストアド プロシージャを実行して、正規化されたデータベース structre を設定します。
  • 非正規化中間テーブルから削除します。

これはかなりうまく動作しますが、アップロードを順次に強制しています。つまり、フィードが到着するとキューに入り、キューの先頭にあるフィードを完全に処理してから、残りを確認します。

それは役に立ちますか?

于 2008-09-30T09:21:53.963 に答える
-1

SQL ページングと同じ - 多数の同時編集のシナリオでは機能しません (ストレス テストで検出)。

前述したように、ページングの実装に魔法はありません。ROW_NUMBER または一時テーブルを使用します。ここでの魔法は、最も一般的な実際の使用シナリオを評価することです。ユーザー追跡とともに一時テーブルを使用すると、同時編集シナリオを克服するのに少し役立つ場合があります。質問に答えることでより多くの勝利を得られると思いますが、

  1. ユーザーが別のページに移動する前に、あるページに滞在する時間は?
  2. ユーザーが最初のページから他のページに移動する頻度は?
  3. ユーザーが閲覧する一般的なページ数は?
  4. ユーザーがあるページから別のページに移動している間に一部の情報が変更された場合、それはどれほど重要ですか?
  5. ユーザーが情報を表示するページにいる間に一部の情報が削除された場合、それはどれほど重要ですか?

次のような質問に集中しないようにしてください。最初に上記の質問に答えてから、本当に重要な状況だけを処理する前に。

もう 1 つの注意点は UI です。右矢印と左矢印だけ、またはページ番号を並べるよりもはるかに優れたソリューションがあるため、できる限り多くのページング UI を確認してください。一部のソリューションは、技術的に解決できないページング シナリオを隠したり、克服したりするのに役立ちます。

PSこの回答が役立つ場合は、最初の回答と組み合わせます。

于 2008-10-01T07:34:50.033 に答える