【问题标题】:The fastest way to purge/copy Azure Storage Table data to SQL Azure?将 Azure 存储表数据清除/复制到 SQL Azure 的最快方法是什么?
【发布时间】:2013-02-21 10:55:25
【问题描述】:

我有这些工作人员角色正在聚合传入数据并将总数存储在 Azure 存储表中。我需要将此数据清除/复制(在指定的时间间隔内)到 SQL Server 以进行报告。我正在批量清除大约 1000 行。带有选择/插入/更新的简单循环将需要很长时间。

任何想法如何最有效地做到这一点?谢谢!

【问题讨论】:

  • 当您说清除时,您的意思是已删除吗?因为如果您想从 ATS 中删除某些内容到 SQL,那么您的问题没有意义
  • 对不起,我的意思是复制了最新的报告数据:)
  • @Igorek - 你有解决方案吗?

标签: azure azure-sql-database azure-table-storage


【解决方案1】:

所有数据都在明确定义的分区中吗?例如,分区键“A”中有 1000 个实体,分区键“B”中有 1000 个实体。如果是这样,那么您应该能够从特定分区中选择所有记录。根据记录的数量,您可能必须处理延续令牌(您只能获取每个请求的最大数量并使用延续令牌来获取剩余记录)。

使用分区键也可能是更新批次(在事务中)的好方法。

【讨论】:

  • 是的,数据分区很好,我知道这部分会很快,但是到 SQL 数据库的单个事务呢?循环中的每行一个不是非常理想的。想法?
  • 您可以使用接受表值参数的存储过程。这将是一个数据库调用,并且可能每批插入一个。msdn.microsoft.com/en-us/library/bb510489.aspx
  • @knightpfhor - 感谢您的建议,我会探索这条路线!
【解决方案2】:

您可以尝试在本地下载所有数据,然后将它们插入 SQL。

How can I back up my Windows Azure table storage?

【讨论】:

    【解决方案3】:

    一个多月前我一直在寻找类似的解决方案,发现最快的方法是使用我自己的代码——从表存储中批量读取并插入到 sql。有用的一件事是在 sql 导入表中临时记录 PartitionKey + RowKey,这样当我的导入失败时,我可以安全地从上次成功的位置重新启动它。

    RedGate 和其他人有一些工具允许您从表存储中检索所有数据,但据我所知 - 他们将其转储到文件中 - 而不是 SQL。

    【讨论】:

    • 这里有一些好的建议!您是如何将行插入 SQL 数据库的?一个接一个或类似表值参数的东西,如上所述?我需要速度,我将每秒处理 1000 条记录。
    【解决方案4】:

    首先介绍最简单的部分。一旦您将来自 ATS 的数据存储在内存中,您就可以使用 SqlBulkCopy 非常快速地将大量行插入 SQL 服务器(它的工作方式类似于 BCP,但来自 .NET)。

    现在,最困难的部分是快速从 ATS 获取数据。我对您的 Pkey/Rkey 架构一无所知。不过,有几点需要考虑:

    1) 使用单个 PartitionKey 和 RowKey 范围对 ATS 执行查询是最快的。如果您的查询不包含 RowKey 上的条件,即使您的行数少于 1000 并且指定了 PartitionKey,您也可能会遇到延续标记

    2) 如果您需要从 ATS 获取大量数据并将工作拆分为一组单独且性能良好的查询,请考虑将您的查询分配到队列消息中,然后让多个处理器并行处理每个查询

    3) 清除可能很有趣。您可以使用批处理事务一次清除 100 个实体,因此,如果您的个人查询允许,在将数据处理到 sql server 后,您可以使用相同的内存中实体,并为每个分区键一次清除 100 个实体(这会比较快)。或者,如果可以,您可以将表拆分为多个按某个日期或其他键分区的表,并通过一次删除一个表来删除数据。例如,如果您有一个需要移动到 SQL 的大型 Orders 表,而不是只有一个 Orders 表,而是创建每月的 Orders 表:Orders201301..thru..Orders2xxx_12... 并且一旦您导入一个月的订单,只需通过一个命令即可终止该表(运行速度非常快)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-01-17
      • 2018-01-27
      • 2016-08-29
      • 2020-09-30
      • 1970-01-01
      • 1970-01-01
      • 2015-02-25
      • 2015-12-17
      相关资源
      最近更新 更多