挿入

2016-05-24 8 views
2

イブニング用のデータベースすべてをランダム化する、私は最近、Pinterestのでシャーディングに関する次のブログ記事を読んでいると私はいくつかの素晴らしいものがあると思うhttps://engineering.pinterest.com/blog/sharding-pinterest-how-we-scaled-our-mysql-fleet挿入

私も上のわからないよ何を、どのように最善にありますブランドの新しいユーザーを挿入する場所を決めます。

上記の記事を読んでいないか、気にしていない人にとっては、Pinterestにはいくつかの断片があり、それぞれに多数のデータベースがあります。これらは、シャード、テーブルを決定するオブジェクトのタイプ(ユーザー、ピンなど)、問題のオブジェクトのローカル自動増分IDを決定する64ビットシフトに基づいて、オブジェクトのIDを生成します。今では、彼らは彼らがいる 'ボード'と同じデータベースにピンなどを入れようとします。しかし、新しいオブジェクトの場合、それが存続する「シャード」を決定する最良の方法は何でしょうか?彼らはモジュラス例えば

shard = md5(“1.2.3.4") % 4096 //4096 is the number of shards 

を使用しかし、私は、単純な電子メール/パスワードの登録フォームを持っていた場合、あなたは電子メールアドレスに同様のアプローチを使用すると、ワークアウトのために働くだろうと思いますFacebook経由のサインインするユーザーのために

最初のシャード?私はこのケースでは電子メールでなければならないと考えていました。そうしないと、どのデータベースからログオンの資格情報を検証するのかわからなくなります。また、私はポストが2015年であり、あまりにも古くなく、コンピューティングパワーが素早く動くことを知っていますが、ここでmd5を使用した方がよいでしょうか?私は、衝突の可能性が軽微であることを知っています - 特にここで電子メールアドレスをハッシュすることについて話しているだけですが、別のアルゴリズムを使用する価値はありますか?私は基本的にシャードを決定し、それを元に戻す方法を考え出す最良の方法に興味を持っています。(なぜ私はそれが電子メールアドレスでなければならないと思うのですか)

(それはそのように見えるようPinterestのタグでこれをしていないPSはちょうどAPI devのためだ、誰かが、それは問題でより良いの目」を得るかもしれないと考えるならば、それを追加して自由に感じる)

+0

@NorbertvanNobelenありがとう、それは私のためにそれをきれいにする、なぜ私は自分自身(その瞬間の一つ)を考えなかったのか分からない。あなたがこれを回答として投稿すれば、それを受け入れるよ – TommyBs

+0

これは知的な質問ですか?または、1台のサーバーを超えて拡張する必要があるシステムを構築していますか? –

+0

2015年 - 世紀の変遷以来、CPUはあまり改善されていません。データベースツールはあまり変更されていません。ここ数年の唯一の大きな変化については、SSDの普及が広がっています。 –

答えて

1

MD5を使用してシャードを決定する場合、衝突にはリスクはありません。衝突が発生すると、同じシャードで終了します。 MD5はその断片の鍵ではありません(衝突の危険がなくなる場所です)。

このシャード方法の主な問題は、シャードの数が固定されているため、最終的なパフォーマンスが問題になることです(実行環境の再配布は容易ではないため、より多くの成長が予想される場合は機械)。

+2

MD5-ing文字列データが一般的なハッシュコリジョン規格であっても事実上存在しないほどに低い場合に衝突が発生する可能性があることにも注意してください。 – Sammitch