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数据库,同时服务器级主帐户是不可以变更或删除的,同时只要是被设为服务器级主帐户的用户,就算没有给予 dbmanagerloginmanager ,仍然可以创建数据库并管理用户。
  • 只要是登录服务器,一律以master为默认数据库,US-English为默认的登录语系。
  • 若要运行CREATE/ALTER/DROP LOGINCREATE/DROP DATABASE,必须要先连至master数据库。
  • 当要在ADO.NET运行前述指令时,不可以使用参数化命令,而且前述命令于每个SQL批量也只能有一个(且是唯一的一个)。
  • 当要运行CREATE USER配合FOR/FROM LOGIN选项时,它也必须是SQL批量中唯一的一个。
  • 当要运行ALTER USER配合WITH LOGIN选项时,它也必须是SQL批量中唯一的一个。
  • 只有服务器级主帐户以及被赋与 dbmanager 角色的成员才有运行CREATE DATABASEDROP DATABASE的权力。
  • 只有服务器级主帐户以及被赋与 loginmanager 角色的成员才有运行CREATE LOGINALTER LOGINDROP 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上,在整个项目预算的允许范围内,对应用服务的性能的影响。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值