2013-04-04 43 views
6

我有一些软件可以在很长一段时间内收集大约200个读数/秒的数据。它为此使用了一个SQL数据库。我期待使用Azure将大量旧的“归档”数据移至。Azure Table Storage分区设计

该软件使用多租户类型体系结构,因此我计划为每个租户使用一个Azure表。每个租户可能正在监控10-20个不同的度量标准,因此我打算将度量标识(int)用作分区密钥。由于每个指标每分钟只有一个读数(最大值),因此我计划使用DateTime.Ticks.ToString(“d19”)作为我的RowKey。

我对这将如何缩放比较缺乏一点理解;所以希望有人能够清除它:

对于性能Azure可能会/可能会通过partitionkey拆分我的表以保持事情的快捷。在这种情况下,这将导致每个指标一个分区。

但是,我的rowkey可能会代表大约5年的数据,所以我估计大约有250万行。

Azure是否足够聪明,然后基于rowkey进行拆分,或者我正在设计未来的瓶颈?我通常不会过早地优化,但是像Azure这样的东西似乎不像平常那​​样明智!

寻找一位Azure专家,让我知道我是否在正确的路线上,或者我是否应该将数据划分到更多的表中。

回答

16

几点意见:

除了存储数据,你可能也想看看你会怎么要检索的数据可能会大大改变你的设计。您可能想问自己的一些问题:

  • 当我检索数据时,我是否总是检索特定指标和日期/时间范围的数据?
  • 或者我需要检索特定日期/时间范围内所有指标的数据?如果是这种情况,那么你正在看全表扫描。显然你可以通过做多个查询(一个查询/ PartitionKey)来避免这种情况。
  • 我需要先看到最新的结果,或者我并不在乎。如果它是以前的,那么你的RowKey策略应该是类似(DateTime.MaxValue.Ticks - DateTime.UtcNow.Ticks).ToString("d19")

此外,由于PartitionKey是一个字符串值,您可能想int值转换为string值与一些“0” prepadding使你的所有的ID出现在顺序,否则你会得到1,10,11, ...,19,2,...等。

据我所知,Windows Azure只根据PartitionKey而不是RowKey对数据进行分区。在分区内,RowKey充当唯一键。 Windows Azure会尝试在同一个节点上保留同一个PartitionKey的数据,但由于每个节点都是物理设备(因此具有大小限制),因此数据也可能会流向另一个节点。

您可能想要从Windows Azure存储团队阅读此博客文章:http://blogs.msdn.com/b/windowsazurestorage/archive/2010/11/06/how-to-get-most-out-of-windows-azure-tables.aspx

UPDATE 根据您的意见以及上面的一些信息,让我们尝试做一些数学。这是基于这里公布的最新可扩展性目标:http://blogs.msdn.com/b/windowsazurestorage/archive/2012/11/04/windows-azure-s-flat-network-storage-and-2012-scalability-targets.aspx。该文件指出:

单桌隔断表分区都在一个 表中的实体具有相同分区键值,并且通常表有很多 分区。单个表分区的吞吐量目标是:每秒

    • 最高2,000实体,这是单个分区,而不是一个单一的表。因此,具有良好分区的表格可以处理高达20000个实体/秒,这是上面描述的总体账户目标 。
  • 现在你提到你已经10 - 20个不同的度量点,并为每个度量点,你会是每分钟最多1分的记录,这意味着你会写一个最多20个实体的写/分钟/表格,远低于2000个实体/秒的可扩展性目标。

    现在问题仍然是阅读。假设用户每个分区读取最多24小时的数据(即24 * 60 = 1440分)。现在假设用户获取所有20个指标的数据1天,那么每个用户(因此每个表)将获取最多28,800个数据点。我想你所留下的问题是,每秒钟可以获得多少次这样的请求才能达到该阈值。如果您能以某种方式推断这些信息,我认为您可以对您的架构的可扩展性达成一些结论。

    我也推荐看这个视频:http://channel9.msdn.com/Events/Build/2012/4-004

    希望这会有所帮助。

    +0

    谢谢您的意见。可能的用例是用户仅为单个度量请求一系列数据。这个范围很小(可能是一个24小时的窗口)。如果需要多个度量标准,则可以通过多个查询完成。 – KingCronus 2013-04-04 11:31:09

    +0

    此外,在这种情况下,prepadding并不需要,因为指标不需要按照特定的顺序,但感谢您的提升。 – KingCronus 2013-04-04 11:31:58

    +0

    上面更新了我的答案。希望这可以帮助。 – 2013-04-04 17:50:37