Azure Cosmos DB 中托管的 MongoDB : Sharding vs partitioning

标签 mongodb azure-cosmosdb partitioning sharding mongodb.driver

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

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

为了能够处理 future 数据量的增长(大小和性能),我希望对我的集合进行分片。据我了解,Cosmos DB 使用的策略是使用分区键进行分区,但由于我们使用 MongoDB.Driver,我无论如何都找不到在我的查询中指定分区键。

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

因此,我的猜测是分片是可行的方法(因为 partionkeys 是 Cosmos 的一项功能),但我无法让它发挥作用。

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 实例中启动和运行分片?

最佳答案

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

您可以在 https://learn.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/

相关文章:

mongodb - 如何存储时间戳? CreatedOn 是否有自动字段

azure - cosmosdb 是否更新删除记录,即使只有单个字段更改

mysql - SQL - 返回分区的较大者

SQL Server 分区。为明年创建新分区

mongodb - 在 MongoDB 中对集合中的记录进行分区

java - 完成 Morphia/MongoDB 示例代码

mongodb - 在 mongoimport --jsonArray 上的子文档上创建 _id

python - 如何使用 pymongo 备份和恢复 MongoDB?

c# - Gremlin,如何获取帖子和所有评论以及评论上的嵌套评论,有点像 reddit。在 C# 中

使用存储过程的 Azure DocumentDB 分页?