0

データベース(SQLite)から〜5,50,000レコードを取得するDatatableがあります。フェッチすると、システムの速度が低下します。

これらのレコードを SQLite データベースのバックエンドと Datatable のフロントエンドに保存しています。バックエンドでのデータベース作成時間(〜10.5時間)とフロントエンドでのフェッチ時間を短縮するにはどうすればよいですか。

そうするために使用できる他の構造はありますか?ディクショナリとバイナリ ファイルが高速であることを読みました。この目的に使用できますか?どのように使用できますか?

(これは Web アプリではありません。フロントエンドとバックエンドが同じマシン上にある WPF デスクトップ アプリです)。

4

3 に答える 3

1

あなたの基本的な問題は、維持したい構造ではなく、データフローを管理する方法だと思います。データベースからすべてのデータをいくつかの strcuture にフェッチする代わりに(DataTableあなたの場合)、サーバー側stored procedureで必要な計算を行い、すでに計算されたデータを返します。このようにして、次のようないくつかの利点が得られます。

  • データベースサーバーを保持するサーバーは、通常、開発またはクライアントマシンよりも高速です
  • 計算結果のみを返すため、データ転送が大幅に削減されます

編集

編集された投稿を考慮するとDataTable、メモリアクセスですでに高度に最適化されていると言えます。それを別のものに変更しても、顕著なメリットが得られるとは思いません。弊害をもたらす可能性があると私が考えるのは、プログラム フローの改訂です。つまり、次の質問に答えてみてください。

  • 現代の記録がすべて必要 ですか?
  • serviceたとえば、夜に で計算を実行できますか?
  • SQL Server Express(単なる例)を使用して、同じマシン上stored procedure(測定する必要がある)より速く実行できる可能性があるという利点を得ることができますか?
于 2012-05-01T06:32:24.287 に答える
1

データを取得するのではなく、データの場所で計算を行うことを考えたことはありますか? それが何に保存されているか、どのように取得しているか、どのように処理しているかなど、さらに情報を提供していただけますか。

指標と背景情報がなければ、最適化の判断を下すことは困難です。

言うのは簡単です - はい、データをファイルに入れます。しかし、ファイルはローカルですか、ネットワークが問題ですか、コア/スレッドなどを最大限に活用していますか.

データから始めて、何をする必要があるかを確認してから、最適な最適化を設計する方がはるかに優れています。

編集:

わかりました、あなたは同じマシンにいますか?このシナリオで本当に考慮すべきことの 1 つは、データに対して何を行っているかということです。それはSQLである必要がありますか?使用しているだけの場合は、データテーブルをロードすることですか? それとも、あなたが開示していない複雑さですか?

私は同様のタスクを持っていました-私はちょうど大きなテキストファイルを作成し、メモリマッピングを使用して読み取りを効率的に行い、オーバーヘッドはありませんでした。これはあなたが話しているようなものですか?

于 2012-05-01T06:33:44.317 に答える
0

ArrayList 内のデータを格納およびフェッチ/操作するために、RaptorDB のような永続化された辞書を使用してみることができます。概念実証の構築に時間はかかりません。

于 2012-05-01T07:17:39.123 に答える