MySQL とのトランザクションが必要になるようですが、InnoDB/MyISAM テーブルが混在する Mysql でトランザクションを管理する方法がわかりません。すべてが非常に混乱しているようです。
なぜテーブルを混ぜ合わせたいのかと思うかもしれません...答えはパフォーマンスです。多くの開発者が気付いているように、InnoDB テーブルは一般的にパフォーマンスが悪いですが、代わりに高い分離レベルなどを提供します...
この問題に関するアドバイスはありますか?
MySQL とのトランザクションが必要になるようですが、InnoDB/MyISAM テーブルが混在する Mysql でトランザクションを管理する方法がわかりません。すべてが非常に混乱しているようです。
なぜテーブルを混ぜ合わせたいのかと思うかもしれません...答えはパフォーマンスです。多くの開発者が気付いているように、InnoDB テーブルは一般的にパフォーマンスが悪いですが、代わりに高い分離レベルなどを提供します...
この問題に関するアドバイスはありますか?
MyISAM と InnoDB のパフォーマンスの違いを過大評価していると思います。MyISAM は、データ ウェアハウジングの状況 (フル テーブル スキャン レポートなど) では高速ですが、通常の OLTP クエリでは多くの場合、実際には InnoDB の方が高速です。
InnoDB はノブが多いため調整が難しくなりますが、適切に調整された InnoDB システムは、より優れたロックとより優れた I/O パターンにより、MyISAM よりもスループットが高くなることがよくあります。
MyISAM テーブルにトランザクションを含めることができないことを考えると、実際の問題が何であるかはわかりません。トランザクションが必要なデータはすべて InnoDB テーブルにある必要があり、使用しているアクセス ライブラリを使用するか、手動の SQL コマンドを使用してトランザクションを管理します。
1 つのエンジンのみを使用することには、明確なパフォーマンス上の利点があります。
1 つのエンジン用に調整されたサーバーは、もう一方のエンジン用には調整されません。両方とも、専用にかなりの量の RAM を割り当てる必要があります。したがって、両方に最適な量を与えることはできません。
データベース サーバー (明らかに 64 ビットですが、それでも比較的小さい) に 8G の RAM があるとします。その約 3/4 を innodb ページ キャッシュに割り当てることができます。または、MyISAM を使用している場合は、その約半分を key_buffer にすることができます。両方を行うことはできません。
エンジンを選択し、それを排他的に使用します。パフォーマンスの問題を回避する方法はいくつかありますが、そのほとんどは簡単ではありません (つまり、データ構造やアプリケーションの再設計が必要になります)。
簡単に言えば、MyISAM にはトランザクション サポートがないということです。トランザクションを開始し、一部の InnoDB テーブルでデータを追加または変更し、MyISAM テーブルでデータを追加または変更した後、ロールバックする必要がある場合、MyISAM の変更は削除できません。そのような混合エンジンをサポートするには、MyISAM に保存されているデータへの変更がトランザクションの「外部」で発生することをアプリケーションが認識している必要があります。
一部のプロセスでトランザクションが必要な場合は、トランザクション可能でなければならないデータを分離し、そのすべてのデータを InnoDB に配置します。