Я смотрю в sharding с использованием mongodb, и большинство, если оно довольно прямолинейно. У меня есть некоторый опыт с очертаниями в других базах данных, поэтому я не спрашиваю о самой концепции. Есть одна вещь, которую я смутил, и, похоже, в документации нет ничего подобного, так что здесь.Уникальность _id в осколке
_id
Необходимо быть уникальным в пределах осколка, независимо от ключа осколка?
Небольшой масштаб (одиночный осколок), похоже, подтверждает, что это так. Однако это похоже на менее звездный подход к осколкам, который меня смущает. Для меня было бы разумнее потребовать, чтобы shard-key
+ _id
был уникальным (т. Е. Использовал составной ключ), или у вас будет непоследовательное поведение в зависимости от того, куда направляются ваши ключи-шрамы. В моей модели данных используются детерминированные ключи, а ключ осколка - неотъемлемая часть. Так что я думаю, что все сводится к тому, что я сделал что-то не так в моем малом тесте? Должен ли я хранить ключ осколка дважды, один раз в качестве поля ключа осколка и один раз в качестве части _id
? Или есть специальный случай, когда я могу как-то объявить составной ключ, используя shard-key
и _id
?
Update
Для полноты, это тривиальный случай я тестирование, вставляя следующие два документа:
{"_id": 1, "shardkey": 1}
{"_id": 1, "shardkey": 2}
Сначала один, очевидно, проходит, второй один выходит из строя. Если бы у меня было два осколка, и ключи осколков были бы перенаправлены на разные осколки, я предполагаю, что оба они преуспели.
Я могу, очевидно, просто объединить осколочный ключ и идентификатор, чтобы создать поле для mongodb, поскольку это действительно тот ключ, который я использую, но это похоже на странный способ приблизиться к проблеме из архитектуры базы данных точка зрения.
Очевидно, что _id технически не обязательно быть уникальным, только внутри осколка. То, как mongodb, похоже, справляется с этим, состоит в том, чтобы заставить _id быть глобально уникальным или иначе возникнут проблемы. Однако он не применяет это ограничение уникальности, и простой способ сделать это (и даже то, что делают другие базы данных) - это определить ключ как ключ-ключ + id, но, похоже, mongodb этого не делает (и это мой вопрос, действительно ли это так? Они оставляют это приложение для обеспечения соблюдения?). Я не спрашиваю об индексе, уникальный индекс на shard-key + _id лишний, если _id должен быть глобально уникальным. – falstro