1

我正在将 IoT 数据收集到 Azure cosmos DB。我知道 COSOMOS DB SQL API 是由 Path 自动索引的。我在每个文档中有大约 150 个传感器,大多数 sql 查询都是

DeviceId 已经是 Partition Key

选择 c.sensorVariable From c where c.DeviceId = 'dev1' AND c.time= date1'

{ “DeviceId”:“dev1”,“时间”:123333,“sensor1”:20,“sensor2”:40}

我将获取各种传感器数据,但我所有的查询都取决于 deviceId 和时间(在 Unix Timestamp 中)

是否可以在 deviceID 和 time 上索引数据并排除也在同一路径 / 中的其他键。

并且默认用于收藏

"includedPaths": [
    {
        "path": "/*",
        "indexes": [
            {
                "kind": "Range",
                "dataType": "Number",
                "precision": -1
            },
            {
                "kind": "Range",
                "dataType": "String",
                "precision": -1
            },
            {
                "kind": "Spatial",
                "dataType": "Point"
            }
        ]
    }
],

我觉得 DataType String 不应该有 Hash 类型的索引而不是 Range 吗?这是什么精度:-1

在 Azure cosmos DB 文档示例中,我看到字符串的精度为 3,我不明白为什么?

如果我有 100 台设备并且每秒钟放置一次数据,那么哪种类型的索引更好?

4

1 回答 1

1

是否可以在 deviceID 和 time 上索引数据并排除也在同一路径中的其他键

是的。您可以通过IncludedPaths和自定义索引策略ExcludedPaths

如 :

var excluded = new DocumentCollection { Id = "excludedPathCollection" };
excluded.IndexingPolicy.IncludedPaths.Add(new IncludedPath { Path = "/*" });
excluded.IndexingPolicy.ExcludedPaths.Add(new ExcludedPath { Path = "/nonIndexedContent/*" });

await client.CreateDocumentCollectionAsync(UriFactory.CreateDatabaseUri("db"), excluded);

请参阅此处的更多详细信息。

这是什么精度:-1

在 Azure cosmos DB 文档示例中,我看到字符串的精度为 3,我不明白为什么?

基于索引数据类型、种类和精度

对于哈希索引,字符串和数字的值都在 1 到 8 之间。默认值为 3。对于 Range 索引,该值可以是 -1(最大精度)。对于字符串或数字值,它可以在 1 到 100(最大精度)之间变化。

你可以专注于这个陈述来做出你的选择。

如果我有 100 台设备并且每秒钟放置一次数据,那么哪种类型的索引更好?

很难说哪种索引模式是最佳选择。它应该与一致性级别和您对读写性能的要求一起考虑。你可以参考这一段

于 2018-11-07T08:05:19.400 回答