我可以在Azure表中使用DATE作为分区键吗?

时间:2015-06-02 07:12:28

标签: c# azure azure-table-storage

我想为事务创建Azure表,我想将DATE用作分区键。我可以在Azure表中使用DATE作为分区键吗?如果我需要在我的代码中使用它,我是否需要将日期转换为字符串反之亦然?

3 个答案:

答案 0 :(得分:4)

由于PartitionKey属性的类型为String,因此您需要将日期/时间转换为字符串。请再次请注意,实体按字母顺序排在PartitionKey(和RowKey),您希望确保在转换为字符串时,以某种方式格式化,以便按所需顺序返回实体。我建议使用yyyy-MM-ddTHH:mm:ss格式将它们转换为字符串,以便始终附加新订单。

答案 1 :(得分:4)

答案是肯定的,但是日期更常用作RowKey值。分区键用于对相关的行进行逻辑分组。这导致它们存储在同一本地区域中,即使它们可能分布在多个虚拟机上。通过这样做,您可以在检索它们时获得高性能,更重要的是,如果它们共享一个分区,您可以在事务中的多个行上执行(插入/更新/删除)。

RowKey虽然不需要在表中是唯一的,但与PartitionKey配对时是唯一的。可以将其视为两列主键。 Rowkey通常是以字符串形式存储的日期类型,2015年1月29日的年度日推荐模式为20150129.

这两个键一起使用可以高速访问表格。如果不使用,则表扫描的结果要慢得多。

使用分区键的更好方法是从系统的某些静态属性生成它。例如,如果每天有1000个气象站不断报告数据,您可以使用stationId作为PartitionKey,将日期作为RowKey。

这还有一个额外的好处,即在分区之间更均匀地组织行,使它们的大小相对相等。这有助于Azure存储更均匀地分布分区,并更好地实现负载平衡。

答案 2 :(得分:2)

你可以像Gaurav Mantri上面提到的那样。但请注意,由于您要设置的“仅附加”模式,这可能会导致性能下降:https://azure.microsoft.com/en-us/documentation/articles/storage-performance-checklist/#subheading28

Azure存储了解您的使用模式,并根据负载自适应地调整分区分布。因此,如果您有多个分区键的负载,那么它可以在内部将这些分区拆分到不同的服务器,以平衡您的负载。但是,如果加载全部在一个分区上,并且该分区会定期更改(就像仅使用附加模式一样),那么自适应负载平衡逻辑将无效。为避免这种情况,如果您的查询模式允许,则应避免使用日期或日期时间作为分区键。