2013-04-05 3 views
5

SQLiteデータベース(SQLAlchemy経由)をメモリに保持することによる速度の利点を利用したいが、コンテンツを挿入してファイルにダンプする後で使用するために保管しておく。メモリにデータベースをすばやくファイルにダンプする

沼地標準のデータベースcreated in the usual way考えてみましょう:

# in-memory database 
e = create_engine('sqlite://') 

はちょうど新しいデータベースを作成し、手動で各エントリを挿入する以外のディスクにその内容を移動する迅速方法は、ありますか?

編集:私も、インメモリデータベースを使用するすべての利点を参照してくださいねかどうかなど、いくつかの疑問があり

。残念ながら、私は既に約120倍の巨大な時間差を見ています。

この混乱はおそらく私の質問のいくつかの重要な詳細を見逃しているためです。キャッシュやページのサイズなどの理解が不足している可能性もあります。

私は設定したシステムのシミュレーションを実行していますが、各シミュレーションは次の段階を経て実行されます。

  1. データベースに対してクエリを実行します。
  2. これらのクエリの結果に基づいてシミュレーションを実行する/シミュレーションを実行します。
  3. insert最新のシミュレーションに基づいてデータベースに新しいエントリが追加されました。
  4. commit()を実行して、データベースが新しいエントリで最新の状態になっていることを確認してください。

私は今までに各シミュレーションの実行にダースかそこらの挿入を行いますが、しかし私は、百万人のシミュレーションのを実行しないと、各シミュレーションの結果は場所を取るために、将来のシミュレーションのために利用できるようにするを必要としています。私が言うように、これはと書かれたプロセスは、ファイルバックアップされたデータベースを実行するとかなり長い時間がかかります。それは6時間と1ヶ月の違いです。

これは物事を明確にします。私は、必要に応じてさらに少しだけ私のプロセスを概説するために、単純なpythonスクリプトを一緒にまとめることができます。

答えて

1

SQLAlchemyとSQLiteは、キャッシュする方法を知っていて、バッチ挿入はうまくいきます。

ここでメモリ内SQLiteデータベースを使用する利点はありません。そのデータベースでは、ディスク上のバージョンと同じようにページが使用されるため、最終的にディスクベースのデータベース。パフォーマンスの差はわずか1.5倍です。SQLite Performance Benchmark -- why is :memory: so slow...only 1.5X as fast as disk?

メモリベースのデータベースをディスクベースのデータベースに後で移動する方法はありません。メモリ内のデータベースでクエリを実行していないバッチは2つの別々の接続でディスクベースのデータベースに挿入します。

+0

私はいくつかのポイントに対処するオリジナルの質問を編集しました。 – JimmidyJoo

+0

データキャッシュを作成することはできません。 –

+0

あなたの質問を正しく理解しているとすれば、私の答えは「いいえ」です。確かに、私はデータベースにダンプするすべての情報を使用しませんが、実行された以前の各シミュレーションの情報を使用します。私のシミュレーションは、より複雑な方法で過去のデータを使ってかなり複雑になりつつあります。私は、SQLのさまざまなクエリコマンドを使用して、このうちのいくつかを手助けしたいと考えていました。 – JimmidyJoo

関連する問題