4

私は現在、私たちのクライアントのためにいくつかの Web サービスに取り組んでいます。非常に大量のデータが返される可能性があるため、データベース呼び出しのパフォーマンスを最適化したいと考えています。(数万、数百万のオブジェクトになる可能性があり、各オブジェクトには他のオブジェクトの約 12 のリストが含まれます)

サーバーに負担をかけたくないし、Web サービスを不必要に制限したくありません。

Web サービス メソッドの 1 つは、指定された日付範囲内のすべてのデータを返します。返されるデータの量が設定された量よりも大きい場合、次のようなメッセージを返すことを考えていました。

「データが大きすぎます。日付範囲を減らしてください」

そのようにユーザーのスコープを制限することは良い考えですか??

クライアントが一度に取得できるデータの量を制限する必要がありますが、それでも可能な限り便利に保つ必要があります。つまり、彼らもプログラマーなので、単純すぎる必要はありませんが、使用するのに十分単純です。

Web サービスを介して大量のデータを返す際の良い方法は何ですか??

ありがとう!

4

4 に答える 4

4

リストまたはグリッドに表示されるデータをページングする一般的な手法を適用できる場合があります。データベースへの呼び出しは、返されるレコードの数とページ番号を指定します。

したがって、たとえば、1 ページに 10 レコードを表示している場合、10 レコードのみが表示用に返されます。レコード 1 から 10 (または必要に応じて 0 から 9) はページ 1 に対して返され、11 から 20 はページ 2 に対して返されます。

また、利用可能なレコードの総数もよく返されます。

このようにして、ユーザーは多数のレコードをスクロールし続けるか、検索条件を絞り込んでより小さな結果セットを生成することを選択できます。

Web サービスに対して、この種のページングまたはチャンキングアプローチを検討できます。Web サービス呼び出しは、各チャンクで送信されるレコード数と、「ページ」または「チャンク」番号を提供します。Web サービスは、要求されたレコードと、使用可能なレコードの総数を返します。

このアプローチでは、Web サービスを使用している開発者が引き続き制御できます。

呼び出しコードをループに配置して、その動作が望ましい場合は、チャンクを要求し続けることができます。トラック一杯のレコードが本当に必要な場合は、レコード数の引数を非常に大きな数に設定するだけです (または、それをオプションのパラメーターにして、null、ゼロ、空の場合はすべてを返すことができます)。

于 2012-04-17T16:03:13.007 に答える
2

それは本当にあなたのニーズに依存します。これは、コーディングの問題というよりも設計の問題のように思えますが、私たちのシステムには 2 つのアプローチがあります。それらを共有して、考慮すべきいくつかのアイデアを提供します。

  • 最初のものでは、データを提供するのは私たちです。私たちは、顧客が自分のアカウントで取引データをダウンロードできるようにしています。一部の顧客にとっては、これはかなり大量のデータになる可能性があります。X 日分のデータに制限していますが、これで問題ありません。

  • 2 番目の例では、車両の位置データを追跡する確立されたベンダーの Web サービスからのデータや、配車係や管理者が関心を持つその他のデータを使用しています。フリート内のすべてのトラックは、地理位置情報とその他のデータ (積み込み/積み下ろし/休憩中のドライバーなど) の定期的な更新を提供します。

    • これらの Web サービスでは、日付範囲を要求すると、サービスは設定されたレコードの制限 (呼び出しごとに 1000 レコード) を返します。
    • 日付範囲を渡すだけでなく、「位置」整数フィールドも渡します。最初の呼び出しでは、「位置」はゼロに設定されます。
    • Web サービスは、「More Data Exists」ブール フィールドを返します。
    • "More Data Exists" = true の場合、"position" パラメーターをインクリメントして Web サービスを再度呼び出し、"More Data Exists" = false になるまで繰り返します (コード内の単純な while ループです)。

最初のものは、プログラマーまたはエンドユーザーのどちらにとっても素晴らしいと思います。2 番目は、プログラマーを扱う場合にうまく機能します。

于 2012-04-17T16:05:18.177 に答える
1

これは、Web サービスにとって潜在的に大量のデータのように思えます。

しかし、これは MSDN のページで、「大量の」データを送受信するためのサーバーのセットアップについて説明しています: http://msdn.microsoft.com/en-us/library/aa528822.aspx

于 2012-04-17T16:02:44.877 に答える
0

(1000 obj)のように、時間ごとにデータのチャンクを与えることができます。開始インデックスと必要なデータ量を指定する必要があり、それを使用してデータをプルするだけです。SQL には、これを簡単に実行できる TAKE と Skip があります。

于 2012-04-17T16:03:32.623 に答える