Azure 表存储 - 用于快速查询的分区键设计



我们将日志条目存储在 Azure 表存储中。我们存储以下属性:

日期
  • (日期时间(
  • 租户 ID (长(
  • 用户名(字符串(
  • 严重性(整数 - 枚举错误 (0(、警告 (1(、信息 (2(、调试 (3((
  • 。其他目前不重要的属性

有大量的日志条目,我们希望根据以下列快速查询日志:

  • 日期(开始/结束(
  • 租户 ID (等于(
  • 严重性(从/到(
  • 用户名(等于(

因此,我们将 rowKey 设计为 date + guid 以保证唯一性。现在我们需要设计分区键。我们需要能够根据租户 ID、用户名和严重性进行查询。所以我想我们需要让他们使用分区键。

以下格式:{严重性}-{租户 ID}-{用户名} 似乎是候选者(键的示例是 1-500-me@me.com 表示严重性:警告,租户 ID:500,用户:me@me.com(。例如,我想查询:

  • 调试和信息严重性

这很好,因为我可以写PartitionKey >= 2 AND PartitionKey < 4, - 它会减少其他严重性的所有结果。

但是,如果我需要增强 tenantId = 500 的此查询(因此仅适用于 tenantId 500 的调试和信息(,我需要编写PartitionKey >= 2-500 AND PartitionKey < 2-501 AND PartitionKey >= 3-500 AND PartitionKey < 3-501

所以这似乎是可能的,但查询变得更加复杂。我知道我只能进行基准测试来测试它的性能,但问题是是否有更好的 RowKey 和 PartitionKey 设计来实现更好的性能。

建议的方法是使用不同的分区键为同一数据添加多行。例如,如果您有以下数据:

日期: 2017-07-31

租户 ID: 3

严重性:2

用户名: me@me.com

以下是数据在表中的存储方式:

PartitionKey    RowKey  date        tenantId    severity    user
----------------------------------------------------------------------
D|2017-07-31    GUID()  2017-07-31  500         2           me@me.com
T|500           GUID()  2017-07-31  500         2           me@me.com
S|2             GUID()  2017-07-31  500         2           me@me.com
U|me@me.com     GUID()  2017-07-31  500         2           me@me.com

因此,当需要查询租户 ID 和严重性时,可以执行以下操作:

PartitionKey eq 'T|500' and severity eq 2

PartitionKey eq 'S|2' and tenant eq 500

相关内容

  • 没有找到相关文章

最新更新