2015-06-12 9 views
6

Ich versuche, einige Jumbo Brocken in mongodb sharded Cluster sharded mit Hash-Shard-Schlüssel: {group_id: "hashed"}.Mongodb Sharding: Chunk Split fehlgeschlagen mit Hashed Shard Key

ich den folgenden Befehl von mongodb docs verwendet, um diese Jumbo-Stücke aufzuspalten:

db.runCommand({ split: "test.people", 
        bounds : [ { group_id: NumberLong("-5838464104018346494") }, 
          { group_id: NumberLong("-5557153028469814163") } 
      ] }) 

Aber folgende Fehler bekommen:

{ "cause" : { }, "ok" : 0, "errmsg" : "split failed" }. 

Was die mögliche Ursache für diesen Fehler ist? Der Shard-Schlüssel group_id hat Kardinalität 26231 gegen insgesamt 4521157 Dokumente.

Haben Sie this Diskussion überprüft, aber nicht die Ursache zu finden.

S.S. Die group_id ist ObjectId.

+0

Haben Sie versucht, 'middle' anstelle von' bounds' zu verwenden? – chridam

+0

Ja..das funktioniert nicht. Da es kein Abfragedokument gibt, kann ich für den Hash-Schlüssel – Astro

+0

angeben. Haben Sie versucht, die Protokolldatei zu untersuchen? –

Antwort

0

Ihre Kardinalität ist Weg zu klein. Ein Chunk wird automatisch geteilt, wenn er 64 MB erreicht.

Derzeit, mit einer Kardinalität von 26231, kann Ihre Sammlung nicht größer sein als 26231 * 64 MB maximal ohne Jumbo Brocken ... Und Sie werden wahrscheinlich Probleme haben eine lange Zeit, bevor Sie eine perfekte Verteilung haben.

In Ihrem Fall Sie keinen Wert von group_id in einem Hash-Wert zwischen NumberLong resultierenden haben ("- 5838464104018346494") und NumberLong ("- 5557153028469814163") ...

So kann man nicht Teile es, weil deine Kardinalität zu klein ist.

Um zusammenzufassen, benötigen Sie einen besseren Shard-Schlüssel sofort was mongodump alles bedeutet und dann mongorestore mit dem neuen Shard-Schlüssel.