我在 Azure SQL 中有一个巨大的订单表。我有一个布尔字段“IsOrderActive”来分隔热订单和冷订单。是否可以使用 Azure SQL 自动将冷数据传输到单独的数据库?
4 回答
您是指 SQL Server Stretch Database to Azure 吗?看看这个https://www.mssqltips.com/sqlservertip/5526/how-to-setup-and-use-a-sql-server-stretch-database
完成所需任务的一种方法是使用 T-SQL 命令将订单表分成两个,然后使用 SSMS 在不同的数据库(不同的服务器)中传输带有冷数据的表。
请按照我完成的复制步骤进行操作。
- 创建表
create table hotcoldtable (orderID int, IsOrderActive char(3))
- 将演示数据插入表中
insert into hotcoldtable
values (1,'yes')
,(2,'no')
,(3,'yes')
,(4,'yes')
,(5,'no')
,(6,'no')
,(7,'yes')
- 使用以下命令将表划分为冷数据表和热数据表
冷数据表——select OrderID, IsOrderActive into coldtable from hotcoldtable where IsOrderActive = 'no'
热点数据表——select OrderID, IsOrderActive into coldtable from hotcoldtable where IsOrderActive = 'yes'
您可以在数据库中看到两个新表。
- 在 SQL Server Management Studio (SSMS) 中,登录到您的 Azure SQL Server。填写详细信息,然后单击连接。
- 左键单击您有订单表的数据库名称,然后单击生成脚本...
- 选择选择特定数据库对象并标记要为其创建脚本的对象,如下图所示。
- 设置以下设置。
- 查看详细信息,然后单击下一步。这将生成您的脚本。
转到保存脚本的位置。在任何编辑器中打开文件并复制脚本。
- 现在在 Azure 门户中,转到要传输冷数据表的数据库。转到查询编辑器并将复制的脚本粘贴到空白处。运行脚本,您将获得该数据库中的表,如下所示。
对于可以将冷订单放在具有自动暂停和自动恢复功能的 Azure 无服务器数据库上的场景,数据库分片似乎是一种可能的解决方案,您可以在不使用它们时进行保存,只需为使用的存储付费。Azure SQL 数据库在此处提供了大量工具来支持分片。
如果您有兴趣通过归档冷数据来节省空间,您可以在相同或不同的数据库中使用两个单独的表。需要注意的是,您应该为归档(冷)表使用列存储索引。根据您的数据,您应该能够实现30%-60%的数据压缩。
但是,如果不运行一些查询,就无法做到这一点。但它可以使用 Azure 工作簿实现自动化。
我构建了一种类似的功能,帮助我在 Azure SQL 数据库中节省了58% 的空间。如果您觉得这可能会有所帮助,请发表评论。我可以分享更多关于这个的细节。