SQL Server 2016 提供了一个新特性“伸展数据库( stretch database )”,使它可以将“热数据(hot data)”存储在本地,并向应用程序提供本地服务器性能,而将不会发生任何变化的老数据存储在云上。该特性的基本应用场景是,一个表包含了少量用户平常关心的热数据和大量应该移到离线归档但用户仍然希望能够查询的老数据。
当启用伸展数据库特性时,它会另外创建一个托管在 Azure 中的数据库。然后,将一个表标记为“stretch”,SQL Server 将自动开始将数据迁移到云上。当前,只有“archive table”模式可用,即假定数据库在操作一张历史表,并迁移所有的行。“archive row”模式目前尚未发布,它会使用 WHERE 子句确定需要归档的行。常见的场景包括超过一年的行,或者有标记标明不再使用的行(比如已完成的订单)。
查询伸展表的 SQL 与查询普通表所需的 SQL 完全相同。查询执行引擎将负责在本地服务器和基于 Azure 的服务器之间分发查询,该过程是自动完成的。这意味着,用户可以在数据库上启用伸展功能,而不需要修改使用它的应用程序。
当使用这种模型时,备份和恢复需要相应地变化。普通备份只会包含本地管理的数据,包含位于伸展数据库上的数据的完整备份需要不同的过程。
伸展数据库有一些局限,它不支持下面的列类型:
- filestream
- timestamp
- sql_variant
- XML
- geometry
- geography
- hierarchyid
- CLR 用户定义类型(UDT)
而且,伸展表不支持如下特性:
- 列集
- 计算列
- 检查约束
- 引用表的外键约束
- 默认约束
- XML 索引
- 全文索引
- 空间索引
- 聚簇列存储索引
- 索引引用表的视图
评论