Windows Azure的数据存储和性能比较(三)
3、 Queue存储。它是一个类似MSMQ的队列实现。一个使用Queue Storage经典的场景是,在一个Web应用程序中,用户通过表单递交给服务器数据,服务器收到数据后将进行处理,而这一处理将花费很多时间。这种情况下,服务器端通过Queue Storage可以把用户递交的信息存储在队列中,后台再运行一个程序从队列中取得数据进行信息的处理。一个消息的最大大小为8K。
使用示例:
在一个项目(为了叙述方便,后面称之为Client项目)的Main方法中加入如下代码,我们将用它来向Queue Storage中添加信息。
static void Main(string[] args) { var storageAccount = CloudStorageAccount.DevelopmentStorageAccount; var queueStorage = storageAccount.CreateCloudQueueClient(); // 检查名为helloworldqueue的队列是否被创建,如果没有,创建它 var queue = queueStorage.GetQueueReference("helloworldqueue"); queue.CreateIfNotExist(); Console.WriteLine("Client is running..."); while (true) { // 插入数据到队列中 queue.AddMessage(new CloudQueueMessage(string.Format("client sent information: {0}", DateTime.UtcNow.ToString()))); // 每次插入数据后线程休息3秒 Thread.Sleep(3000); } }接着在另外一个项目(为了叙述方便,后面称之为Server项目)的Main方法中加入如下代码,我们将用它来从Queue Storage中读取信息和进行处理。
static void Main(string[] args) { var storageAccount = CloudStorageAccount.DevelopmentStorageAccount; var queueStorage = storageAccount.CreateCloudQueueClient(); // 检查名为helloworldqueue的队列是否被创建,如果没有,创建它 var queue = queueStorage.GetQueueReference("helloworldqueue"); queue.CreateIfNotExist(); Console.WriteLine("Server is running..."); while (true) { // 从队列中读取一条信息 // 收到信息后可以根据收到的信息做处理,为了演示方便我们这里只是把信息显示出来 // 在云端发送消息后这条消息将对于后续的请求不可见,但是并未被删除。我们需要显示删除它。 // 否则在一段时间后该消息将重新可见。这一设计的好处是确保了所有消息都能够被处理。 // 如果程序在收到消息后处理消息前就异常终止了那么数据依然在一段时间后可以被重新处理。 // 详情请参考MSDN文档 var message = queue.GetMessage(); if (message != null) { Console.WriteLine(string.Format("Message retrieved: {0}", message.AsString)); // 处理完数据后必须显示删除消息 queue.DeleteMessage(message); } // 每次读取数据后线程休息3秒 Thread.Sleep(3000); } }4、 SQL Azure存储
上面介绍了Windows Azure Storage的三种存储方式,Storage存储其实就是类似于本地文件存储,只是存储位置是远程的云服务器。下面简单介绍一下Azure提供的一种类似于SQL Server服务的基于SQL的存储方式:SQL Azure存储。
它是由微软SQL Server 2008为主,建构在Windows Azure云操作系统之上,运行云计算 (Cloud Computing)的关系数据库服务 (Database as a Service),是一种云存储(Cloud Storage)的实现,提供网络型的应用程序数据存储的服务。
(1)、连接工具
开发人员或管理人员可使用 SQL Server 2008 R2 版本的 SQL Server Management Studio 连接 SQL Azure Server,或是使用命令行工具 sqlcmd.exe 连到 SQL Azure Server。SQL Azure的连接字符串可以在SQL Azure的管理窗口https://sql.azure.com中得到。
(2)、SQLAzure的限制
SQL Azure 基于架构上的设计与天生的限制,SQL Azure Server的帐户与安全控制会有下列限制:
- 只有服务器级主帐户才具有变更密码的能力,
loginmanager
组群的成员帐户不具变更密码的权限,同时如果要访问master数据库,则该用户帐户必须要被对应到master数据库,同时服务器级主帐户是不可以变更或删除的,同时只要是被设为服务器级主帐户的用户,就算没有给予dbmanager
或loginmanager
,仍然可以创建数据库并管理用户。 - 只要是登录服务器,一律以master为默认数据库,US-English为默认的登录语系。
- 若要运行
CREATE/ALTER/DROP LOGIN
或CREATE/DROP DATABASE
,必须要先连至master数据库。 - 当要在ADO.NET运行前述指令时,不可以使用参数化命令,而且前述命令于每个SQL批量也只能有一个(且是唯一的一个)。
- 当要运行
CREATE USER
配合FOR/FROM LOGIN
选项时,它也必须是SQL批量中唯一的一个。 - 当要运行
ALTER USER
配合WITH LOGIN
选项时,它也必须是SQL批量中唯一的一个。 - 只有服务器级主帐户以及被赋与
dbmanager
角色的成员才有运行CREATE DATABASE
与DROP DATABASE
的权力。 - 只有服务器级主帐户以及被赋与
loginmanager
角色的成员才有运行CREATE LOGIN
、ALTER LOGIN
与DROP DATABASE
的权力。 - 若想访问master数据库,则该帐户必须要对应到master数据库。
(3)、性能曲线
在SQL Azure上添加、更新和删除数据的性能曲线。
在SQL Azure上查询数据的性能曲线。
在SQL Azure和Table Storage上,添加、更新和删除数据的性能比较。
在SQL Azure和Table Storage上,查询数据的性能比较。
结束语
通过对Storage和SQL Azure存储性能的比较,可以得知,整体上SQL Azure的存储性能要高于Storage。所以,在Windows Azure上搭建应用服务的时候,除了要参考采用这两种存储方式的价格差异。同时,更重要的是应该权衡什么数据存储在SQL Azure上,什么数据存储在Storage上,在整个项目预算的允许范围内,对应用服务的性能的影响。