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/ для справки.

Другие вопросы по тегам