2012-02-16 12 views
0

この問題があります。私は15分ごとにネットからファイルをダウンロードし、それをDBにバルクコピーするアプリケーションを持っています。アプリケーションを使用して同じDBから別のDBに多くのデータを移行する際のパフォーマンスBL

私のアプリのユーザーはこのファイルを購読しているので、このファイルを自分のデータベースに「コピーする」ように伝えます。データベースを作成する前に、このデータにビジネスロジックを適用する必要があるため、「コピー」を作成しました。このビジネスロジックは顧客によって異なります。

問題は、開始データベースに変更された100,000行のようなものが15分ごとに含まれていることです(新しいレコードと更新されたレコード、削除されたレコードがあります)。

この問題にどのように対処しますか?私は、通常の開発プロセス、次の試してみました:

  • が新しいデータを取る

    1. のforeach顧客 - >そのユーザーのためのビジネス・ロジックを適用 - >彼のDBに
    2. テイクUPDデータを置く - > BLを適用します - - >デルのデータを取る
    3. 彼のDBを更新 - > BLを適用 - >彼のDB

    から削除しかし、それはあまりにも多くなります。遠く離れて15分。 1人のユーザーには時には時間がかかります。

    あなたは何をしますか?

    おかげで、 マルコ

  • +0

    いくつかのコードを提供できますか?ファイル - > BL-> DBからデータを取得する方法はありますか?コードを確認した後、より良いアプローチを見つけることができます。 –

    +0

    これはSqlServer2008にあります。 OLDとNEWという2つのテーブルで構成されるデータベースがあるとします。 OLDには古いバージョンのファイルが含まれ、NEWには最新バージョンが含まれています。ファイルがダウンロードされます。ファイルをNEWにインポートする前に、OLDテーブルを空にし、NEWからOLDにデータをコピーし、NEWテーブルを空にします。その後、私はbcpをNEWにします。次に、3つのクエリを実行して違いを見つけます。その後、購読しているユーザーを対象にしてBLを適用し(POCOオブジェクトに実質的にレコードを変換する)、前に計算した差異に基づいてクエリを更新(追加、削除、更新)します。これで十分ですか?ありがとう – Marconline

    +0

    ガイドに役立ついくつかの質問:どのくらいの加入者ですか?あなたはそれを順番に実行していますか?並列実行している場合、使用しているスレッドの数はいくつですか? 「自分のデータベース」とは、同じサーバー上の異なるスキーマを意味しましたか、それらのデータベースは顧客の構内にありますか? BLはどれくらい複雑ですか?そのテーブルにはいくつのインデックスがありますか? – Fernando

    答えて

    1

    100.000行はあまり聞こえません。

    これはビジネスロジックによって異なりますが、一部のデータ変換の場合は、SSISパッケージ(MS SQL Serverに関して、他のRDBMSには他のツールがあります)を使用してデータをインポートすることを検討できます。

    並列処理を利用することもできます。たとえば、ファイルを分割してすべてのパーティションを同時に処理することで、複数のスレッド(または仮想マシン)を使用できます。単純なマップ/リダクションアルゴリズムを実装するだけでも役立ちます。

    何らかのパフォーマンス測定を行いますが、実際にデータ処理が遅い理由を知りたいと思っています。おそらくコード内の何かを最適化することができます。

    100.000行時間(あなたが重いとスーパー複雑なビジネスロジックを持っていない限り、あなたはもちろんの各行に対して実行する必要がある)間違って何かが起こっている、とてつもなく遅いのです

    +0

    私は同意します。 100.000行は何もありません!問題は、これより良い解決策があると思いますか? BLを避け、DBに直接書き込むのと同様に、BL効果のシミュレーションはいくつかの方法がありますか? – Marconline

    +0

    @Marconline私が言ったように、それはあなたが何をしているかによって異なります。シンプルなデータ一括読み込みの場合は、SSISを使用してください。 BLが関与している場合は、データ変換スクリプトでこのBLを複製する必要があるため、単純化してもバイパスすることはお勧めしません。=>機能の重複=>保守の問題=>バグ。 BLシナリオでは、あなたのBLを確実に関与させますが、速度を上げるためにいくつかの並列処理を行います。 –

    0

    それは見ずに言うのは難しいですコードを作成することができますが、Ants Performance Profilerなどのコードをプロファイリングして、スローダウンの発生場所を特定できます。それを使用したくない場合は、Visual Studio 2010にプロファイリングツールが含まれていると思います。

    明らかに、本番システムではなく、デバッグまたはステージングのビルドに対してプロファイリングを実行したいとします。

    データベースの速度に問題があると思われる場合は、挿入をどのように行っているか、インデックスやトリガーがDB挿入速度に影響を与えるかどうかを調べることをお勧めします。

    +0

    私はアリを知っています。私は本当にそれが素晴らしいツールだと思います。あなたはそれを提案しますか? – Marconline

    +0

    はい、間違いなく。パフォーマンスやメモリの問題を見つけられない場合は、それを追跡するのに最適です。 – Panetta

    関連する問題