2016-04-01 8 views
0

Ich habe Dokumente mit dem folgenden Schema:Mongodb Sharding, verwenden Sie mehrere Felder als Shard-Schlüssel?

{ 
    idents: { 
    list: ['foo', 'bar', ...], 
    id: 123 
    } 
    ... 
} 

das Feld idents.list ist ein Array von String und enthält immer mindestens ein Element. Das Feld idents.id kann oder kann nicht existieren.

Im Laufe der Zeit werden mehr Einträge zu 'idents.list' hinzugefügt und zu einem späteren Zeitpunkt könnte auch das Feld idents.id gesetzt werden.

Diese beiden Felder dienen zur eindeutigen Identifizierung eines Dokuments und sind daher für einen Shard-Schlüssel relevant. ist es möglich, Sharding mit diesem Schema zu verwenden?

UPDATE: Dokumente immer über {idents.list: 'foo'} abgefragt werden ODER { $or: [ {idents.list: 'foo'}, {idents.id: 42} ] }

+0

Wir mehrere Felder für eine Scherbe Schlüssel verwenden können. Aber wenn wir mehrere Schlüssel verwenden, können wir niemals einen Hash-Schlüssel haben. Das ist mein Verständnis. –

Antwort

0

Ja, Sie können dies tun. Die Dokumentation sagt:

Use a compound shard key that uses two or three values from all documents that provide the right mix of cardinality with scalable write operations and query isolation. 

https://docs.mongodb.org/manual/tutorial/choose-a-shard-key/

+0

Das Dokument sagt, dass ein Shard-Schlüssel kann nie ändern, in meinem Fall ändert sich die Liste im Laufe der Zeit. Es scheint also nicht so, dass dies als Shard-Schlüssel sinnvoll ist. hilft das Sharding bei Abfragen überhaupt selten/nie über die shardkey-Einträge? Aktualisieren/Schreiben auf der anderen Seite kann durch den Shard-Schlüssel (z. B. eine Hash-ID) – zaphod1984

+0

getan werden, wenn Sie nicht den Shard-Schlüssel zu Abfrage verwenden, haben Sie eine Scatter-Gather-Abfrage, die nicht effizient sein wird. Sie können '$ update' nicht für einen Shardschlüssel-Inhalt verwenden, der korrekt ist, aber Sie können das Dokument entfernen und ein neues einfügen. Es ist möglicherweise nicht effizient, wenn Sie es oft tun, aber wenn man bedenkt, wie mongodb Speicherplatz bei der Vergrößerung von Array-Größen neu zuweist, macht das vielleicht keinen großen Unterschied. – Oz123

+0

Vielen Dank für Ihren Kommentar, ich dachte nicht an diese Möglichkeit. Entfernen und erneutes Einfügen ist natürlich in gewisser Weise problematisch, weil gleichzeitig geschrieben wird ... das Sharding ist nicht trivial, es scheint mir glücklicherweise im Moment nicht notwendig – zaphod1984

Verwandte Themen