2009-06-28 6 views
4

私は、複数のサーバー間で自分のウェブサイトのユーザーデータをシャーディングすることに興味があります。ウェブサイトのユーザーデータのシャーディングについてもっと知りたいですか?

たとえば、ユーザーは同じ場所からログインします。ログインスクリプトは、ユーザーのデータが置かれているサーバーを把握する必要があります。したがって、ログインスクリプトは、そのユーザー名のマスターレジストリに照会し、それがサーバーBにあると返す可能性があります。ログインスクリプトはサーバーBに接続し、ユーザー名とパスワードを確認します。それは理にかなっていますか?データが存在する場所を解決するためにマスターレジストリのようなものを用意するのは普通ですか?

また、私は検索しましたが、シャーディングに関するチュートリアル/情報/戦略を見つけるのは大変でした。あなたがトピックについて気づいているオンラインリソースがあれば、私が自分自身を教育するために共有するなら、私はそれを高く評価します。ありがとう!

+0

3台のサーバーにシャーディングを使用して[ブログ投稿](http://blog.devlex.net/post/2012/04/20/Sharding-with-RavenDB.aspx)を書きました。完全なソースコードを入手してローカルで実行することができます。それをチェックして、あなたの考えを見てください! – oleksii

答えて

1

単純なハッシュを使用することをお勧めします。たとえば、ユーザ名のMD5ハッシュを取り、その最後の8バイトをlongとして扱います。長いmod(サーバーの数)をとり、サーバーにデータを置くようにしてください。そうすることで、サーバーの順序付きリスト以外の中央レジストリ/構成は必要ありません。

欠点...サーバの数を変更すると、新しい「正しい」場所にすべてのデータを移動含むことである

(1台のマシンがダウンした場合、それらのユーザーが詰めているという問題もあります - あなたは何らかの冗長性を考慮する必要があります)

+1

"サーバーの数を変更すると、すべてのデータを新しい「正しい」場所に移動する必要があるという欠点があります。これはConsistent Hashingを使用して処理できます。 –

8

非常に有益なサイトhttp://highscalability.comをチェックしてください。

一般的にあなたが正しいアプローチを以下の通りですが、あなたはより多くの上でクエリを実行する必要がある場合、これは非常に高速厄介な取得することができます。読む価値投稿1つのクラスター - 例えば"あなたの友人の最近の投稿"型のクエリ。

関連する問題