为ST_WITHIN空间查询选择哪个分区键

时间:2017-07-06 11:39:12

标签: azure-cosmosdb

我正在使用移动设备实施物联网解决方案,并想知道Azure Cosmos DB中最佳分区键是什么。我对设备集合的主要询问是哪些设备在特定区域,即: SELECT * FROM MyCollection m WHERE ST_WITHIN(m.Location,{' type':' Polygon',' coordinates':...}}

目前,我使用DeviceID作为分区键,它有大约。 6000个不同的值。 Location属性是否是更好的分区键,因为它在查询中使用?位置是Point。

1 个答案:

答案 0 :(得分:0)

  

我正在使用移动设备实施物联网解决方案,并想知道Azure Cosmos DB中最佳分区键是什么。

很难说什么是最好的分区键。但我们可以从official document获得有关如何选择分区键的建议。 以下是official document的摘录。

  

选择分区键有两个关键注意事项:+

     

查询和事务的边界:您选择的分区键应平衡启用事务使用的需求与跨多个分区键分布实体的要求,以确保可扩展的解决方案。在一个极端情况下,您可以为所有项目设置相同的分区键,但这可能会限制解决方案的可伸缩性。在另一个极端,您可以为每个项目分配一个唯一的分区键,这将是高度可扩展的,但会阻止您通过存储过程和触发器使用跨文档事务。理想的分区键是一种使您能够使用高效查询并且具有足够基数以确保您的解决方案可扩展的分区键。

     

没有存储和性能瓶颈:选择一个允许将写入分布在各种不同值上的属性非常重要。对同一分区密钥的请求不能超过单个分区的吞吐量,并且会受到限制。因此,选择一个不会导致应用程序中存在“热点”的分区键非常重要。由于单个分区键的所有数据必须存储在分区中,因此还建议避免使用具有相同值的大量数据的分区键。