128GbSSDでデータディレクトリを使用してMySQLを実行しています。私は毎週ロードされて処理される大きなデータセット(〜20Gb)を扱っており、それぞれが時点の比較のために別々のDBに保存されています。このような大規模なデータベースでのパフォーマンスはすでに問題となっているため、すべてのデータを単一のデータベースに入れることは不可能です。ただし、SSDに一度に6つを超えるデータセットを保持することはできません。現在、私は毎週、最も古いものからはるかに大きな2Tbスピニングディスクを手動でダンプし、データベースを削除して新しいディスク用のスペースを確保しています。しかし、「アーカイブされた」データベースの1つが必要な場合(半定期的に発生)、現在のデータベースを(ダンプ後に)ドロップし、リロードし、必要なことを実行してから、結果を逆にする必要があります。
SSDと2Tbスピニングディスクに1つずつ、複数のデータディレクトリを使用するようにMySQLを構成し、それらを透過的に「マージ」する方法はありますか?これができれば、アーカイブは「データベースから完全に移動した」という意味ではなく、「低速の物理デバイスに移動した」という意味になります。回転しているディスクでクエリを実行するのにかかる時間は、2つのデータベース全体を完全にダンプ、ドロップ、ロード、ドロップ、リロードするのにかかる時間よりも短いため、これはメリットです。
Unionfsのようなものを使用することを考えましたが、(私が理解していることから)ディレクトリレベルでマージすることで機能するため、どのデータベースをどの物理ドライブに格納するかを制御する方法を考えることができません。複数のディレクトリ。
よろしくお願いします、事前に感謝します
まず、すべてのデータベースdb_name
について、そのdatadir内にfolderを格納することを検討する必要があると思います(例:/var/lib/mysql
)。したがって、理論的には、異なるディスク上のフォルダへのシンボリックリンクを持つことができます。ただし、これには別の問題があります。InnoDBストレージエンジンを使用する場合、データをフォルダー内に保存しますnot。代わりに、単一のログファイルibdata*
を使用します。
これは重要だと思います。ご指摘のとおり、unionfs
は、2つのファイルシステムの単純な結合だけが必要な場合に最適ですが、データを書き込む際のバッキングストアの基本的なセマンティクスを理解(または評価)しません。 。
頭のてっぺんから、あなたが望むことを正確に実行するファイルシステムがあるとは言えません。また、それはニッチすぎるかもしれないと思います。
ただし、目的の場所にたどり着くために調べることができることがいくつかあると思います。
FEDERATED
テーブルタイプを使用して、単一のMySQLインスタンス内にすべてのデータがあることの影響を「シミュレート」できます。