我们希望将MongoDB用于我们的数据库,并且希望使用MongoDB API以避免“锁定”到Azure Cosmos DB托管。
我们使用.Net Core和MongoDB.Driver程序包(以便能够在本地,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接口(interface),而不是MongoS接口(interface)。因此,您将需要使用db.runCommand而不是“sh”分片命令来创建分片集合。
您可以在https://docs.microsoft.com/en-us/azure/cosmos-db/partition-data#mongodb-api上找到更多详细信息
关于在Azure Cosmos DB中托管的MongoDB : Sharding vs partitioning,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/50967735/