Azure Cosmos DB中托管的MongoDB:分片与分区

问题描述 投票:3回答:2

我们希望将MongoDB用于我们的数据库,并且我们希望使用MongoDB API来避免被“锁定”到Azure Cosmos数据库主机。

我们使用.Net Core和MongoDB.Driver软件包(能够轻松地在本地,Atlas,Azure Cosmos hsoting等之间切换)与MongoDB实例进行通信,到目前为止一切顺利。

为了能够处理未来数据量的增长(大小和性能),我希望对我的集合进行分片。据我所知,Cosmos DB使用的策略是使用分区键进行分区,但由于我们使用MongoDB.Driver,因此无法在查询中指定partitionkeys。

“普通”MongoDB使用分片,您可以设置一个文档属性,该属性应该用作分片数据的分隔符。

所以,我的猜测是分片是要走的路(因为partionkeys是一个宇宙功能),但我无法让它工作。

Azure门户中的“MongoDB shell”不理解sh.shardCollection命令,如果我从客户端连接MongoDB shell,我会收到以下错误:

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 :

如何在Azure Cosmos中托管的MongoDB实例中进行分片和运行?

mongodb azure-cosmosdb partitioning sharding mongodb.driver
2个回答
1
投票

CosmosDB Mongo api端点公开了启用了副本集的MongoD接口,而不是MongoS接口。因此,您需要使用db.runCommand而不是“sh”分片命令来创建分片集合。

您可以在https://docs.microsoft.com/en-us/azure/cosmos-db/partition-data#mongodb-api找到更多详情


0
投票

我后来发现您可以使用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/以供参考

© www.soinside.com 2019 - 2024. All rights reserved.