web-dev-qa-db-ja.com

永続的なRAMドライブのようなものはありますか?

LAMPが設定されたラップトップを持っています。 HDDが遅いため、単体テストの実行が遅くなります。

ある種のRAMディスクにmysqlデータベースのWebルートをマウントできるかどうか疑問に思っていました。

私がramdisksについて読んだことから、それらは非永続的です。

シャットダウン時にhddの領域に変更を書き込み、起動時にramdiskを再マウントするramdiskを作成する方法はありますか?

7
Linus

あなたが探しているのは、fsデータをメモリに保存し、可能であればそれを保持しますが、(誰かが電源を切った場合のように)データを失うことについてあまり心配しないものです。

Cachefsを調べて、書き込みについて本当に怠惰になるように構成できるかどうかを確認できます。

また、あなたが正しい問題を解決しているのではないかと疑っています。適度な量のメモリがあれば、これらのディスク書き込みをブロックしないでください。

ファイルシステムのライトバックマウントオプションを設定することもできます。たとえば、 this を参照してください。

2
bmargulies

Linuxでramdiskを扱うのは非常に簡単です。必要に応じていくつかの異なる方法でそれらを作成して使用し、ボックスをシャットダウンする前に、またはスケジュールされた間隔でコンテンツを(cpまたはddを使用して)hddにコピーするだけで、予期しないシャットダウンによるデータ損失を回避できます。これらのハウツーを見てください、私はそれらが十分に簡単だと思います:

http://www.vanemery.com/Linux/Ramdisk/ramdisk.html

http://wiki.archlinux.org/index.php/Ramdisk

M

1
MariusPontmercy

それを行う簡単なrcスクリプトを書くことができます。 DOSの時代に同じようなことをしたことを覚えています(autoexec.bat)一部のファイルへの高速アクセス用。

代わりに、SSDまたはRAM HDDインターフェイス付きドライブの購入を検討してください。

1
Mehrdad Afshari

「OSはすでに通常のファイルシステムアクセスに対してそれを行っています(書き込みをRAMにバッファリングし、後でフラッシュします)。しかし、より堅牢にするために、多くのデータベースはfsync()を実行します。 "-R Samuel Klatchko

したがって、ユニットテストを高速化して、すべての書き込みが完全に同期されるのを待たないようにするために、試すことができることがいくつかあります。

  • 「安全でない」ライトバックキャッシングをオンにできる仮想マシンでテストを実行します。これにより、fsync()が非常に高速なno-opに効果的に変換されます。 (ただし、これは単体テストでのみ実行し、実稼働データベースでは実行しないでください)。
  • qEMUなどの-snapshotオプションを使用して仮想マシンでテストを実行します。これにより、すべての書き込みがログファイルにリダイレクトされます。テスト中は、一部の読み取りをそのログファイルにリダイレクトして、錯覚を維持します。ログファイルへの比較的線形の書き込みは、ディスクプラッター全体に散在する書き込みよりも高速である可能性があります。
  • どういうわけか、単体テストでの書き込みの数を最小限に抑えます-本当にテストデータベースに書き込む必要がありますか?
  • 単体テストで使用されるテストデータベースをトリミングしてRAMに完全に収まるようにできる場合は、OSにデータベース全体を一度に事前にキャッシュさせる(テストで必要に応じて一度に少しずつ読み取ってキャッシュするのではなく) )可能性がありますテストを高速化します。のようなもので

    cat the_test_database.db > /dev/null

  • rAID-0ストライピングを備えたマシンでテストを実行して、読み取りと書き込みを高速化します。 (私はRAIDをサポートするラップトップを探していました-残念ながら、RAIDをサポートするラップトップは非常にまれです)。
0
David Cary

あなたが達成したいことは確かに非常に可能ですが、私は既製の解決策を知りません。あなたは多かれ少なかれあなた自身でそれに応じたスクリプトを書かなければならないでしょう。この事実だけでもあなたにとっては大きな問題だと思いますが、あなたがその仕事を引き受けたいのであれば、あなたが必要とするすべての助けを得ることができると確信しています。

0
Arkenklo

