【问题标题】:Query execution on azure storage is very slow天蓝色存储上的查询执行非常慢
【发布时间】:2016-04-13 05:39:28
【问题描述】:

我正在尝试查询天蓝色表存储上的时间戳列。我有一个 where 条件,它检查输入值是否大于时间戳值。 azure Timestamp 列不是分区键或行键。我开始知道查询不是分区或行键的列会降低查询执行的性能。当记录越来越多时,我的应用程序非常慢。我试图将时间戳数据移动到分区键数据,但分区键不接受时间戳值,例如“4/13/2016 5:20:03 AM +00:00”。提高查询性能的最佳选择是什么。

【问题讨论】:

    标签: azure azure-table-storage


    【解决方案1】:

    正如您已经提到的,如果查询不包含PartitionKey 和/或RowKey,则查询会很慢,因为表服务正在执行全表扫描。建议使用日期/时间值作为PartitionKey 值。

    我试图将时间戳数据移动到分区键数据但分区 键不接受时间戳值,例如“4/13/2016 5:20:03 AM +00:00"

    这是因为该值包含不允许的字符(https://msdn.microsoft.com/en-us/library/azure/dd179338.aspx --> 请参阅Characters Disallowed in Key Fields 部分)。

    实际上你可以做很多事情来解决这个问题:

    • 您可以将日期/时间值设置为 YYYY-MM-DDThh:mm:ss 格式。
    • 您可以将日期/时间值转换为刻度并在前面添加一些零并将其保存为 PartitionKey。比如:

      PartitionKey Value = YourDateTimeValue.Ticks.ToString("d19");

    如果您希望最近的条目出现在顶部,您可以执行以下操作:

    PartitionKey Value = (DateTime.MaxValue.Ticks - YourDateTimeValue.Ticks).ToString("d19");
    

    您可能还会发现这很有用:https://azure.microsoft.com/en-in/documentation/articles/storage-table-design-guide/

    【讨论】:

    • 在“关键字段中不允许使用的字符”这句话上,我看到一些带有字符的存储表。限制是针对字符还是针对特殊字符?
    猜你喜欢
    • 2012-11-17
    • 2021-12-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多