2016-04-01 5 views
0

У меня есть документы со следующей схемой:mongodb sharding, используйте несколько полей в качестве ключа осколка?

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

поле idents.list является массивом строки и всегда содержит по крайней мере один элемент. Поле idents.id может быть или не быть существующим.

с течением времени в 'idents.list' добавляются новые записи, и в какой-то момент в будущем поле idents.id также может быть установлено.

Эти два поля используются для четкого определения документа и, следовательно, имеют отношение к клавише осколка. Возможно ли использовать эту схему?

UPDATE: документов всегда запрошены через {idents.list: 'foo'} ИЛИ { $or: [ {idents.list: 'foo'}, {idents.id: 42} ] }

+0

Мы можем использовать несколько полей для ключа шарда. Но, используя несколько ключей, у нас никогда не будет хэшированного ключа осколка. Это мое понимание. –

ответ

0

Да, вы можете сделать это. В документации сказано:

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

Док говорит, что ключ осколка никогда не может измениться, в моем случае список меняется со временем. так что это не кажется, что это имеет смысл в качестве ключа осколка. вообще ли опрашивает помощь, когда запрос редко или никогда не выполняется через записи shardkey? обновление/запись, с другой стороны, можно выполнить с помощью ключа осколка (например, хэшированного _id) – zaphod1984

+0

, если вы не используете ключ осколка для запроса, у вас будет запрос на сборку рассеяния, который не будет эффективным. Вы не можете использовать '$ update' для содержимого ключевого ключа, это правильно, но вы можете удалить документ и вставить новый. Это может быть неэффективно, если вы делаете это часто, но учитывая, как mongodb переназначает пространство при увеличении размеров массивов, это может не иметь большого значения. – Oz123

+0

Благодарю вас за ваш комментарий, я не думал об этой возможности. удаление и повторное вложение, конечно, в какой-то степени проблематично из-за одновременных писем ... sharding не является тривиальным, мне кажется, к счастью, на данный момент это не обязательно – zaphod1984

Смежные вопросы