Windows Azure Platform 系列文章目录

  最近想了想,还是有必要把Windows Azure Table Storage 给说清楚。

  1.概念

  Windows Azure Table是存储在云端的非关系型数据表,主要存储结构化数据,简单理解上来是类似SQL Server的一张单表,包含了列名和行数据,但是无法执行关系型运算(e.g. inner join)。在某些场景,比如只纪录系统运行日志、用户操作日志等场景下,比较适合使用Table Storage。

  使用Table Storage,除了设置账户信息(Account Name和Access Key)以外,还需要设置TableName。TableName就是存储的数据表。(比如我可以使用Product来存储产品信息数据,使用Client来存储用户信息数据,这个概念和SQL Server非常类似)。

  Table Service 主要是存储结构化数据的,所有的数据都是一个个 Entity,多个 Entity 在一起作为一个 Table。而每一个 Entity 中最多包含 255 个 Property。每个 Property 以键值对(Key-Value Pair)的方式保存,Key 是字符串类型而 Value 可以是任意的.NET 标准类型,比如字符串、整型、日期等。但是,Storage Service 要求每一个 Entity 必须包含下面三个 Property:Partition KeyRow KeyTimestamp

  -PartitionKey设置了Table中数据的分区规则。比如下图中

  

  前2行数据具有相同的Partition Key,名为Examples Doc那前2行数据在物理存储上是在同一个存储节点上(比如同一个磁盘上)。

  后2行数据具有相同的Partion key(FAQ Doc)。那后面3行的数据在物理存储上也是在同一个存储节点上的(可能与上面的Example Doc存储在同一个节点上)

  这样的架构设计好处在于:

  1.当存储在Table中的数据访问量少的时候,Windows Azure会把Example Doc的数据和FAQ Doc的数据放在同一个存储上。

  2.当访问FAQ Doc的用户逐渐增多的时候,Windows Azure会把FAQ Doc的数据单独迁移到某一存储上,加快访问速度。

  -RowKey 是识别Table 行数据的唯一标识符

  对于相同的Partition Key的行数据来说,他们的RowKey必须是唯一的。

  一般情况下,我们可以使用GUID来设置RowKey。

  Partition Key 和 Row Key 可以作为 Entity 的联合主键。

  -TimeStamp

  DateTime类型,这个属性是由系统维护的,用户无法修改。表示该行数据的最后操作时间。

  

  2.我们使用管理员身份运行VS2013。新建Cloud Project,并且重命名为AzureStorageTable

  

  3.添加ASP.NET Web Role

  

  4.展开AzureStorageTable,展开Roles,右键WebRole1。在Settings添加StorageConnectionString,并设置相应的Value

  

  5.在WebRole1 Project中,修改Global.asax.cs代码如下:

