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

托管在Azure Cosmos DB中的MongoDB:分片与分区,mongodb,azure-cosmosdb,partitioning,sharding,mongodb.driver,Mongodb,Azure Cosmosdb,Partitioning,Sharding,Mongodb.driver,我们希望将MongoDB用于我们的数据库,并且我们希望使用MongoDB API来避免被“锁定”到Azure Cosmos DB主机 我们使用.Net内核和MongoDB.Driver包(能够在prem、Atlas、Azure Cosmos hsoting等平台上轻松切换)与MongoDB实例进行通信,目前为止效果良好 为了能够处理数据量(大小和性能)的未来增长,我希望将我的集合切分。据我所知,Cosmos DB使用的策略是使用分区键进行分区,但由于我们使用MongoDB.Driver,因此我无

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

我们使用.Net内核和MongoDB.Driver包(能够在prem、Atlas、Azure Cosmos hsoting等平台上轻松切换)与MongoDB实例进行通信,目前为止效果良好

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

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

所以,我的猜测是,切分是一种方式(因为partionkeys是Cosmos的一个特性),但我无法让它工作

Azure Portal中的“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实例中进行分片并运行?

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


您可以在

上找到更多详细信息。我后来发现,您可以使用Microsoft.Azure.Documents.Client创建分片集合

您必须使用时髦的语法@/'$v'/ShardingKey/'$v',它才能工作。 然后,您可以在文档上使用名为ShardingKey的属性,该属性将与 驱动程序库

                        _client.CreateDocumentCollectionAsync(databaseUri,
                        new DocumentCollection
                        {
                            Id = documentCollection.Id,
                            PartitionKey =
                                new PartitionKeyDefinition
                                {
                                    Paths = new Collection<string> {@"/'$v'/ShardingKey/'$v'"}
                                }
                        }, new RequestOptions {OfferThroughput = 1100}).Wait();
\u client.CreateDocumentCollectionAsync(数据库URI,
新文档集
{
Id=documentCollection.Id,
分区键=
新分区键定义
{
路径=新集合{@/'$v'/ShardingKey/'$v'}
}
},新请求选项{OfferThroughput=1100});
请参阅以供参考