2011-12-14 15 views
3

私はSQLから複雑なプロセスを.NETアプリケーションに移行しています。私は、SQLから必要なデータだけをプルダウンしてから、データテーブルに格納することによって、強引なアプローチを取っています。ステッピングを伴うパイプラインパターンを使用して、私は並行して実行できるプロセスを打ち出しました(他のプロセスに依存せず、同じデータビットで作業する)。データセットの代わりにメモリ

すべてうまくいっていますが、DataSet/DataTable構造よりも優れたパフォーマンスを示すメモリ内SQLソリューションがあるかどうかを知りたいと思います。私たちは一度に50k行をサポートしており、最大1mのデータ行をサポートしています(5b行を読む)。 1行(すべてのデータ行をサポート)の行サイズはおそらく約1K avg(大きな文字列のため)です。

私の質問は、特にDataSets、メモリのオーバーヘッドと永続性のパフォーマンスに関するものです。復旧の目的で、各ステージのデータをディスクにシリアル化する必要があります。

強く型付けされたモデルに行をマッピングする方が良いでしょうか?私は、データセットの関係やその他の利点は必要ありません。私は検索機能のほとんどを自分自身で並列処理を使って置き換えました。

データはSQLiteのを見て、プリミティブ型、無塊、ストリーム、地理などのローカルのSQL操作について

+0

強く型付けされたモデルに変える限り、あなたが表現しているデータによって異なります。また、あなたはメモリで一度データとやりとりをしようとしていますか?これを知ることは、自分自身や他の人が状況に対する最良のアプローチ/最良のアドバイスを判断するのに役立ちます。 – JesseBuesking

+0

約100種類のプロセスが必要です。重複、データ計算、集計、更新、削除などのレコードをチェックします。最終的なデータセットはSQLにプッシュバックされます。プロセスによっては、結合やグループのような機能が必要なものもあります。 –

答えて

3

を使用しています。排他的にメモリ上で実行できるのであれば、私は気にしませんが、ディスクキャッシュとトランザクションジャーナリングをオフにすれば、おそらくかなり近いでしょう。

Steve Shaunesseyは、何年も前にボーランドで高速メモリ内SQLエンジンを開発しました。それが今まで製品化されたかどうかはわかりません。 Embarcadero.comのWebサイトを見て、彼の作品の残骸が生き残っているかどうかを確認してください。

私は気づいたaidaim.comは、メモリ内のSQLエンジンをアドバタイズします。それだけの経験はありません、ただFYI。

また、メモリ内のクエリ操作にLINQを考慮してください。あなたが何をしているのか注意を払うならば、LINQのクエリの構成と遅延実行は大きなデータ、IMOでうまく機能します。また、SQLパーサーは必要ありません。

+3

+1 - はい、メモリ内で完全に実行できます。 http://www.sqlite.org/inmemorydb.html – bryanmac

+0

Ahaを参照してください。小さな灰色の細胞がすべてのシリンダーで発火して変化しました。 SQLiteを使ってGoogle Gearsを構築して以来、私はSQLiteを使っていませんでしたが、メモリ内での選択肢は漠然としていました。ありがとう! – dthorpe

+0

+1ありがとう@dthorpe、私はこの記事を作成する前にSQLiteをダウンロードしましたが、まだそれをプレイしていません。 –

関連する問題