using Microsoft.WindowsAzure;
using Microsoft.WindowsAzure.Storage;
using Microsoft.WindowsAzure.Storage.Table;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Routing;
using System.Web.Security;
using WebRole1; namespace WebRole1
{
public class Global : HttpApplication
{
void Application_Start(object sender, EventArgs e)
{
// Code that runs on application startup
AuthConfig.RegisterOpenAuth();
RouteConfig.RegisterRoutes(RouteTable.Routes); //Initialize Table First
CloudStorageAccount storageAccount = CloudStorageAccount.Parse(CloudConfigurationManager.GetSetting("StorageConnectionString"));
CloudTableClient tableClient = storageAccount.CreateCloudTableClient(); CloudTable table = tableClient.GetTableReference("Message");
table.CreateIfNotExists();
} void Application_End(object sender, EventArgs e)
{
// Code that runs on application shutdown } void Application_Error(object sender, EventArgs e)
{
// Code that runs when an unhandled error occurs }
}
}

  6.修改Default.aspx,增加TextBox和Button。修改后的界面如下:

  7.在Default.aspx.cs里,增加引用如下:

using Microsoft.WindowsAzure;
using Microsoft.WindowsAzure.Storage;
using Microsoft.WindowsAzure.Storage.Table;

  8.增加Button_Click事件

     protected void btnAddMessage_Click(object sender, EventArgs e)
{
// Retrieve the storage account from the connection string.
CloudStorageAccount storageAccount = CloudStorageAccount.Parse(
CloudConfigurationManager.GetSetting("StorageConnectionString")); // Create the table client.
CloudTableClient tableClient = storageAccount.CreateCloudTableClient(); // Create the CloudTable object that represents the "people" table.
CloudTable table = tableClient.GetTableReference("Message"); // Create a new Message entity.
MessageEntity message1 = new MessageEntity();
message1.Detail = txbMessage.Text; // Create the TableOperation that inserts the customer entity.
TableOperation insertOperation = TableOperation.Insert(message1); // Execute the insert operation.
table.Execute(insertOperation);
}

  9. MessageEntity的定义如下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using Microsoft.WindowsAzure.Storage.Table; namespace WebRole1
{
public class MessageEntity : TableEntity
{
public MessageEntity()
{
PartitionKey = "Message";
RowKey = Guid.NewGuid().ToString();
} public string Detail { get; set; }
}
}

  10.运行VS2013调试。在输入框中输入相应的内容,并点击按钮。如下图:

  10.点击按钮完毕后,我们回到VS2013,点击菜单栏的VIEW->Server Explorer

  

  11.在Server Explorer中,展开Windows Azure,Storage。选择相应的Storage Table,就可以查看到我们插入成功的数据。

Windows Azure Storage (6) Windows Azure Storage之Table的更多相关文章

  1. Windows Azure Storage (20) 使用Azure File实现共享文件夹

    <Windows Azure Platform 系列文章目录> Update 2016-4-14.在Azure VM配置FTP和IIS,请参考: http://blogs.iis.net/ ...

  2. [Windows Azure] .NET Multi-Tier Application Using Storage Tables, Queues, and Blobs - 1 of 5

    .NET Multi-Tier Application Using Storage Tables, Queues, and Blobs - 1 of 5 This tutorial series sh ...

  3. [转]windows azure How to use Blob storage from .NET

    本文转自:http://azure.microsoft.com/en-us/documentation/articles/storage-dotnet-how-to-use-blobs/?rnd=1 ...

  4. Azure Queue Storage 基本用法 -- Azure Storage 之 Queue

    Azure Storage 是微软 Azure 云提供的云端存储解决方案,当前支持的存储类型有 Blob.Queue.File 和 Table. 笔者在<Azure File Storage 基 ...

  5. Azure File Storage 基本用法 -- Azure Storage 之 File

    Azure Storage 是微软 Azure 云提供的云端存储解决方案,当前支持的存储类型有 Blob.Queue.File 和 Table. 笔者在<Azure Blob Storage 基 ...

  6. Azure Blob Storage 基本用法 -- Azure Storage 之 Blob

    Azure Storage 是微软 Azure 云提供的云端存储解决方案,当前支持的存储类型有 Blob.Queue.File 和 Table. 笔者在<Azure Table storage ...

  7. Azure Table storage 基本用法 -- Azure Storage 之 Table

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

  8. Windows Azure Web Site (18) Azure Web App设置MIME

    <Windows Azure Platform 系列文章目录> 在笔者之前的文章中,介绍了我们在使用Azure Web App,可以把静态资源保存到Azure Storage中: Wind ...

  9. 【初码干货】【Azure系列】1、再次感受Azure,体验Windows Server 2016并部署BlogEngine.NET

    上个月末,在某人的建议下,重新注册了一个1元试用账户(包含1个月期限的1500元订阅),并充值了1000元转为了正式账户,相当于1000元得到了2500的订阅,于是又一次开启了Azure之旅. 在这不 ...

随机推荐

  1. winform进程、线程、TreeView递归加载

    进程: 一般来说,一个程序就是一个进程,不过也有一个程序需要多个进程支持的情况. 进程所使用的类:Process 所需命名空间:System.Diagnostics; 可以通过进行来开启计算机上现有的 ...

  2. [原创] Go语言在Centos上的部署

    序言 Golang是个好东西啊.部署非常简单,对于运维人员来说太爽了. 传统的Nginx啊Apache啊,外加PHP以及各个插件啊搞得头晕. 用了Go之后就什么都不需要了.只要把生成好的文件向服务器上 ...

  3. Python 判断变量的类型

    这里有两种方法.type 和isinstance import types aaa = 0 print type(aaa) if type(aaa) is types.IntType: print & ...

  4. 电脑只有网页打不开,QQ和其他软件都能用

    应该就是浏览器设置代理服务器的问题 1.打开浏览器->找到工具->internet选项->链接->局域网设置 将代理服务器下面勾去掉

  5. ASP.NET MVC3中Controller与View之间的数据传递

    在ASP.NET MVC中,经常会在Controller与View之间传递数据,因此,熟练.灵活的掌握这两层之间的数据传递方法就非常重要.本文从两个方面进行探讨: 一.  Controller向Vie ...

  6. 【BO】SAP BO相关问题汇总贴

    本文将以往写过的关于SAP BO相关问题的帖子汇总了一下,方便寻找 #1 为WEBI报表添加自定义字体font #2 WEBI文件打开时提示Illegal access错误 #3 安装BO服务器时,o ...

  7. Ubuntu 树莓派2b交叉编译环境

    在一个平台上生成另一个平台上的可执行代码.为什么要大费周折的进行交叉编译呢?一句话:不得已而为之.有时是因为目的平台上不允许或不能够安装所需要的编译器,而又需要这个编译器的某些特征:有时是因为目的平台 ...

  8. MacOS下Python的多版本管理(pyenv)

    与windows下设置绝对路径不同,pyenv使用了一种更优雅的方式来管理Python的版本.pyenv通过在$PATH的最前面插入一个垫片路径(shims),例如:~/.pyenv/shims:/u ...

  9. BZOJ4596: [Shoi2016]黑暗前的幻想乡

    Description 四年一度的幻想乡大选开始了,最近幻想乡最大的问题是很多来历不明的妖 怪涌入了幻想乡,扰乱了幻想乡昔日的秩序.但是幻想乡的建制派妖怪(人类) 博丽灵梦和八云紫等人整日高谈所有妖怪 ...

  10. C到C++的升级

    const 在C中只是个“只读变量”,并不是真正意义上的常量,通过指针能改变它,如下 #include<stdio.h> int main() { ;//声明只读变量a为0 int* p= ...