1

Web サービスから毎日の気象データをダウンロードする .NET/MS SQL アプリケーションを作成しようとしています。そのデータをローカル データベースに保存/キャッシュしたいと考えています。

使用方法は次のとおりです。

  • ユーザーは自分の Web ページにアクセスし、開始日と終了日の範囲を入力します
  • このコードは、データベースからデータを取得し、欠落しているデータを Web サービスから取得します。
  • 要求された日の範囲の気象データがユーザーに表示されます。

気象データをダウンロードするために使用している Web サービスは、開始日と終了日もパラメーターとして受け入れます。

ユーザーが入力する日付がわからないため、セグメント化されたデータがデータベースにキャッシュされる可能性があります。

私が解決しようとしているいくつかの問題があります:

  1. データベースに保存されているダウンロード済みのデータ セグメント (存在する場合) に基づいて、ダウンロードする必要があるデータの連続した範囲 (from/to) を適切に判断するにはどうすればよいですか?
  2. 理想的には、複数の Web サービス呼び出しではなく、1 つの Web サービス呼び出しを行いたいと考えています。
  3. データが受信されたら、データベースの空白を埋めて、既に存在する日付の情報を破棄するにはどうすればよいですか?

これまで、項目 1 と項目 2 のアルゴリズムを作成しようとしましたが、日付範囲の演算が複雑になり、完全に機能させることができませんでした。項目 3 は些細なことです。

同様の問題を解決するアルゴリズムは既にありますか?

4

1 に答える 1

0

間隔ツリーを使用して、キャッシュした期間を保存できます。これにより、ユーザーのクエリと重複するキャッシュされた期間をすばやく取得できます。次に、この期間ライブラリを使用して、クエリされた間隔とキャッシュされた間隔の差を取得することにより、ユーザーのクエリを満たすために Web サービスに送信する必要があるクエリを決定できます。

ユーザーのクエリを入力したら、間隔ツリーを再編成して、重複または隣接する時間間隔をマージする必要があります (たとえば、以前に間隔 [2, 6] および [12, 16] をキャッシュし、ユーザー クエリ [4, 14] をキャッシュした場合)。の場合、Web サービスに [6, 12] クエリを送信し、間隔ツリーから [2, 6] および [12, 16] 間隔を削除し、代わりに [2, 16] 間隔を追加する必要があります)。また、Web サービスに対してあまりにも多くのクエリを作成することを避けたい場合は、短い間隔でキャッシュすることを避けたい場合があります (たとえば、ユーザーが [1, 2] を希望し、[1, 1.1]、[1.3、1.4]、[1.3、1.4] をキャッシュした場合)。 [1.5, 1.6], [1.8, 1.9] の場合、ユーザーのクエリを満たすために 4 つのクエリを作成します)、小さな間隔を破棄するか、常に最小間隔を取得して、キャッシュされた間隔が「小さすぎる」ことがないようにします。 " (たとえば、ユーザーが [1.4, 1.

于 2013-06-11T18:47:44.497 に答える