我有一些软件可以在很长一段时间内收集数据,每秒大约200个读数。它使用SQL数据库。我希望使用Azure将大量旧的“归档”数据移动到。
该软件使用多租户类型的架构,因此我计划为每个租户使用一个Azure表。每个租户可能正在监控10-20个不同的指标,因此我计划使用指标ID(int)作为分区键。
由于每个指标每分钟只有一个读数(最大值),我计划使用DateTime.Ticks.ToString(“d19”)作为我的RowKey。
我对这将如何扩展缺乏一点了解;所以希望有人能够解决这个问题:
为了提高性能,Azure会/可能会按分区键分割我的表,以保持良好和快速。在这种情况下,这将导致每个度量标准一个分区。
但是,我的rowkey可能代表大约5年的数据,所以我估计大约250万行。
Azure是否足够聪明,然后根据rowkey进行拆分,还是我在设计未来的瓶颈?我知道通常不会过早地进行优化,但是像Azure这样的东西看起来并不像平时那么明智!
寻找Azure专家,让我知道我是否在正确的位置,或者是否应该将我的数据划分为更多的表格。
答案 0 :(得分:17)
很少有评论:
除了存储数据之外,您可能还想了解如何检索数据,因为这可能会大大改变您的设计。您可能想问自己的一些问题:
(DateTime.MaxValue.Ticks - DateTime.UtcNow.Ticks).ToString("d19")
。此外,由于PartitionKey是一个字符串值,您可能希望将int
值转换为string
值并添加一些“0”,以便所有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。
<强>更新强> 根据您在下面的评论和上面的一些信息,让我们尝试做一些数学运算。这基于此处发布的最新可伸缩性目标:http://blogs.msdn.com/b/windowsazurestorage/archive/2012/11/04/windows-azure-s-flat-network-storage-and-2012-scalability-targets.aspx。文档说明:
单表分区 - 表分区是a中的所有实体 表具有相同的分区键值,通常表有很多 分区。单个表分区的吞吐量目标是:
- 每秒最多2,000个实体
- 注意,这适用于单个分区,而不是单个表。因此,一个具有良好分区的表,可以处理最多 20,000个实体/秒,这是所描述的整体帐户目标 上方。
现在您提到您有10到20个不同的度量标准点,对于每个度量标准点,您每分钟最多会写入1条记录,这意味着您将最多编写20个实体/分钟/表,这是在2000实体/秒的可扩展性目标下。
现在问题仍然是阅读。假设用户每个分区最多可读取24小时的数据(即24 * 60 = 1440点)。现在假设用户获得所有20个指标的数据1天,那么每个用户(因此每个表)将获取最多28,800个数据点。我想这个问题就是你每秒可以获得多少这样的请求来达到这个阈值。如果您能够以某种方式推断这些信息,我认为您可以就架构的可扩展性得出一些结论。
我还建议您观看此视频:http://channel9.msdn.com/Events/Build/2012/4-004。
希望这有帮助。