在我们的服务中,我们使用SQL Azure作为主存储,使用Azure表作为备份存储。每天大约30GB的数据被收集并存储到SQL Azure。由于数据从第二天起不再有效,我们希望每晚将数据从SQL Azure迁移到Azure表。
问题是..将数据从Azure迁移到Azure表的最有效方法是什么?
我提出的天真想法是通过使用IDataReader来利用生产者/消费者的概念。也就是说,首先通过执行“select * from TABLE”获取数据读取器并将数据放入队列中。同时,一组线程正在从队列中获取数据,并将它们插入Azure表中。
当然,这种方法的主要缺点(我认为)是我们需要长时间维持打开的连接(可能是几个小时)。
另一种方法是首先将数据从SQL Azure表复制到Windows Azure上的本地存储,并使用相同的生产者/消费者概念。在这种方法中,我们可以在复制完成后立即断开连接。
此时,我不确定哪一个更好,甚至其中任何一个都是一个很好的设计来实现。你能为这个问题建议任何好的设计方案吗?
谢谢!
答案 0 :(得分:0)
我不建议主要使用本地存储,因为
local only
,即只能由创建它的VM访问,从而阻止您扩展解决方案。我喜欢使用队列的想法,但我也看到了一些问题:
我实际上建议在混合中投掷blob storage
。你可以做的是从SQL表中读取一大块数据(比如10000或100000条记录),并将这些数据作为文件保存在blob存储中。根据您希望如何将数据放入表存储中,您可以将数据存储为CSV,JSON或XML格式(如果需要,可以保留数据类型的XML格式)。在blob存储中写入文件后,您可以在队列中写入消息。该消息将包含您刚刚编写的blob的URI。您的工作者角色(处理器)将持续轮询此队列,获取一条消息,从blob存储中获取文件并处理该文件。一旦worker角色处理完文件,您就可以删除该文件和消息。