8

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

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

当然有些东西是行不通的。

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

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

Cosmos db(使用 mongo API)被广告给我作为替代品。显然情况并非如此,因为我从不需要担心 mongo 中的这些事情,尤其是对于这样一个小规模的应用程序/数据库。

那么,我可以以某种方式禁用分片吗?或者,我如何定义分片键而不用担心它?

干杯

4

3 回答 3

1

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

于 2019-08-14T14:44:42.763 回答
0

1.我能以某种方式禁用分片吗?

根据Mongo官方文档中的说法,无法实现。

在调用 shardCollection 之后,MongoDB 没有提供停用集合分片的方法。此外,在 shardCollection 之后,您无法更改分片键或修改分片键索引中使用的任何字段的值。

因此,您不能停用或禁用分片键。

2.或者,我怎样才能定义分片键而不用担心它?

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

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

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

顺便说一句,设置_id为分片键可能不是一个合适的决定。你可以从这里找到一些关于选择 shard key 的建议。如果你想更改 shard key 或者只是删除 shard key,请参考这个案例:如何更改 shard key

于 2019-02-19T02:35:49.010 回答
-2

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

分区键用于在多个服务器之间自动分区数据以实现可扩展性。选择具有广泛值并且可能具有均匀分布的访问模式的 JSON 属性名称。

于 2019-03-13T13:27:33.067 回答