0

この投稿のタイトルで申し訳ありませんが、これ以上クリエイティブなタイトルが思い浮かびません。

作成者が最新のトランザクション結果を注文しているサードパーティの Web サービスを呼び出しています。合計トランザクション数は 100,000 を超えています。さらに興味深いことに、Web サービスは各トランザクションを表す複雑なオブジェクトを送信します。そのため、一度に 100,000 件すべてを要求すると、タイムアウトが発生します。したがって、一度に 1000 レコードのみを返すには、この Web サービスへの呼び出しをバッチ処理する必要があります。これは、この Web サービスに対する 100 回の個別の呼び出しを意味します。

これまでのところ、トランザクションを古いものから新しいものへと処理する必要があることを除けば、すべて問題ありません。したがって、これらのトランザクションの ID だけを一時的に保持する場所が必要です。これにより、後で正しい順序 (古いものから新しいものへ) で ID を呼び出すことができます。それらを並べ替えた後。

このソリューションに欠けているのは RDBMS です。テキスト ファイルを使用して値を保存することを考えています。

前置きが長くなってすみません。

(1)

  1. 値をテキスト ファイルに保存するだけでは、テキスト ファイルに 100 000 行を超える行が間違った順序で表示されることになります。つまり、ファイルを下から上に読み取る方法を実装する必要があります。
  2. 確かではありませんが、パフォーマンスの低下なしに既存のテキスト ファイルの先頭に追加される可能性があります。このように、ファイルが作成されると、組み込みの .net を使用してファイルを上から下に読み取ることができます。
  3. テキストの odbc ドライバーを接続して、SQL の order by 句を使用することもできますが、これまで行ったことがないため、アプリに展開手順をこれ以上追加したくありません。
  4. おそらく、テキスト ファイルを使用するのは適切ではありません。私が気付いていないこの問題に対して、より良い解決策があるかもしれません。

これはアーキテクチャ/ロジスティクスに関する質問です。ご協力をお願いいたします。

4

3 に答える 3

3

一般的なPC/サーバークラスのマシンで実行している場合、100,000のIDと関連するタイムスタンプを格納するためのメモリは大容量とは見なされません。メモリ内のソート済みリストの使用を検討してください。

本当にファイルに書き込みたい場合は、File.ReadAllLinesを使用して、結果の文字列配列を逆方向に反復処理できます。

于 2010-02-10T23:39:54.710 に答える
2

IDだけの場合、そもそもファイルを使用する必要がありますか?

それらが32バイトのIDであると仮定します...それらの100,000はまだ3MBをわずかに超えています。あなたは本当にそれが記憶を求めているのですか?

私は間違いなくインメモリソリューションを最初に試してみます-考えられる最悪の場合(たとえば、予想されるボリュームの2倍)で問題がないことを確認してから、それを実行します。

基本的なモラルは、大きく聞こえる数字をあまり恐れないことです。人間の観点からは100,000アイテムが多いかもしれませんが、アイテムあたりのデータがかなり多くない限り、それは現代のコンピューターのピーナッツです。

于 2010-02-10T23:39:02.183 に答える
0

情報をDataSetとDataTableの組み合わせで保存し、DataSetに接続されたDataViewを使用して、データを取得するときに並べ替え順序を変更してみてください。

Webサービスから取得するXMLの構造によっては、それをDataSetに直接読み込んで、DataTablesに解析させることができる場合があります(それが機能する場合は、単純化係数)。

このメソッドは最小限のコードで済みますが、100,000個のアイテムを含むDataSetのパフォーマンスを評価する必要があります。

トランザクション全体(IDを含む)をこの方法で保存することをお勧めします。そうすれば、処理する必要のあるすべてのデータが得られ、指定した任意の並べ替え順序でループできます。

もともとはIDを保存して並べ替えるだけで、並べ替えた順序で各IDのWebサービスを再クエリするという印象を受けますが、同じデータに対してサービスを2回ヒットすることを意味します。できればそれは避けたいと思います。

于 2010-02-10T23:51:58.897 に答える