現在、非常に多くのトランザクションを処理するMySQLデータベースがあります。簡単にするため、リアルタイムで表示されるアクション(クリックやその他のイベント)のデータストリームです。その構造は、ユーザーがサブアフィリエイトに属し、サブアフィリエイトがアフィリエイトに属するようなものです。リアルタイムのバランス更新を伴う大量のトランザクションのベストプラクティス
クリックのバランスを保つ必要があります。簡単にするため、ユーザー、サブアフィリエイト、アフィリエイトのクリックバランスを1ずつ増やす必要があるとします(実際にはイベントに応じて処理が増えます)。現在、私は非常に簡単にそれを行う - 私はイベントを受信した後、私はPHPでシーケンシャルなクエリを行う - 私はユーザーのバランスを読んで、1つずつインクリメントし、新しい値を格納し、私はサブアフィリエイト、など
私の最も重要な指標はユーザーの残高なので、できるだけリアルタイムで管理したいと考えています。サブアフィリエイトとアフィリエイトレベルの他の指標はそれほど重要ではありませんが、リアルタイムに近づくほど良くなりますが、5分遅れても大丈夫かもしれません。
プロジェクトが成長するにつれて、すでにボトルネックになっています。私は現在、天びんの計算をどのように再設計するかという選択肢を検討しています。私は新しいデザインが1日に5千万のイベントを処理できるようにしたいと思っています。また、私は単一のイベントを失うこともなく、SQLトランザクションでのクリック残高の各サイクルを実際にラップしています。
私は検討していますいくつかの点:
1 - さんは、5分ごとを言わせて、サブアフィリエイトとアフィリエイトレベルではない、リアルタイムで残高を更新するcronジョブを作成します。
2 - ストアドプロシージャを使用して、クランチングとバランスの更新をデータベース自体に移動します。別のデータベースを追加することを検討しています。多分、Postgressは仕事に適していますか?私は重大なパフォーマンスの改善があるかどうかを確認しようとしましたが、インターネットはその話題に分かれているようです。
3 - この特定のデータストリームを、寄木張りのhadoop(またはApache Kudu?)に移動し、必要に応じてサーバーを追加します。
4 - 既存のデータベースをシャーディングする、基本的に各アフィリエイトに別のdbサーバーを追加する。
このタイプのタスクにはいくつかのベストプラクティス/テクノロジがありますか?どんな助けも本当にありがとう!