Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Azure cosmosdb 在Azure Cosmos DB中,我是否需要将分区键添加到我的查询where子句中?_Azure Cosmosdb - Fatal编程技术网

Azure cosmosdb 在Azure Cosmos DB中,我是否需要将分区键添加到我的查询where子句中?

Azure cosmosdb 在Azure Cosmos DB中,我是否需要将分区键添加到我的查询where子句中?,azure-cosmosdb,Azure Cosmosdb,我在Azure Cosmos DB中收集了iot消息(称为DeviceEvents)。分区键是应用程序id。我想按设备id进行查询(每个设备只属于一个应用程序)。我有一个这样的问题 SELECT VALUE root FROM root WHERE root["ApplicationId"] = 69 AND root["DeviceId"] = 2978 AND root["TimeStamp"] >= &quo

我在Azure Cosmos DB中收集了iot消息(称为DeviceEvents)。分区键是应用程序id。我想按设备id进行查询(每个设备只属于一个应用程序)。我有一个这样的问题

SELECT VALUE root 
FROM root 
WHERE root["ApplicationId"] = 69 AND root["DeviceId"] = 2978 
     AND root["TimeStamp"] >= "2021-01-30T20:30:05.1635579Z" 
     AND root["TimeStamp"] <= "2021-02-19T20:30:05.1635969Z" 
ORDER BY root["TimeStamp"] DESC OFFSET 0 LIMIT 30
所以我的问题是

  • 查询中是否需要分区键
  • 我需要索引定义中的分区键吗

  • 导致查询统计数据混乱的原因是数据量太小,无法提供有意义的结果

    对于少量数据(约20GB或更少),您将仅位于单个物理分区上。在同一物理分区上,跨分区查询的运行速度与分区查询一样快

    当数据库增长(扩展)时,事情开始爆炸。如果您将数据库设计为具有大量跨分区查询,那么根据设计,您的数据库将无法扩展。因此,您肯定需要(或者应该尽可能多地尝试)在查询中使用分区键,特别是在大容量查询中

    我还将在升序和降序复合索引中添加时间戳


    您提到的另一件事是,每个设备都属于同一个applicationId。如果是这种情况,那么您的容器不能增长超过20GB。如果此应用程序中的每个设备的applicationId为69,则应重新设计此容器并找到新的分区密钥。如果您的查询总是按设备Id进行的,那么这将是一个更好的分区键。

    谢谢,我怀疑这一点,但需要再次确认。我现在意识到我说错了。我的意思是每个设备只属于一个应用程序id,而不是每个设备都属于同一个应用程序id。我在选择分区键时考虑了很多,我确实有一些查询,这些查询可以从属于同一应用程序的多个设备获取事件。我也有很多申请。据推测,这些设备将相对均匀地分布。
    SELECT VALUE root 
    FROM root 
    WHERE root["DeviceId"] = 2978 
         AND root["TimeStamp"] >= "2021-01-30T20:30:05.1635579Z" 
         AND root["TimeStamp"] <= "2021-02-19T20:30:05.1635969Z" 
    ORDER BY root["TimeStamp"] DESC OFFSET 0 LIMIT 30
    
    "compositeIndexes": [
            [
                {
                    "path": "/DeviceId",
                    "order": "ascending"
                },
                {
                    "path": "/TimeStamp",
                    "order": "descending"
                }
            ]