MongoDB, размещенный в Azure Cosmos DB: Sharding vs
Мы хотим использовать MongoDB для нашей базы данных и хотим использовать API MongoDB, чтобы избежать "привязки" к хостингу Azure Cosmos DB.
Мы используем.Net Core и пакет MongoDB.Driver (чтобы иметь возможность легко переключаться между on-prem, Atlas, Azure Cosmos hsoting и т. Д.) Для связи с экземпляром MongoDB, пока что все хорошо.
Чтобы иметь возможность справляться с будущим ростом объемов данных (размер и производительность), я хочу, чтобы мои коллекции были изолированы. Насколько я понимаю, стратегия использования Cosmos DB - это разделение с помощью ключей разделов, но, поскольку мы используем MongoDB.Driver, я все равно не могу найти, чтобы указать ключи разделов в моих запросах.
"Простой" MongoDB использует взамен sharding, и вы можете установить свойство документа, которое должно использоваться в качестве разделителя для того, как ваши данные должны быть обработаны.
Таким образом, я предполагаю, что шардинг - это путь (так как partionkeys - это функция Космоса), но я не могу заставить его работать.
"Оболочка MongoDB" в портале Azure не понимает команду sh.shardCollection, и если я подключаюсь с оболочкой MongoDB из моего клиента, я получаю следующую ошибку:
globaldb:PRIMARY> use sampledatabase
switched to db sampledatabase
globaldb:PRIMARY> sh.shardCollection("sampledatabase.Event", { TenantId: 1 } )
2018-06-21T12:03:06.522+0200 E QUERY [thread1] Error: not connected to a mongos :
Как перейти к настройке и работе в экземпляре MongoDB, размещенном в Azure Cosmos?
2 ответа
Конечная точка API CosmosDB Mongo предоставляет интерфейс MongoD с включенным набором реплик вместо интерфейса MongoS. Следовательно, вам нужно будет использовать db.runCommand вместо команд sharding для создания коллекции sharded.
Вы можете найти более подробную информацию на https://docs.microsoft.com/en-us/azure/cosmos-db/partition-data
Позже я узнал, что вы можете создавать сегментированные коллекции с помощью Microsoft.Azure.Documents.Client.
Вы должны использовать прикольный синтаксис @"/'$v'/ShardingKey/'$v'", чтобы он работал. Затем вы можете использовать свойство в вашем документе с именем ShardingKey, которое будет хорошо сочетаться с библиотекой MongoDB.Driver.
_client.CreateDocumentCollectionAsync(databaseUri,
new DocumentCollection
{
Id = documentCollection.Id,
PartitionKey =
new PartitionKeyDefinition
{
Paths = new Collection<string> {@"/'$v'/ShardingKey/'$v'"}
}
}, new RequestOptions {OfferThroughput = 1100}).Wait();
См. https://blog.olandese.nl/2017/12/13/create-a-sharded-mongodb-in-azure-cosmos-db/ для справки.