スケーラブルなMySQLスキーマを書く方法について私はできる限り多くのことを読んできましたが、これが良い考えかどうかはまだ分かりません。MySQLアップデートステートメントが高価ですか?
私はこのプロジェクトをRDSでEC2にホストしています。
私のデータベースでは、私は推測すると約70%の書き込みと30%の読み込みより多くの書き込みになるコアテーブルを持っています。
ただし、テーブルに新しい行を作成すると、5秒ごとに更新を追加する必要があります。全体として、複数の行が毎秒追加/更新されるので、を意味し、UPDATE文は1秒ごとに実行されます。。
私が読んできたことに基づいて、MySQLにはテーブルに書き込むときに起こるテーブルロックと呼ばれるものがあります。このテーブルもかなり読み込まれているので、行にUPDATE文を使用するにはあまりにも多くのオーバーヘッド/ロックが発生しますか?
(私の知る限りでは)私のオプションは次のとおりです。頻繁に大きなテーブルの上に
- 実行(Do)UPDATE文(毎秒または多分それ以上)
- 私は行を作成するステージング表を持っていますそれらを更新し、準備ができたら(行がファイナライズされるまで約20分)、行をステージングテーブルからメインテーブルに発送します。
私はそれは、彼らがコンテンツを見ることができる前に、私のユーザーは約20分待ってますので、ステージング表を避けたいが、それは必要悪だかない場合、私は思ったんだけど。
他のアイデアはありますか?提案?
ありがとうございました!
私は確かに主キーに基づいて行を更新しています。私はストレージエンジンをまだ決めていませんでしたが、InnoDBはほとんどの場合非常に高速ではないと聞いてきました。しかし、私のケースでは、InnoDBがより良い解決策であると指摘しているので、テーブル全体、つまり特定の行だけをロックしたくないためです。 – user599146
@userほとんどのアプリケーションは、書き込みがほとんどなくても90-95%読んでいます。そのため、MyISAMはやや速いと見なされます。 InnoDBは、データの矛盾がないことを保証するために、より良いデータ整合性を備えています(特にMyISAMはトランザクションをサポートしていません)。この場合、MyISAMのテーブルロックは、読み込みの低い書き込みシナリオを想定しているため、ほとんど確実に遅くなります。 – Davy8
それはたくさんの意味があります。あなたの洞察に感謝します! – user599146