Azure 入门基础:Table storage

Azure Storage 是微软 Azure 云提供的云端存储解决方案,当前支持的存储类型有 Blob、Queue、File 和 Table。其中的 Table 就是本文的主角 Azure Table storage。

Azure 入门基础:Table storage

Azure Table storage 是一个在云端存储结构化 NoSQL 数据的服务。它不仅存取速度快,而且效费比高。MSDN 上的说法是:成本显著低于传统 SQL!
笔者最近在项目中用 Table storage 实现了一个日志表,在此和大家分享一下 Table storage 的基本用法。

Azure storage account

就概念上来讲,Table storage 只是 Azure 提供的存储服务的一种。其他的存储服务还有 Blob、Queue、File 等。对这些存储服务的访问控制都是通过 storage account 来进行的。所以要想使用 Table storage 需要先创建你的 storage account。具体创建过程不是本文重点,请参考 MSDN。但你需要去了解一下 Access keys,它就是你访问 storage account 的用户名和密码:

Azure 入门基础:Table storage

创建 Table storage 的对象

在使用 Azure Table storage 的相关对象前,我们需要安装对应的包。其实很简单,只需在 Visual Studio 的 Package Manager Console 中输入:

Install-Package WindowsAzure.Storage

Visual Studio 会自动安装 WindowsAzure.Storage 包及其依赖的所有包,安装完成后的 packages.config 文件看起来像这个样子:

Azure 入门基础:Table storage

安装完相关的包以后,我们就可以使用其中的类型了。

CloudStorageAccount 类表示一个 Azure storage account,我们得先创建它的实例才能访问属于它的资源。

// 注意连接字符串中的 xxx 和 yyy,分别对应 Access keys 中的 Storage account name 和 key。 CloudStorageAccount storageAccount = CloudStorageAccount.Parse("DefaultEndpointsProtocol=https;AccountName=xxx;AccountKey=yyy"); // CloudTableClient 类是 Windows Azure Table Service 客户端的逻辑表示。我们使用它来配置和执行对 Table storage 的操作。 CloudTableClient cloudTableClient = storageAccount.CreateCloudTableClient();

CloudTable 类表示一张数据表。

// 创建一个实例去引用 Table storage 中的一张表,我们测试用的表名叫 "MyLogTable"。 CloudTable logTable = cloudTableClient.GetTableReference("MyLogTable"); // 如果不确定表是否被创建过,可以调用 CreateIfNotExists 方法。 logTable.CreateIfNotExists();

这样在后面的操作中就可以确保 MyLogTable 表是存在的。

有了 logTable 对象我们就可以向表中插入数据了。但是等等,好像少了点什么。我们开篇第一句中就说明了,Table storage 存储的是结构化的数据,所以我们还要先定义存储的数据的类型。

定义日志类

在定义我们自己的数据类型时,有一个强制性的要求,必须继承自 TableEntity 类型:

internal class MyLogEntity : TableEntity { public MyLogEntity() { } public MyLogEntity(string pkey, string rkey) { this.PartitionKey = pkey; this.RowKey = rkey; } public DateTime LogDate { get; set; } public string LogMessage { get; set; } public string ErrorType { get; set; } }

在我们的设计中,PartitionKey 用来存放产生日志的年份和月份(例如201607),RowKey 用来存放产生日志的天和时分秒毫秒(例如160934248492)。日志数据主要是 LogDate,LogMessage 和 ErrorType。

把数据插入到 Table storage

终于可以向表中插入数据了,试一下先:

DateTime now = DateTime.Now; string partitionKey = now.ToString("yyyyMM"); string rowKey = now.ToString("ddHHmmssffff"); MyLogEntity logEntity = new MyLogEntity(partitionKey, rowKey); logEntity.LogDate = now; logEntity.LogMessage = "test message"; logEntity.ErrorType = "error"; // TableOperation 类表示对一个表进行的操作,可以插入一行或多行数据,删除数据,更新数据等。 TableOperation insertOperation = TableOperation.Insert(logEntity); logTable.Execute(insertOperation);

看起来还不错,我们用 Visual Studio 自带的 Cloud Explorer 查看一下 MyLogTable 中的内容:

OK,数据已经成功插入到 MyLogTable 表中。接下来我们看看如何批量的插入数据。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/13828.html