与CosmosDB猫鼬:让错误'共享吞吐量集合应该有一个分区key`

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

我目前使用node-express连接到MongoDB的一个Mongoose应用程序,并在尝试将其迁移到Azure的宇宙DB。

当我干脆让Mongoose创建数据库,应用程序工作正常,但数据库是使用单独的一个集合RU定价创建。

如果我创建启用共享吞吐量和尝试使用一个新的数据库,我得到的错误Shared throughput collection should have a partition key

我曾尝试更新收集架构,包括像这样的碎片键:

const mongoose = require('mongoose');

module.exports = function() {
  const types = mongoose.Schema.Types;
  const messages = new mongoose.Schema({
    order: { type: types.ObjectId, required: true, ref: 'orders' },
    createdAt: { type: Date, default: Date.now },
    sender: { type: types.ObjectId, required: true, ref: 'users' },
    recipient: { type: types.ObjectId, ref: 'users' },
    text: { type: String, required: true },
    seen: { type: Boolean, default: false },
  }, { shardKey: { order: 1 } });

  return mongoose.model('messages', messages);
};

然而,这是行不通的。

关于如何创建任何想法/使用分区键?或者数据库小,所以如果能够消除对分区键,这也将是罚款的规定。

node.js mongoose azure-cosmosdb azure-cosmosdb-mongoapi
3个回答
2
投票

现在我没有这个问题,所以没有必要,除非你觉得这是正确的接受这一个确切的答案。

到目前为止,我已经找到了最好的解决方案是,这是由于“辟吞吐量”当Azure的控制台创建的数据库被检查。如果您删除并重新创建这个箱子不检查数据库(它的正下方输入数据库名),那么你应该不会再遇到这个错误。


1
投票

当你创造你已经选择采用共享吞吐量的DB的集合可以指定它。

Collection vs Database

如果您使用单独的一个集合的定价,您可以在个人设置集合吞吐量。如果您在使用较小的定价选项,你会得到共享的吞吐量(在数据库级别),这是较少的颗粒,但更便宜。

详情点击此处:https://azure.microsoft.com/en-us/blog/sharing-provisioned-throughput-across-multiple-containers-in-azure-cosmosdb/

Partition keys

如果您使用的共享吞吐量,您需要为您要添加的集合分区ID。

所以 - 创建共享吞吐量的DB(查看下面的复选框)

在此之后,当你尝试添加一个新的文档,你应该能够创建一个分区键。


1
投票

我还没有给你另一种不非常完整的答案。这似乎是,是的,这是必需的,如果您使用的是宇宙的共享/ DB级吞吐量模型使用分区的集合。但事实证明,它可以创建一个CosmosDb收集仅使用MongoDB的线协议分区键(指上一个蓝色的SDK没有依赖性,并且无需预先创建通过Azure的门户网站的每个集合)。

剩下的唯一的缺点是,我不认为这是可以运行通过猫鼬这个命令,它可能要直接通过MongoDB的Node.js的驱动程序运行,但至少它仍然可以从代码中运行。

从MongoDB的外壳:

db.runCommand({shardCollection: "myDbName.nameOfCollectionToCreate", 
               key: {nameOfDesiredPartitionKey: "hashed"}})

这个命令是为了设置一个集合分片键,即可开始分片收集,但在CosmosDb它的工作原理与所需partitionKey已经被设置为创建集合。

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