1

3 つのテーブルを使用するアプリケーションを開発しています。1 ~ 100 万行の製品。2 ~ 5 億行のユーザー。ユーザーが好む製品の 3 ~ 100 億行。テーブルは時間とともに大きくなりますが、それらの数にとどまります。この種の DB に適した方法を選択したいと考えています。私はシャーディング、クラスタリング、またはパーティショニングについてあまり知りませんが、この問題の最善の解決策を教えてくれる人がいるなら、私はそれに焦点を当てます。それは大きな助けになるでしょう. mysql をサポートするメソッドのみが必要で、この種の DB に複数のサーバーが必要な場合は? ありがとう。

4

2 に答える 2

1

このデータ セットは非常に簡単に分割できますが、実行しようとしている分析の種類によっては、分割する必要がない場合もあります。これが単純に各ユーザーの好みの履歴である場合は、おそらくデータベース パーティション分割を使用して、データを日付の範囲でパーティション分割し、次に user_id でサブパーティション分割することができます。

日付を頻繁に更新する場合 (ユーザーは物事を「好きにならない」ことができます)、おそらくシャーディングを検討する必要があります。ここにシャーディング実装の例があります: Shard-Key-Mapper。ここで、データセットに対して分散並列クエリを実行できます (SQL の map/reduce など): Shard-Query

シャードする場合は、user_id でシャーディングし、製品テーブルを各シャードで複製される「共有」テーブルとして保持することをお勧めします。シャード間でユーザーを移動できるディレクトリ ベースのシャーディング方法を使用する必要があります。1 人のユーザーに関するすべての情報と、ユーザーの好みに関する情報が 1 つのシャードにまとめて保存されます。

于 2011-05-08T07:27:51.620 に答える
0

Hadoop のような noSQL ソリューションが本当に必要ない場合は、複数のデータベース (ここでは MySQL) サーバーを取得することは避けられないと思います。また、私の意見では、MySQL レプリケーションはこの種のデータに十分なスケーラビリティを提供しません。マスターがボトルネックになるからです。私もスケーラビリティの専門家ではありませんが、現在、私の側でも同様の問題に対する優れた解決策を考えています。複数のノードにデータを分割するシャーディング ソリューションを使用すると思います。データからシャードへのマッピングを作成するインテリジェントな方法について考えています。ただし、これはアプリケーションによってどのように作成するかによって異なります。「製品の好み」データは非常に大きいため、パーティショニングに適していると思います。

ところで:シャーディングに対する興味深い記事: http://37signals.com/svn/posts/1509-mr-moore-gets-to-punt-on-sharding

于 2011-05-02T14:13:18.703 に答える