ObjectIDによるシャーディング、それは正しい方法ですか?

私はMongoの私のコレクションを破るための正しいアプローチについて、他の多くの人が考えているように思えます。主な質問は、どのように自動シャーディングが機能するかです。

The official doc says - "MongoDB scales horizontally via an auto-sharding (partitioning) architecture" and "To partition a collection, we specify a shard key pattern." with note "It is important to choose the right shard key for a collection" :).
http://www.mongodb.org/display/DOCS/Sharding+Introduction#ShardingIntroduction-ShardKeys
http://www.mongodb.org/display/DOCS/Choosing+a+Shard+Key

今問題は - "これは正しいキーです"(ObjectIDによるシャーディング)ですか?

db.runCommand({ shardcollection : "test", key : { _id : 1 }})

モンゴの内部ではどうなりますか?この場合、Mongoはどのようにデータをチャンクに分割しますか?私は最初に2つのシャードサーバーを持つ10ミリリットルのレコードを持っていると仮定します。コレクションが20ミリリットルのレコードに達したら2つのシャードサーバーを追加したい場合、モンゴサイドではどうなりますか?私はMongo関連の情報源のどこにいてもその詳細レベルを見つけることができませんでした。

Taking into account random nature of autogenerated _id and it's structure,

... http://www.mongodb.org/display/DOCS/Object+IDs .. 。

私はチャンクを2〜3バイトの値で分割した最下位バイト(rtl順)で分割します - これは2 ^ Nのシャードサーバー - 2,4,8、..、256シャードサーバーで簡単にシャードする方法を提供します各シャードに多かれ少なかれ負荷がかかり、必要最小限の構成で済みます。私が理解する限り、Mongoは明示的に定義された範囲でシャーディング/チャンクだけをサポートし、私の考えは機能しません。本当ですか?

6
うん、私は新しいプロジェクトのための積極的な研究の段階にあります - すべての私の質問を見直し、研究が終わったら最も適切なものを受け入れます。
追加された 著者 Xtra Coder,
@XtraCoderあなたの研究はどのように行ったのですか?この答えは受け入れに値すると思われます。
追加された 著者 Asya Kamsky,

2 答え

It's generally not a good idea to use the default object id as the shard key since it has an embedded timestamp and monotonically increases in time. This may work fine if you do a lot of updates such that it touches old and new documents in an evenly distributed fashion. However, this is really bad news if your application is heavy on inserts since majority of your writes will go to a single shard. This is because the writes will go to the shard that owns the [nearCurrentTimestamp -> infinity] chunk.

各mongosは断片への書き込みトラフィックを監視し、非常に単純なヒューリスティックを使用して、チャンクが大きくなりすぎて分割する必要があるかどうかを判断します(しきい値サイズはchunkSizeで構成可能です)。

新しいシャードをクラスタに追加すると、バランサ( http:// www.mongodb.org/display/DOCS/Sharding+Administration#ShardingAdministration-Balancing )にチャンクの不均衡が見られ、チャンクを新しいシャードに移行し始めます。

しかし、Mongoは範囲ベースのシャーディングをサポートしていますが、チャンクをより小さな範囲に分割し、時間の経過とともにクラスターを移動できるため、範囲が固定されているわけではありません。

16
追加された
これはもはやハッシュキーのハッシュを考えると真実ではありません。
追加された 著者 David Grinberg,
私の考えがうまくいかないことを尋ねたものが残っているので、この回答を受け入れてください(残念ながら):(しかし、私はそれを働かせる方法を見つけたいと思っています:)
追加された 著者 Xtra Coder,

バージョン2.4の新機能は、Hashedインデックスがサポートされ、Shard Keysとして使用できることです。だから、あなたの主な質問 "Sharding by ObjectID、それは正しい方法ですか?" への答えは今ははいです!

より多くの参考文献は公式の文書にあります:

ハッシュされたシャードキー

http://docs.mongodb.org/manual/core/sharded-cluster -internals /#ハッシュ・シャード・キー

ハッシュされたインデックス

http://docs.mongodb.org/manual/core/indexes/#hashed-index

13
追加された
ここで重要な点を覚えておいてください。 "クエリの分離を減らすために&このリンク
追加された 著者 Amol M Kulkarni,
「ObjectId index」を日付フィールドとして使用している場合、アプリケーションが実際に書き込みを集中している場合を除き、「ハッシュ・インデックス」は使用しません。
追加された 著者 Adrian Lopez,