我们将日志条目存储到Azure表存储中。我们正在存储以下属性:
有大量的日志条目,我们希望根据以下列快速查询日志:
因此我们将rowKey设计为date + guid以保证唯一性。现在我们需要设计PartitionKey。我们需要能够根据tenantId,用户名和严重性进行查询。所以我们需要让他们去PartitionKey。
以下格式:{severity} - {tenantId} - {username}似乎是候选人(密钥的示例是1-500-me@me.com,这意味着严重性:警告,tenantId:500,用户:我@ me.com)。例如,我想查询:
这很好,因为我可以写PartitionKey >= 2 AND PartitionKey < 4
, - 它会减少其他严重性的所有结果。
但是如果我需要为tenantId = 500增强此查询(仅适用于tenantId 500的Debug和Info),我需要编写PartitionKey >= 2-500 AND PartitionKey < 2-501 AND PartitionKey >= 3-500 AND PartitionKey < 3-501
所以看起来可能,但查询变得更复杂。我知道我只能测试它的性能,但问题是是否有更好的RowKey和PartitionKey设计来实现更好的性能。
答案 0 :(得分:4)
推荐的方法是使用不同的PartitionKeys为相同的数据添加多行。例如,如果您有以下数据:
日期:2017-07-31
tenantId: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