Azure Cosmos DB 请求存储过程的分区键

Posted

技术标签:

【中文标题】Azure Cosmos DB 请求存储过程的分区键【英文标题】:Azure Cosmos DB asking for partition key for stored procedure 【发布时间】:2018-02-15 00:40:50 【问题描述】:

我使用 GUID Id 作为我的分区键,当我尝试运行存储过程时遇到问题。要运行存储过程,我需要提供分区键,我不确定在这种情况下我应该提供什么值?请帮忙。

【问题讨论】:

【参考方案1】:

如果注册存储过程的集合是 单分区集合,则事务范围为所有 集合中的文档。如果集合是分区的, 然后存储过程在一个事务范围内执行 单个分区键。然后每个存储过程执行必须 包括与范围对应的分区键值 事务必须在下运行。

你可以参考上面提到here的描述。

正如@Rafat Sarosh 所说,GUID Id 不是合适的partitioning key。根据您的情况,city 可能更合适。您可能需要调整您的数据库partitioning scheme,因为分区键在您定义后无法删除或修改。

我建议您将exporting your data 转至json 文件,然后将import 转至一个由city 通过Azure Cosmos DB Data migration tool 划分的新集合。

希望对你有帮助。


仅作总结:

问题:

执行sql查询文档时,无法提供具体的分区键值。

解决方案:

1.执行查询sql时将EnableCrossPartitionQuery设置为true(存在性能瓶颈)

2.考虑将经常查询的字段设置为分区键。

【讨论】:

我确实了解分区键的概念,但我的第一个场景仍然是一个谜,你是说现在我必须在执行存储过程时通过所有城市组合?这对我来说没有任何意义。 如果你让我知道当城市是我的分区键时我应该如何执行基于跟踪 id 的选择查询,那就太好了。这将是很大的帮助 @Dadwals 让我们在这个聊天室里谈谈:chat.***.com/rooms/165266/jaydadwals 我刚加入聊天室 @JayGong 我有一个场景,比如我必须删除一个具有不同分区键的文档(假设我的分区键是车辆类型),如果我必须删除 10 种类型的车辆,我可以在一次运行还是我需要运行 sp 10 次?【参考方案2】:

例如你的分区键是 /id

你的 cosmos 文档是


  "id" : abcde

存储过程运行时,需要粘贴:abcde值

因此,如果您希望存储过程跨分区运行,则不能 宇宙团队的回答 https://feedback.azure.com/forums/263030-azure-cosmos-db/suggestions/33550159-support-stored-procedure-execution-over-all-partit

【讨论】:

【参考方案3】:

请观看此视频 https://youtu.be/F0wEDdxQER0?t=9m40s

请在此处阅读有关分区键的更多信息:https://docs.microsoft.com/en-us/azure/cosmos-db/partition-data

【讨论】:

让我给出一个场景。假设我有 UpsPackage 作为我的文档,并且根据您的建议,我明智地选择了 City 作为名为 packages 的集合的分区键。现在我的 Web 应用程序提供了通过跟踪 id 搜索包状态的功能。现在在这种情况下我将如何使用分区键进行查询(因为我不知道跟踪 ID 属于哪个城市)? 那为什么不做tracking Id分区键呢? 这就是我最初所做的,我在上面的问题中使用的 GUID。现在的问题是,我有一个需要每周运行的 proc 删除所有(打包)城市等于说“纽约”的文档。现在要运行 proc 它需要一个分区键。那我现在该怎么办? 更新了我的答案,请看视频。 HTH 谢谢拉法特。该视频很有帮助。

以上是关于Azure Cosmos DB 请求存储过程的分区键的主要内容,如果未能解决你的问题,请参考以下文章

Azure Cosmos DB - '请求率很大。删除项目时可能需要更多请求单位的错误

Azure Cosmos DB 分区键 - 主键是不是可接受?

Azure Cosmos DB 中托管的 MongoDB:分片与分区

Azure C#,过滤存储在cosmos DB中的原始数据(通过功能URL显示)

Azure Cosmos DB 知识整理

Azure Cosmos DB 知识整理