Я пытаюсь определить лучший способ работы с составным первичным ключом в mongo db. Основной ключ для взаимодействия с данными в этой системе состоит из 2 uuids. Сочетание uuids гарантировано будет уникальным, но ни одна из отдельных uuids не будет.
Я вижу пару способов управления этим:
-
Используйте объект для первичного ключа, который состоит из двух значений (как предлагается здесь)
-
Использовать стандартный автогенерированный идентификатор объекта mongo в качестве первичного ключа, сохранить мой ключ в двух отдельных полях, а затем создать составной индекс для этих двух полей
-
Сделать первичный ключ хешем из 2 uuids
-
Некоторое другое удивительное решение, о котором я в настоящее время не знаю
Каковы последствия этих подходов к производительности?
Для варианта 1 я беспокоюсь о том, что производительность вставки зависит от наличия последовательных ключей. Я знаю, что это может убить традиционные системы РСУБД, и я видел признаки того, что это может быть верно и в MongoDB.
Для варианта 2 кажется странным иметь первичный ключ, который никогда не будет использоваться системой. Кроме того, похоже, что производительность запросов может быть не такой хорошей, как в варианте 1. В традиционной RDBMS кластерный индекс дает лучшие результаты запроса. Насколько это уместно в MongoDB?
Для параметра 3 это создало бы одно поле id, но при вставке оно не будет последовательным. Существуют ли другие плюсы и минусы этого подхода?
Для варианта 4, ну... что такое вариант 4?
Кроме того, есть некоторое обсуждение возможности использования CouchDB вместо MongoDB в какой-то момент в будущем. Использует ли CouchDB другое решение?
ДОПОЛНИТЕЛЬНАЯ ИНФОРМАЦИЯ: некоторый фон об этой проблеме можно найти здесь