公告:本博客为微软云计算中文博客的镜像博客。部分文章因为博客兼容性问题,会影响阅读体验。如遇此情况,请访问原博客。
SQL Azure vs. SQL Server
概要
SQL Azure Database 是一个来自微软的,基于云的关系型数据库服务。SQL Azure 提供关系型数据库功能来作为公用服务。基于云的数据库解决方案,例如SQL Azure,具有许多优势,包括迅速供应,高成本效益,高可用性和减少日常管理支出。本文比较了SQL Azure Database 和 SQL Server在逻辑管理vs. 物理管理,供应, Transact-SQL 支持,数据存储, SSIS和其他特性和功能方面的异同。
目录
共性和差异
与本地的SQL Server实例类似, SQL Azure 为基于Transact-SQL的数据库访问提供了一个 tabular data stream (TDS)接口。这使得您的数据库应用程序能以使用SQL Server相同的方式来使用SQL Azure 。SQL Azure是一个云端的服务,在管理上跟本地的SQL Server实例有一些小的差异。
。
与本地SQL Server实例不同的是,SQL Azure将逻辑上的管理与物理上的管理分离出来; 您可以继续管理数据库,登陆(login),用户和角色,但是微软会管理和配置物理硬件,例如硬盘,服务器和存储。这样, SQL Azure 不仅 能提供一个大规模的,多租户的数据库服务,还可以提供企业级的可用性、拓展性、安全性和自我修复能力。
由于微软负责所有的物理管理,所以SQL Azure 和本地的SQL Server实例会在管理,服务提供,Transact-SQL 支持,编程模式,和特性方面略有不同。更多详细内容请浏览Guidelines and Limitations (SQL Azure Database).
逻辑管理vs. 物理管理
虽然 SQL Azure在管理数据库的物理资源上发挥积极作用,但是数据库管理员(DBA)仍然在管理基于SQL Azure的应用程序方面有着举足轻重的作用。使用SQL Azure, 数据库管理员要管理创建的schema ,统计,调优索引,优化查询以及管理安全性(登陆(login),用户和角色等) 等。更多安全管理信息请浏览Managing Logins and Users in SQL Azure.
SQL Azure数据库管理与 SQL Server在物理管理方面最大的不同是, SQL Azure 不仅能够自动复制所有数据来提供高可用性,还可以管理负载均衡。当任何一台服务器停止工作的时候,其他的一台有您的数据库备份的正常运行的机器会被切换过来(Failover),这个过程对用户来说是透明的。
为了提供这一层面的物理管理,您不能控制SQL Azure的物理资源。举例来说,您不能指定数据库或索引驻留的物理硬盘,或文件组。因为不能访问计算机的文件系统并且所有的数据都会被自动复制,所以 SQL Server 的备份和恢复命令在SQL Azure上无效。 SQL Azure服务会备份所有的数据库,然而一般用户还无法这样做。我们可能会在未来提供这一功能。
服务提供
当准备部署本地SQL Server时,可能是由DBA 或 IT 部门来准备和配置所需的硬件和软件。而使用SQL Azure,这些任务都由SQL Azure的服务提供程序来完成。
在您创建了一个Windows Azure Platform账户之后您便就可以开始使用您的SQL Azure 数据库了。该账户允许您访问所有服务,例如Windows Azure, AppFabric, 和 SQL Azure,并用来建立和管理您的订购。
每一个SQL Azure订购都被绑定至某个微软数据中心中的一台SQL Azure 服务器上。您的SQL Azure 服务器是一个抽象概念,它其实是一个数据库编组。为了提供负载平衡和高可用性,您SQL Azure上各个数据库可能驻留在微软数据中心内独立的物理计算机上。当前,我们的数据中心分布于芝加哥Chicago (North Central US),圣安东尼奥San Antonio (South Central US),都柏林Dublin (West Europe), 阿姆斯特丹Amsterdam (North Europe),新加坡 Singapore (Southeast Asia) 和香港 Hong Kong (East Asia)。未来会增加更多数据中心。
更多供应信息请浏览SQL Azure Provisioning Model.
Transact-SQL 支持
许多SQL Server Transact-SQL 语句可以通过参数让您指定文件组或物理文件的路径但是SQL Azure并不支持这些类型的参数,因为它们依赖于物理配置。这种情况下,这些命令被视为部分支持。关于更多Transact-SQL 支持信息,请浏览 Transact-SQL Support (SQL Azure Database).
特性和类型
SQL Azure 并不支持SQL Server内所有的特性和数据类型。分析服务(Analysis Services),复制( Replication),报表服务( Reporting Services),以及 Service Broker在现在的SQL Azure上并不支持。然而,您可以将SQL Azure 用做数据源或目标数据库,使用本地的报表服务器或分析服务器连接SQL Azure。
因为 SQL Azure负责物理管理,任何企图直接操作物理资源的语句和选项都被屏蔽掉了,例如Resource Governor,文件组访问或一些关于服务器的 DDL 语句。另外,您也不能够设置服务器选项和SQL 跟踪标志(Trace Flag),或使用SQL Server Profiler 以及Database Tuning Advisor。
服务的主要优势
SQL Azure的优势是多方面的,包括可管理性,高可用性,可拓展性,熟悉的开发模式以及关系型数据模型。
自主管理
SQL Azure 提供了企业级数据中心的规模和功能,省去了日常管理本地SQL Server实例的支出。自主管理的能力使得企业既不用增加本地IT部门的支持负荷,也不用分散具有良好技能的职员的精力从本职工作到维护部门的数据库应用程序,还能够在整个企业内为应用程序提供数据服务。有了SQL Azure,您可以在极短的时间内准备好您的数据存储。通过提供您仅需的存储减少了数据服务的初始成本。当您的需求变化时,您可以轻松地通过拓展基于云的数据存储来满足需求。
高可用性
SQL Azure 构建于久经考验的Windows Server 和 SQL Server 技术至上,拥有足够的弹性以处理所有使用上的和负载的变化。服务会在多个物理服务器上复制多份数据冗余拷贝以维持数据可用性和业务持续性。如果一台硬件出故障, SQL Azure 提供了自动的故障切换来确保您的应用程序的可用性。
可拓展性
SQL Azure的一大关键优势在于能够轻松拓展您的解决方案。随着数据增长,数据库也需要纵向拓展和横向拓展。纵向拓展往往会有一个上限,而横向拓展并没有实际的限制。通常横向拓展的方法是数据分割。在分割了您的数据之后,服务随着数据增长而拓展。一个现收现付的计价模式确保了您只需为您所使用的存储付费,所以当您不需要时可以随时缩减服务的规模。
熟悉的开发模式
当开发者创建使用SQL Server的本地应用程序时,他们使用客户端库例如ADO.NET, ODBC。它们使用tabular data stream (TDS) 协议在客户端与服务器之间通信。SQL Azure 提供了与SQL Server一致的TDS 接口,所以您可以使用相同的工具和库来为存储于SQL Azure中的数据构建客户端应用程序。关于更多TDS信息,请浏览Network Protocols and TDS Endpoints.
关系型数据模型
SQL Azure 对于开发者和管理员来说应该很容易上手,因为SQL Azure使用相似的关系型数据模型,数据存储于SQL Azure上就和存储于SQL Server上一样。在概念上类似于一个本地SQL Server实例, 一个SQL Azure 服务器就是一组数据库的逻辑组和,是一个独立的授权单位。
在每个SQL Azure 服务器内,您可以创建多个数据库, 每个数据库可以拥有多个表,视图,存储过程,索引和其他熟悉的数据库对象。该数据模型可以很好的重用您现有的关系型数据库设计和Transact-SQL 编程技能和经验,简化了迁移现有本地数据库应用程序至SQL Azure的过程。关于更多Transact-SQL 以及其与SQL Azure的关系,请浏览 Transact-SQL Support (SQL Azure Database).
SQL Azure 服务器和数据库都是虚拟对象,并不对应于物理服务器和数据库。通过将您与物理实现隔离,SQL Azure 使得您可以将时间专用于数据库设计和为业务增值上。
特性 | SQL Server (本地) | SQL Azure | 变通方法 |
数据存储Data Storage | 无大小限制 | · Web 版本 · Bussiness 版本 具体大小和定价信息请参考Pricing Overview. 注意:当您的使用到达分配的大小 (1 GB 或 10 GB),只有 SELECT和 DELETE语句会被执行。 UPDATE和 INSERT语句会抛出错误。
| · 当旧数据可以被移植至另外一个SQL Azure或本地的数据库内时,一个存档过程可被创建。 · 因为上述的大小约束,建议对数据进行跨数据库分割。创建多个数据库能够充分利用多个节点的计算能力。Azure 模式的最大价值在于其灵活性,在您的需求在最高点时可以按需创建任意多的数据库,在需求降低时删除数据库。最大难题在于编写应用程序能够跨数据库的拓展。一旦该功能被实现,便可拓展至跨任意个数据库。 |
版本Edition | · Express · Workgroup · Standard · Enterprise | · Enterprise 版本 |
|
连接性Connectivity | · SQL Server Management Studio · SQLCMD | · SQL Server 2008 R2 Management Studio 提供了对SQL Azure完整的连接性。先前版本的支持有限。 · SQLCMD |
|
数据移植Data Migration |
| · SQL Server Integration Services, BCP 和 SqlBulkCopyAPI |
|
验证Authentication | · SQL 验证 · Windows 验证 | · SQL Server 验证 | 使用 SQL Server 验证 |
Schema | 没有限制 | SQL Azure 并不支持堆表。 所有表必须拥有一个聚集索引才能插入数据。 | 检查所有脚本,确保所有的表都有一个聚集索引。 |
TSQL 支持TSQL Supportability |
| 某些 TSQL 命令完全支持。一些部分支持,另一些不支持. · 支持的 TSQL: http://msdn.microsoft.com/en-us/library/ee336270.aspx · 部分支持的TSQL: http://msdn.microsoft.com/en-us/library/ee336267.aspx · 不支持的 TSQL: http://msdn.microsoft.com/en-us/library/ee336253.aspx
|
|
“USE” 命令“USE” command | 支持 | 不支持 | 不支持USE 命令。因为每一个用户创建的数据库可能并不在同一个物理服务器上。所以应用程序必须从多个数据库上取回数据,并在应用程序层面结合这些数据。 |
事务复制Transactional Replication | 支持 | 不支持 | 您可以使用BCP 或 SSIS 来按需获得流入本地 SQL Server的数据。您也可以使用SQL Data Sync tool 来保持本地 SQL Server 和 SQL Azure 的同步。 |
日志传输 Log Shipping | 支持 | 不支持 |
|
数据镜像Database Mirroring | 支持 | 不支持 |
|
SQL Agent | 支持 | SQL Azure上无法运行SQL agent/jobs | 您可以在本地SQL Server上运行 SQL agent 并连接至SQL Azure |
服务器选择项Server options | 支持 | · 支持一些系统视图 (http://msdn.microsoft.com/en-us/library/ee336238.aspx) | 大多系统层面的元数据被禁用了,因为在云端提供服务器层的信息无意义。 |
连接限制Connection Limitations | 无 | 为了给在节点上所有租户提供公平的使用体验,有如下情况的连接可能被关闭: · 过度资源使用 · 长时间运行查询 (超过 5 mi分钟) · 在 BEGIN TRAN 和 END TRAN内长时间运行的单个事务 – (超过 5 分钟) · 空闲连接– (超过 30 分钟)
|
|
SSIS | 可以在本地运行SSIS | 无法在SQL Azure内运行SSIS | 本地运行 SSIS ,并以ADO.NET provider连接至SQL Azure 。 |
参考:
原文链接: http://blog.csdn.net/azurechina/article/details/5604059