gpt4 book ai didi

azure - 在 azure 表存储中创建分区键以存储传感器输出数据的最佳方法是什么?

转载 作者:行者123 更新时间:2023-12-02 23:06:59 24 4
gpt4 key购买 nike

我搜索了在 azure 表存储中存储传感器输出数据的最佳实践,但没有得到最佳答案。我目前正在开发一个项目,该项目包括将传感器数据存储到 azure 表存储中。目前我使用分区键作为 Sensor ID 。我每秒都在存储传感器输出。目前正在使用大约 100 个传感器。想象一下每天都在存储大量数据。因此,当我按日期搜索特定传感器数据时,我的网络应用程序性能下降。有没有更好的方法来提高网络应用程序的性能?将传感器 ID 更改为分区键怎么样?代码在这里并不重要。我需要一个合乎逻辑的解决方案。也许这个问题会帮助很多正在处理这种情况的开发人员。

更新

每个传感器提供 10 个不同的输出和日期,即输出日期时间。所以它们位于每个传感器 ID 的同一行。我正在使用日期范围和传感器 ID 获取传感器数据

分区键 - 传感器 ID,RowKey - 日期时间,10 个输出列和输出日期

这是我的代码

var query = TableQuery.GenerateFilterCondition("PartitionKey", QueryComparisons.Equal, sensorID);
var dateFilter = TableQuery.CombineFilters(
TableQuery.GenerateFilterConditionForDate("outputdate", QueryComparisons.GreaterThanOrEqual, Convert.ToDateTime(from)),
TableOperators.And,
TableQuery.GenerateFilterConditionForDate("outputdate", QueryComparisons.LessThanOrEqual, Convert.ToDateTime(to))
);
query = TableQuery.CombineFilters(query, TableOperators.And, dateFilter);
var rangeQuery = new TableQuery<TotalizerTableEntity>().Where(query);

var entitys = table.ExecuteQuery(rangeQuery).OrderBy(j => j.date).ToList();

outputdate表示输出生成时间。这是日期时间。所有输出具有相同的输出时间。

最佳答案

首先,我强烈建议您阅读 Azure Storage Table Design Guide: Designing Scalable and Performant Tables 。这将为您提供有关如何构建数据的很多想法。

现在来看看您当前的实现。我注意到,您在查询中包含 PartitionKey (顺便说一句,这非常好),但随后在查询中添加一个非索引属性 (outputdate),如下所示出色地。这将导致所谓的“分区扫描”。对于较大的表,这会产生问题,因为您的查询将扫描整个分区以查找匹配的 outputdate 属性。

您提到您存储的datetime值是RowKey。假设 RowKey 值与 output 日期的值匹配,我建议在查询中使用 RowKey 而不是此非索引属性。 RowKey(以及PartitionKey)是表中仅有的两个索引属性,因此查询速度相对要快得多。

将日期/时间保存为 RowKey 时,我建议将其转换为刻度 (DateTime.Ticks),然后保存,而不是简单地将日期/时间值转换为字符串。如果您采用这种方法,我建议在此刻度前面添加 0 ,以便所有值的长度相同(执行类似 DateTime.Ticks.ToString("d19"))。

您还可以将RowKey另存为Reverse Ticks,即(DateTime.MaxValue.Ticks - DateTime.Ticks).ToString("d20").这将确保所有最新条目都添加到表的顶部而不是底部。这在您对查询最新记录更感兴趣的情况下会有所帮助。

如果您始终查询特定传感器,则将每个传感器的数据保存在单独的表中可能不会有什么坏处,即每个传感器都有一个单独的表。这将为您释放一把 key 。您可以使用日期/时间值(当前存储为 RowKey)作为 PartitionKey,也可以使用其他值作为 RowKey。此外,它还允许您跨存储帐户进行扩展 - 某些传感器的数据将进入一个存储帐户,而其他传感器的数据将进入另一个存储帐户。您只需在某个地方保存此关系,以便数据到达正确的存储帐户/表。

关于azure - 在 azure 表存储中创建分区键以存储传感器输出数据的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44840687/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com