Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/azure/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Azure表分区策略_Azure_Nosql_Scalability_Azure Table Storage - Fatal编程技术网

Azure表分区策略

Azure表分区策略,azure,nosql,scalability,azure-table-storage,Azure,Nosql,Scalability,Azure Table Storage,我正试图提出一种基于日期时间的分区键策略,这种策略不会导致最佳实践指南中经常描述的仅追加写入瓶颈 基本上,如果按YYYY-MM-DD之类的方式进行分区,那么某一天的所有写入操作都将以相同的分区结束,这将降低写入性能 理想情况下,分区键甚至应该将写操作分发到尽可能多的分区 为了在仍然基于日期时间值的情况下实现这一点,我需要想出一种方法来分配日期行值的存储桶的数量,其中存储桶的数量是每个时间间隔的预定数量,比如说每天50个。将日期行分配给bucket应该尽可能随机,但对于给定的值总是相同的。这样做的

我正试图提出一种基于日期时间的分区键策略,这种策略不会导致最佳实践指南中经常描述的仅追加写入瓶颈

基本上,如果按YYYY-MM-DD之类的方式进行分区,那么某一天的所有写入操作都将以相同的分区结束,这将降低写入性能

理想情况下,分区键甚至应该将写操作分发到尽可能多的分区

为了在仍然基于日期时间值的情况下实现这一点,我需要想出一种方法来分配日期行值的存储桶的数量,其中存储桶的数量是每个时间间隔的预定数量,比如说每天50个。将日期行分配给bucket应该尽可能随机,但对于给定的值总是相同的。这样做的原因是,在给定原始日期时间值的情况下,我需要始终能够获得正确的分区。换句话说,这就像一个散列

最后,也是关键的一点,我需要分区键在某种聚合级别上是连续的。因此,虽然给定时间间隔(比如1天)的DateTime值将随机分布在X个分区键上,但当天的所有分区键都将在可查询的范围内。这将允许我查询所有行的聚合间隔,然后按DateTime值对它们进行排序,以获得正确的顺序


想法?这一定是一个已经解决的众所周知的问题。

使用日期时间戳的毫秒分量mod 50怎么样。这将使您在一天中随机分布,值本身将是连续的,并且您可以根据原始时间戳方便地计算未来的PartitionKey?

要添加到Eoin的答案中,下面是我用来模拟其解决方案的代码:

   var buckets = new SortedDictionary<int,List<DateTime>>();
   var rand = new Random();

   for(int i=0; i<1000; i++)
   {
          var dateTime = DateTime.Now; 
          var bucket = (int)(dateTime.Ticks%53);
          if(!buckets.ContainsKey(bucket))
                 buckets.Add(bucket, new List<DateTime>());

          buckets[bucket].Add(dateTime);
          Thread.Sleep(rand.Next(0, 20));
   }
var bucket=new SortedDictionary();
var rand=new Random();

对于(int i=0;我没有遇到这样的问题。但是你提出的解决方案听起来很有道理。只是好奇,你不能将datetime值保留为行键吗?这会一直产生唯一的行,并使搜索最快?行键必须是不同的值,因为在这种情况下日期/时间不是唯一的。我非常喜欢这个想法。J我们将继续讨论这个问题,看看是否有其他建议。为什么是53个桶只是出于好奇?我只是在玩不同的素数。我想这可能会使桶之间的分布有所不同。