Как отключить шард-ключ Cosmos DB для Mongo API - PullRequest
0 голосов
/ 18 февраля 2019

Я перевожу очень простую базу данных Монго (пара 100 записей) в базу данных Azure Cosmos DB.Мое приложение основано на node-js, поэтому я использую mongoose в качестве картографа.Прежде, чем это было действительно просто, определите схему, сбор запросов, закончил.

Теперь, когда я настраивал коллекцию в cosmos db, меня спрашивали о ключе партиции и ключе шарда.Первый я мог игнорировать, но последний был обязательным.Быстро прочитав эту тему и поняв, что это своего рода разделение (опять же, которое мне не нужно и не нужно), я просто выбрал _id в качестве ключа шарда.

Конечно, что-то не работает.

Хотя запросы поиска работают просто отлично.Ошибка обновления или вставки записей, ниже приведена ошибка:

MongoError: запрос в команде должен быть нацелен на один ключ шарда * Было объявлено: 1010 *

Cosmos db (с API Монго)для меня в качестве замены замены.Что явно не так, потому что мне никогда не приходилось беспокоиться о таких вещах в монго, особенно для такого мелкомасштабного приложения / db.

Итак, можно ли как-то отключить шардинг?В качестве альтернативы, как я могу определить ключ шарда и вообще не беспокоиться о нем в будущем?

Приветствия

Ответы [ 3 ]

0 голосов
/ 13 марта 2019

Требуется, чтобы в каждой коллекции был ключ раздела, и вы не можете отключить это требование.Вставка документа в вашу коллекцию без поля, предназначенного для ключа раздела, приводит к ошибке.Как указано в документации:

Ключ разделения используется для автоматического распределения данных между несколькими серверами для обеспечения масштабируемости.Выберите имя свойства JSON, которое имеет широкий диапазон значений и, вероятно, имеет равномерно распределенные шаблоны доступа.

0 голосов
/ 14 августа 2019

Вы можете создать коллекцию CosmosDB с максимальным фиксированным объемом хранения 10 ГБ.В этом случае коллекцию не нужно будет очищать, поскольку хранилище не масштабируется, и вы не будете получать ошибки от CosmosDB.Однако из-за минимальной пропускной способности 400 у вас могут быть немного более высокие затраты.

0 голосов
/ 19 февраля 2019

1.Могу ли я как-то отключить шардинг?

На основании утверждений в Официальном документе Монго он не может быть реализован.

MongoDB не предоставляет метод для отключения шардинга для коллекции после вызова shardCollection.Кроме того, после shardCollection вы не можете изменять ключи шарда или изменять значение любого поля, используемого в индексе ключа шарда.

Таким образом, вы не можете деактивировать или отключить ключ шарда.

2.В качестве альтернативы, как я могу определить ключ шарда и вообще не беспокоиться о нем в будущем?

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

new Schema({ .. }, { shardKey: { tag: 1, name: 1 }})

Обратите внимание, что Mongoose не отправляет команду shardcollection для вас.Вы должны настроить свои шарды самостоятельно.

Кстати, установите _id, так как ключ шарда может не быть подходящим решением.Вы можете найти некоторые советы по выбору ключа шарда из здесь . Если вы хотите изменить ключ шарда или просто удалить ключ шарда, обратитесь к этому случаю: Как заменить ключ шарда

...