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

问题描述 投票:2回答:2

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

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

当然有些东西不起作用。

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

MongoError:查询命令必须以单个分片键为目标

Cosmos db(使用mongo API)作为替代品广告给我。显然并非如此,因为我从来不需要担心mongo中的这类事情,特别是对于如此小规模的app / db。

那么,我可以以某种方式禁用分片吗?或者,我如何定义分片键并且不用担心它一直在前进?

干杯

azure-cosmosdb sharding azure-cosmosdb-mongoapi
2个回答
-1
投票

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

根据Mongo official document的陈述,它无法实施。

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

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

2.或者,我如何定义分片键而不用担心它一直在前进?

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

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

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

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


0
投票

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


-1
投票

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

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

© www.soinside.com 2019 - 2024. All rights reserved.