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:分片与分区