我正在将一个非常简单的mongo数据库(夫妇100个条目)迁移到Azure Cosmos DB。我的应用程序基于node-js,所以我使用猫鼬作为映射器。在变得非常简单之前,先定义架构,查询集合并完成。
现在在cosmos db中设置集合时,有人问我分区键和分片键的问题。我可以忽略的第一个,但最后一个是必需的。快速阅读有关该主题的内容并理解它是一种分区(再次,我不需要也不想),我只是选择了_id作为分片键。
当然有些东西行不通。
尽管查找查询工作正常。更新或插入记录失败,以下是错误:
MongoError:命令中的查询必须针对单个分片键
Cosmos db(使用mongo API)向我做为广告替代品。显然不是这种情况,因为我再也不需要担心mongo中的这些事情,尤其是对于这么小的app / db。
那么,我可以以某种方式禁用分片吗?另外,我该如何定义分片键而完全不用担心呢?
欢呼
答案 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,您的成本可能会略高。