Azure Cosmos DB使用路径对SQL API中的数据进行分区和索引
我正在向Azure cosmos DB收集物联网数据。我知道cosomosdbsqlapi是通过路径自动索引的。我在每个文档中有大约150个传感器,大多数sql查询都是 设备ID已经是分区键 从c中选择c.sensorVariable,其中c.DeviceId='dev1'和c.time=date1' {“设备ID”:“dev1',“时间”:123333,“传感器1”:20,“传感器2”:40} 我将获取各种传感器数据,但所有查询都取决于deviceId和时间(在Unix时间戳中) 是否可以索引deviceID和time上的数据,并排除同样位于同一路径/中的其他键 默认情况下用于收集Azure Cosmos DB使用路径对SQL API中的数据进行分区和索引,azure,azure-cosmosdb,azure-cosmosdb-sqlapi,Azure,Azure Cosmosdb,Azure Cosmosdb Sqlapi,我正在向Azure cosmos DB收集物联网数据。我知道cosomosdbsqlapi是通过路径自动索引的。我在每个文档中有大约150个传感器,大多数sql查询都是 设备ID已经是分区键 从c中选择c.sensorVariable,其中c.DeviceId='dev1'和c.time=date1' {“设备ID”:“dev1',“时间”:123333,“传感器1”:20,“传感器2”:40} 我将获取各种传感器数据,但所有查询都取决于deviceId和时间(在Unix时间戳中) 是否可以索引
"includedPaths": [
{
"path": "/*",
"indexes": [
{
"kind": "Range",
"dataType": "Number",
"precision": -1
},
{
"kind": "Range",
"dataType": "String",
"precision": -1
},
{
"kind": "Spatial",
"dataType": "Point"
}
]
}
],
我觉得数据类型字符串应该有散列类索引而不是范围索引吗?这是什么精度:-1
在Azure cosmos DB doc示例中,我看到字符串的精度为3,我不明白为什么
如果我有100台设备,并且每隔一级放置数据,那么哪种类型的索引更好
是否可以索引deviceID和time上的数据并排除其他数据
也在同一路径中的关键点
对。您可以通过包含路径
和排除路径
自定义索引策略
例如:
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);
请参阅更多详情
这个精度是多少
在Azure cosmos DB doc示例中,我看到字符串的精度为3,我不明白为什么
基于:
对于散列索引,字符串和数字的值都在1到8之间变化。默认值为3。对于范围索引,此值可以是-1(最大精度)。字符串或数字值的精度可以在1到100(最大精度)之间变化
你可以专注于此来做出选择
如果我有100台设备,并且每秒放置一次数据,那么
索引更好吗
很难说哪种索引模式是最佳选择。它应该考虑到一致性级别和您对读写性能的要求。你可以参考这个。嗨,我的回答对你有帮助吗?部分是Jay,但它有助于获得知识谢谢你的回答。我观察到的另一件事是{“datapoint1”:23,“datapoint2”:20,“datapoint3”:45}就像我有150个传感器一样{“keyDataPoint”:22,“Data”:{“datapoin1”,“datapoint2”…}如果我保持上述格式的数据并将数据索引到一个级别,这将提高性能。@AmjathKhan感谢您的分享。那么,还有什么问题吗?我会像我分享的那样测试它。谢谢你,你帮了我这么多。@AmjathKhan嗨,现在有什么进展吗?我的回答对你有帮助吗?