あなたはこれをノートブックコンピュータで実行していると言います。 「休止状態」と再開機能は一貫して機能しますか? もしそうなら...それを一貫して使用し、これら2つの完全に分離したことの一方または両方を実行して、WebページとMySQLクエリの両方のアクセス時間を改善することができます。

  • (a)DOCROOTにramfsを設定して使用します。詳細については、「Linux Ramdiskmini-HOWTO」のグーグル。 これは報われるかもしれないし、報われないかもしれません。MySQLで使用するためにRAMを保存する方が良いかもしれません(すなわち( b)以下)特にそれらのMEMORYテーブルに大量のデータがある場合。

  • (b)最も頻繁にアクセスされるMySQLデータベーステーブルをMEMORYストレージエンジンに移行しますテーブル構造にBLOBまたはTEXT列が必要ないことを確認します。もしそうなら、これは機能しません。ここでこれを読んでください: http://dev.mysql.com/doc/refman/5.0/en/memory-storage -engine.html

上記のそれぞれについて、メモリ内のイメージをディスクに定期的にコピーするようにスケジュールする必要があります。利点は、MySQLテーブルへの変更やDOCROOT内のファイルへの変更ごとに書き込むのではなく、その遅いディスクに頻繁に書き込むだけであるということです。これは一種のスローモーションの「同期」です。したがって、どちらの場合も、CRONを使用して「バックアップ」をスケジュールできます。

  • Ramfsの場合、ファイルシステム内のすべてのコンテンツのtarアーカイブを作成できます。

  • MySQLテーブルの場合、次のような一連のステートメントを作成できます。

    someInnoDBdatabase.tablenameに挿入しますselect * from someMemoryDatabase.tablename

    両方のデータベースのテーブルがまったく同じ構造であると仮定すると、someMemoryDatabaseのテーブルから同じ名前のsomeInnoDBdatabaseテーブルにすべてがコピーされ、ディスク上のMEMORYテーブルが効果的にバックアップされます。

メモリデータベースにこれらのテーブルを作成する場合:
テーブルがオンディスクエンジンによって管理されていると仮定すると、「show create table tablename」を使用して、MySQLにそのテーブルを再作成するために必要なSQLを正確に提供させることができます... MEMORYエンジンを使用するように指定するエンジン部分を変更して実行します。

お役に立てれば!
-pbr

0
pbr

Debain/Ubuntuの永続的なRAMディスク

これはまさにそれを行うソフトウェアパッケージです。自動的に実行されるのはramdisk(標準tmpfsまたはramfsタイプ)です。常にバックアップ(および起動時に復元)されます。

このパッケージはDebian用ですが、他のLinuxディストリビューション用に微調整するのはそれほど難しいことではありません。

0
David Balažic

おそらくRAMディスクが最適です。ただし、いくらかのお金を費やすことができ、本当に永続的なソリューションが必要な場合は、 SSDハードディスク も確認することをお勧めします。このテクノロジーは非常に若く、従来のハードディスクほど堅牢ではありませんが、成熟しており、手頃な価格になっています。

0
Pekka

アプリが十分に小さい場合は、マシン用に GBソリッドステートドライブ を取得できます。ベンチマークは、従来のドライブよりも3倍または4倍速い読み取り(および10k rpmドライブの2.4倍の速さ)を実行していることを示しています。大きなドライブはバンドルの費用がかかりますが、30ギガのドライブは200ドル弱です。

0
Inaimathi

これはRAMディスクに直接関係していませんが、これは問題を回避するのに役立つ場合があります。

あなたができることは、2つのmysqlサーバーを実行することです。1つはRAMディスクに存在するプライマリであり、もう1つはすべてのデータをHDDに保存するスレーブです。

このように、RAMディスクベースのmysqlサーバーをオフにした後などに起動する必要がある場合は、..

cat mysqldump -uroot -hslaveServer dbName | mysql -uroot -hramdiskServer dbName

0
Matt

OSは、通常のファイルシステムアクセスに対してすでにそれを行っています(書き込みをRAMにバッファリングし、後でフラッシュします)。ただし、より堅牢にするために、多くのデータベースはfsync()を実行してOSを強制します。バッファをディスクにフラッシュすると、速度が低下します。

MySQLが同期操作を行うかどうかの制御は、基盤となるDBのレベルで行われます。 InnoDBを調べましたが、fsyncを無効にすることはできません。

しかし、周りを検索すると、 libeatmydata が見つかりました。これにより、プロセスのfsyncが無効になり、探している動作が得られるはずです。

0