私はPostgreSQLデータベースを持っています。単体テストに使用されます。
- テストをスピードアップしたいので、ある種のメモリ内データベース (H2 など) を使用したいと考えています。
- データベースを (PostgreSQL から) ダンプし、そのようなダンプをメモリ内データベースにインポートしたいと考えています。
インメモリデータベースの選択に関して何か提案はありますか? そのデータベースを PostgreSQL と互換性を持たせたい。
私はPostgreSQLデータベースを持っています。単体テストに使用されます。
インメモリデータベースの選択に関して何か提案はありますか? そのデータベースを PostgreSQL と互換性を持たせたい。
tmpfs (基本的に RAM ディスク - ほとんどの Linux ディストリビューションではそのように構成されています) にデータベース ディレクトリ (PostgreSQL ではクラスターと呼ばれます) を作成し、/dev/shm
非標準ポートで postgres を実行します。たとえば、次のようにします。
initdb -D /dev/shm/pgtest
postmaster -D /dev/shm/pgtest -p 11111
スプリングの組み合わせでHSQLを使用することをお勧めします。私はこの正確なことをするために私の現在の職業に連れて行かれました、そしてそれが頭痛であるとしても、それはすることができます。そして、迅速な調査に基づくと、hsqlはPostgreSQLと互換性があるようです。他にご不明な点がございましたら、お気軽にお問い合わせください。
このために Pg をドロップする必要がありますか?
本番環境で実行するのとは異なるデータベースに対して単体テストを行っている場合、テストはそれほど良くありません。
これを試してください:高速テスト用に PostgreSQL を最適化します。
...そして、あなたが行く方法を見てください。
update : すべてを ramdisk に置くとテストが大幅に高速化されると思うかもしれませんが、それはおそらく間違いです。多くの場合、使用されていないデータをディスクに書き出す方が効率的であり、システムが目前のタスクにより多くの RAM を使用できるようになります。unlogged
テーブルと適切な非同期コミットを使用するか、(テストの場合のみ、データを消費します)fsync=off
を使用すると、非常に似た速度が得られます。
真のメモリ内テーブルが本当に必要な場合は、ramdisk または tmpfs にファイル システムを作成し、そこに新しいクラスタを initdb します。UNLOGGED
先行書き込みログを通過しないように、テーブルを使用することもできます。
whiletmpfs
は RAM ディスクですが、使用頻度の低いページをスワップスペースに移動できることに注意してください。何らかの理由ですべてのデータを RAM に固定する必要がある場合は、ramdisk
ドライバーを使用して、代わりにRAM ディスクにファイル システムを作成する必要があります。私のアドバイス:やらないでください。迅速なテストのために Pg を適切に構成するだけです。