如何为Mongo API禁用Cosmos DB分片密钥

时间:2019-02-18 09:11:16

标签: azure-cosmosdb sharding azure-cosmosdb-mongoapi

我正在将一个非常简单的mongo数据库(夫妇100个条目)迁移到Azure Cosmos DB。我的应用程序基于node-js,所以我使用猫鼬作为映射器。在变得非常简单之前,先定义架构,查询集合并完成。

现在在cosmos db中设置集合时,有人问我分区键和分片键的问题。我可以忽略的第一个,但最后一个是必需的。快速阅读有关该主题的内容并理解它是一种分区(再次,我不需要也不想),我只是选择了_id作为分片键。

当然有些东西行不通。

尽管查找查询工作正常。更新或插入记录失败,以下是错误:

  

MongoError:命令中的查询必须针对单个分片键

Cosmos db(使用mongo API)向我做为广告替代品。显然不是这种情况,因为我再也不需要担心mongo中的这些事情,尤其是对于这么小的app / db。

那么,我可以以某种方式禁用分片吗?另外,我该如何定义分片键而完全不用担心呢?

欢呼

3 个答案:

答案 0 :(得分:0)

  

1。我可以以某种方式禁用分片吗?

基于Mongo official document中的语句,无法实现。

  

MongoDB没有提供任何方法来停用集合的分片   在调用shardCollection之后。此外,在shardCollection之后,   您不能更改分片键或修改用于   您的分片索引。

因此,您无法停用或禁用分片键。

  

2。或者,如何定义分片键而不用担心它呢?

根据此link,当您对集合使用插入/更新操作时,可以在架构中设置分片键选项。

new Schema({ .. }, { shardKey: { tag: 1, name: 1 }})

请注意,猫鼬不会为您发送shardcollection命令。您必须自己配置分片。

顺便说一句,将_id设置为分片键可能不是一个合适的决定。您可以从here中找到有关选择分片密钥的一些建议。如果要更改分片密钥或仅删除分片密钥,请参考这种情况:How to change the shard key

答案 1 :(得分:0)

每个集合都必须有一个分区键,并且您无法禁用此要求。将文档插入您的集合而没有指向分区键的字段会导致错误。如文档中所述:

  

分区键用于自动在多个分区之间分区数据   多台服务器以实现可伸缩性。选择具有以下内容的JSON属性名称:   广泛的价值,并可能具有均匀分布的访问权限   模式。

答案 2 :(得分:0)

您可以创建一个CosmosDB集合,最大固定存储为10GB。在这种情况下,不必拆分集合,因为存储不可扩展,并且您不会收到来自CosmosDB的错误。但是,由于最低吞吐量为400,您的成本可能会略高。