私の必要に応じて、私は事前分割をしなければならないが、私のシャードキーは複合キーである。私の複合キー(K1およびK2)の両方のキーはint型であり、私の希望チャンクの構造は、この複合シャードキーで事前分割
chunk1のようなものです:2に、K1 = 1:
chunk2をmaxkeyするK1 = 1にminkey、K2 = minkey
chunk4 maxkeyする= 2〜3、K2 = minkey K1: をmaxkeyするk1は= 3〜4、K2 = minkey ...
をだから何
chunk3をmaxkeyするため、K2 = minkey私は本当にしたい最初のキーのみに分割され、彼は、第2の鍵は、すべての可能な範囲を含むことが、この
db.runCommand({ split : "db.mycollection" , middle : { k1: 1} });
を実行する場合、それは私がこの
db.runCommand({ split : "db.mycollection" , middle : { k1: 1, k2:somenumber } });
このコマンドは動作しますが、結果を呼び出すようになりますので、完全なシャードキーが提供されていないと言って失敗しますK1 = 1にminkey、K2 = minkey
chunk2 somenumberする:maxkeyへ= 1 K1、K2 = somenumberをそれは私に
chunk1以下のようなチャンクを与えるので、分割が悪いです〜maxkey
これは悪いことですが、ユーザーがk1 <とk2> somenumberのいずれかのドキュメントを挿入すると、それをカバーするシステムにチャンクがなく、挿入が失敗するからです。
複合キーでこのようなチャンク境界を作成するにはどうすればよいですか?
注:maxkeyを常にminkeyにすると、k2を持つ理由がわかります。私は、これはそれを行う必要があります
に私はこれを試してみましたが、Idは動作しませんでしたし、私は常にthisCommand「スプリット」を取得していませんでした:{「原因」:{「スプリットは (失敗応答""、 "ts":ObjectId( "4f4ffdda58ee8c3d2948d640")、 "状態": "プロセス": "blahmachine:27018:1330601796:1743958884"、 " :ISODate( "2012-03-01T22:53:14.839Z")、 "who": "blahmachine:27018:1330601796:1743958884:conn3:1105345454"、 "why": "migrate- {k1:0、k2 : "、" ok ":0.0}、 " ok ":0.0、" er ":" errmsg ":"コレクションのメタデータロックが取られました。 – iCode
クラスタが新しく、データが記録されていません – iCode
また、maxkey
iCode