シャーディングは通常、テーブル サイズを分散するのに適しています。負荷の問題は、通常、複製されたデータ環境で対処する必要があります。あなたの問題は、a) 巨大なテーブル、b) テーブル レベルのロック、c) 安っぽいハードウェアです。
InnoDB
テーブルのキーの 1 つを主キーとして使用できる場合は、InnoDB が適している可能性があります。行レベルのロックを実行できるため、クエリが相互に待機するのを減らすことができるからです。テーブルをテスト サーバーにレプリケートし、テーブルに対してすべてのクエリを試して、パフォーマンスの利点を確認することをお勧めします。InnoDB は MyISAM よりもリソース消費率が高いため、その点に注意してください。
ハードウェア
申し訳ありませんが、あなたのハードウェアはあなたが必要とするパフォーマンスに対してくだらないものです。Twitter は 2.6k QPS で 1 秒あたり 34 回の書き込みを行います。Twitter のボリュームを上げて、強化されたゲーム用デスクトップがそれを削減すると考えることはできません。いくつかの SSD ドライブを備えた 15,000 ドルの Dell を購入すると、100,000 QPS をバーストすることができます。あなたは今、大きな時代にいます。スタートアップ ギアを捨てて、素敵なサーバーを手に入れる時が来ました。シャードしたくありません。ハードウェアをアップグレードする方が安くなりますし、率直に言って、アップグレードする必要があります。
シャーディング
シャーディングは、大きなテーブルを分割するのに最適です。以上です。
悪いことをはっきりさせてください。シャード アーキテクチャの開発は最悪です。シャードしないようにできる限りのことをしたい。ハードウェアをアップグレードし、複数のサーバーを購入してレプリケーションをセットアップし、コードを最適化しますが、念のためシャードは行わないでください。シャーディングのパフォーマンス ラインをはるかに下回っています。プッシュが 30k+ QPS を維持した場合、シャーディングについて話します。その日まで、NO.
16 コアで 5 TB の Fusion IO と 256 GB の RAM を備えた中規模サーバー ($30,000 の Dell PowerEdge) を購入すると、彼は 200,000 QPS まであなたを連れて行ってくれます。
しかし、あなたが私の言うことを聞くことを拒否し、とにかくシャードするつもりなら、あなたがしなければならないことはここにあります.
ルール 1: 同じシャードにとどまる (つまり、パーティション ルールを選択する)
シャード化したら、複数のシャードからデータにアクセスする必要はありません。クエリをできるだけ同じシャードに保持するパーティション ルールを選択する必要があります。クエリの分散 (ルール 4) は、分散データ環境では非常に苦痛です。
ルール 2: シャード マップを作成して複製する
コードはすべてのシャードにアクセスできる必要があります。パーティション ルールに基づいてシャード マップを作成し、必要なデータを取得するためにどこに行けばよいかをコードに知らせます。
ルール 3: シャードのクエリ ラッパーを作成する
どのシャードに移動するかを手動で決定する必要はありません。あなたのためにそれを行うラッパーを書いてください。コードを書いているときは、将来自分自身に感謝するでしょう。
ルール 4: 自動バランス
最終的には、パフォーマンスを最適に保つためにシャードのバランスを取る必要があります。事前にこれを計画し、シャードのバランスを取る kron ジョブを意図してコードを記述します。
ルール 4: 分散クエリをサポートする
必然的に、ルール 1 を破る必要があります。その場合、複数のシャードからデータを取得して 1 か所に集約 (持ち込み) できるクエリ ラッパーが必要になります。シャードが多いほど、マルチスレッド化が必要になる可能性が高くなります。私のショップでは、これを分散クエリ (つまり、複数のシャードで実行されるクエリ) と呼んでいます。
悪いニュース: 分散クエリを実行して結果を集計するためのコードはありません。Apache Hadoop は試みますが、ひどいものです。HiveDB も同様です。優れたクエリ ディストリビューターは、設計、作成、最適化が困難です。これは、年間数十億ドル規模の企業が直面している問題です。たわごとはありませんが、並べ替え + 制限句と適切なスケーリングをサポートするシャード全体にクエリを分散するための優れたラッパーを思いついたら、一晩で億万長者になることができます. 300万で売ってんの?ドアの外に1マイルの長さの列ができます。
ここで私が言いたいのは、シャーディングは難しく、コストがかかるということです。それには多くの作業が必要であり、シャードしないように人間が可能な限りのことをしたいと考えています。やむを得ない場合は、ルールに従ってください。