2009-06-12 15 views
0

私はニューヨークに拠点を置くデータベースを持っており、HKのユーザーはこのデータベースからデータを取得しようとしています。取得されるデータは約20MBです(ctvとしてDatatableを保存すると、ファイルサイズは20MBです)。それはデータが来るのに約20分かかります。C#でリモートサーバーから巨大なデータにアクセスする

データベースとしてSQL Server 2005を使用し、デスクトップアプリケーションとしてC#を使用しています。私は予算の制約のためにHKユーザーのために別のデータベースを持つことはできません。

誰でも検索時間を約5分にする方法を提案できますか?

よろしく、

Pavan

答えて

0

必要なデータのみを取得してください。適切なデータを返すためにWebサービスを作成することで、これを行うことができますが、それは安全であることがわかっている必要があります。

また、HKにSQL Server Expressデータベースをインストールすることもできます。これは無料で、最大4GBのデータをサポートしますが、2つの環境に一致するようにデータを複製する必要があります。

1回のリクエストでデータベースから完全な20MBのデータを返すのは過度のようです。おそらくそれには正当な理由があるでしょうか?

+0

ウェブサービスでも、jgubbyの応答に注意して、出力を圧縮できます。 – Hooloovoo

+0

これは素晴らしいアイデアですが、私たちの環境で予備のWebサーバーが不足しているため、Webサービスが問題になりません。 私が探している解決策は、HKサーバーにフェッチして保存しているdatatableのxml/csvファイルを作成してキャッシュすることです。クライアントはデータベースではなくこのキャッシュファイルからデータを取得します。 HKユーザーが来る前に、サーバー上で何らかの仕事を経てこのファイルを作成することができます。 ご意見はありますか? –

0

データベース全体を取得しようとしていますか?そうでない場合は、ページングをお勧めします。つまり、一度に100レコードを取得します。

+0

私はデータベース全体ではなく、一部のデータだけを取得しています。その基本的なレポートは、私はそれにページングを実装することはできません。ユーザーはレポート全体を一度に見たいと思う。 回答ありがとうございました –

0

ちょっと考えて、データがワイヤーを通過するときにGZIPpingを試してみましたか?私は、SQLダンプが特によく圧縮され、時には最大90%圧縮されることがわかりました。もちろん、それはどのように簡単になるかについてのクエリを実行しているかどうかによって異なります。

ニューヨークのデータベースサーバーにインターネット経由で直接SQLクエリを実行していて、これはおそらく素晴らしい考えではない場合は、クエリを実行するラッパーを作成してから、リモートに転送する前に圧縮しますサイト。

1

思考のカップル;

  1. 20分で20Mbは非常に遅い約17kb/sです。プロセスにレイテンシを追加する他のポイントはありますか?
  2. 考えられる解決策の点では、おそらくHTTPエンドポイントを使用してgzip圧縮を有効にすることを検討してください。これはもはやADN.net接続にはなりませんが、データサイズは大幅に減少し、アプリの構造によっては実装が非常に簡単になることがあります。詳細情報here

幸運!

+0

これは興味深い解決策です。私はどのようにUserエンドポイントを設定し、C#でそれを使用するのを見てしようとしています。サンプル/記事があれば、本当に役に立ちます。 ありがとうございます –

+0

SQL ServerからHTTPエンドポイントを消費するだけでWebサービスを使用しているだけなので、 ".NET Web Services"を検索してみてください。また、この記事の2ページ目の最後には、説明があります。http://dotnet.sys-con.com/node/192504 –

+0

素敵です!私はSS2008を使いすぎて、ネイティブWebサービスを中断しています。(* sigh *)しかし、2005年は素晴らしいことです。 –

0

私たちは、データセットから派生したCompressedDataSetを使用しています。

public string GetCompressedDataSet() 
public void SetCompressedDataSet(string data) 

これらの関数(de)は、データセットをXMLにシリアル化し、次にGZipを使用して(de)圧縮します。あなたのデータセットを圧縮することはずっと進んでいます。

もちろん、20MBのデータが本当に必要ですか?要求するデータを制限することもできます。または、分割してください:10x2MBに尋ねて、2分ごとにアプリケーションを更新してください。

0

私が追加しなければならないのは、RemotingFormatをバイナリに設定することだけです。あなたがあなたのDataSet上でそれを設定するだけで、あるいはあなたがすべてのDataTable上でも必要であるかどうかは分かりません。習慣として、私はいつもバイナリに両方を設定します。

データのデータテーブルは、相当するオブジェクトの類似した厳密に型指定された配列よりも小さいサイズにシリアル化されるのは私の経験です。

ああ、最後のもの。 AllowNullを必要としない列に対してAllowNullをfalseに設定できる場合は、少しスペースを節約します。

関連する問題