99%INSERT、毎秒約100のライブMySQLデータベースがあります。メインのライブデータベースに影響を与えることなくデータに対してクエリを実行できるように、データを毎日アーカイブしたいと考えています。さらに、アーカイブが完了したら、ライブデータベースをクリアします。
(可能であれば)INSERTをロックせずにこれを行うための最良の方法は何ですか?クエリにはINSERTDELAYEDを使用します。
http://www.maatkit.org/ mk-archiver
テーブルから別のテーブルやファイルに行をアーカイブまたはパージします。重要なオンライントランザクション処理(OLTP)クエリに干渉することなく、非常に小さなチャンクでデータを効率的に「ニブル」するように設計されています。これは、クエリ間でテーブル内の位置を維持する非バックトラッキングクエリプランで実現されるため、後続の各クエリは、より多くのアーカイブ可能な行を見つけるための作業をほとんど行いません。
もう1つの方法は、毎日新しいデータベーステーブルを作成することです。 MyIsamには、これにいくつかの利点があります。これは、テーブルの最後へのINSERTは通常、ブロックされないためです。また、すべてを元に戻すためのマージテーブルタイプがあります。多くのWebサイトは、httpdトラフィックをそのようなテーブルに記録します。
Mysql 5.1には、ほとんど同じことができるパーティションテーブルもあります。
私はmysqlパーティションテーブルを使用しており、あらゆる面で素晴らしい結果を達成しています。
レプリケーションがこれに最適なソリューションのように聞こえます。最初の同期後、スレーブは Binary Log を介して更新を取得するため、マスターDBにはまったく影響しません。
MySQLレプリケーションはこれに対して完全に機能します。
マスター->ライブサーバー。
スレーブ->同じネットワーク上の別のサーバー。
MK-ARCHIVERは、MYSQLデータをアーカイブするための洗練されたツールです。
ミラーリングされた2つのデータベースを維持できますか? 1つに書き込み、2つ目をアーカイブとして保持します。たとえば、24時間ごとに切り替えます(または適切と思われる時間)。アーカイブであったデータベースに、今日のすべてのアクティビティを挿入します。次に、2つのデータベースが一致する必要があります。これを新しいライブデータベースとして使用します。アーカイブされたデータベースを取得し、必要な処理を実行します。アクティブに書き込まれていないので、必要なものをすべてバックアップ/抽出/読み取ることができます。
これは、バックアップのために1つのドライブをオフラインにし、再同期してから、バックアップのためにもう1つのドライブを取り出すことができるミラーレイドのようなものです。