2014-10-09 82 views
0

我正在考虑使用分区键的时间戳来记录消息,以便始终保持它与第一个最新消息的顺序。使用独特的分区键会创建一个范围分区吗?

PartitionKey = String.Format("{0:D19}", DateTime.MaxValue.Ticks - DateTime.UtcNow.Ticks); 

由于密钥不是每次都增加相同的模式,在这种情况下分区仍然会被分组在一个范围分区中吗?

这只是为了记录,不会有更新,只会插入新的,最终可能会删除旧的。要查询的主要属性是日期范围,用户和实体名称(它是在哪里发生的)。

+1

我在你的实现中看到的问题是查询时间将增加你表中的每个条目,因为你将永远不得不进行全表扫描。如果你写了很多日志,它会变得非常缓慢......尝试对你的日志进行分组(例如:当天放置为PartitionKey,并将时间包含在RowKey中或使用user \ entityName作为PartitionKey等)。 Ps这个视频真的帮助我:http://www.microsoftpdc.com/2009/svc09; – 2014-10-09 17:40:24

+0

让用户\ entityName困扰我,因为我们只能在这种情况下对用户进行部分搜索,我将如何仅使用entityName进行搜索? – 2014-10-10 07:40:13

+1

这取决于,你需要找到一个优先事项。我的意思是,让我们说你这样做,如“EntityName_UserName”,你想找到所有的“AAAAA”EntityNames,所以你可以查询一个字符串大于或等于“AAAAA”和小于“AAAAB”...问题那么你将无法为UserName做同样的事情。 – 2014-10-10 07:52:23

回答

0

看看Understanding the Table Service Data ModelDesigning a Scalable Partitioning Strategy for Azure Table Storage - A TableEntity已经有Timestamp属性。由于您没有进行更新,所以时间戳应该足够用于日期范围查询。

+2

我不会推荐查询'Timestamp'属性,因为它会导致全表扫描。 – 2014-10-09 18:12:38

+0

这里的目标是使用唯一可用的索引,分区键和行键。避免全桌跨度。 – 2014-10-10 07:37:38