如何禁用 Mongo API 的 Cosmos DB 分片键

How to disable Cosmos DB shard key for Mongo API

我正在将一个非常简单的 mongo 数据库(一对 100 个条目)迁移到 Azure Cosmos DB。我的应用程序基于 node-js,所以我使用 mongoose 作为映射器。之前真的很简单,定义schema,查询集合,完成。

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

当然有些东西不行。

虽然查找查询工作得很好。更新或插入记录失败,错误如下:

MongoError: query in command must target a single shard key

Cosmos db(带有 mongo API)被宣传为替代品。显然情况并非如此,因为我从来不需要担心 mongo 中的此类事情,尤其是对于如此小的规模 app/db。

那么,我可以通过某种方式禁用分片吗?或者,我怎样才能定义分片键并且完全不用担心它呢?

干杯

1.can I disable sharding somehow?

根据Mongo official document中的说法,无法执行。

MongoDB provides no method to deactivate sharding for a collection after calling shardCollection. Additionally, after shardCollection, you cannot change shard keys or modify the value of any field used in your shard key index.

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

2.Alternatively, how can I define shard key and not worry about it at all going forward?

根据此 link,当您对集合使用 insert/update 操作时,您可以在模式中设置分片键选项。

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

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

顺便说一句,将 _id 设置为分片键可能不是一个合适的决定。您可以从 here.If you want to change the shard key or just remove the shard key,please refer to this case:How to change the shard key

中找到有关选择分片键的一些建议

要求每个集合都有一个分区键,您无法禁用此要求。在没有以分区键为目标的字段的情况下将文档插入您的集合会导致错误。如文档中所述:

The Partition Key is used to automatically partition data among multiple servers for scalability. Choose a JSON property name that has a wide range of values and is likely to have evenly distributed access patterns.

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