• Windows Azure Storage (6) Windows Azure Storage之Table


      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,就可以查看到我们插入成功的数据。

  • 相关阅读:
    sratookit
    转录组测序
    单菌基因组测序常见问题
    微生物测序样本准备方法总结
    Review:Microbiota, metagenome, microbiome傻傻分不清
    扩增子、宏基因组测序问题集锦
    扩增子图表解读8网络图:节点OTU或类Venn比较
    扩增子图片解读7三元图
    扩增子图表解读5火山图:差异OTU的数量及变化规律
    扩增子图表解读6韦恩图:比较组间共有和特有OTU或分类单元
  • 原文地址:https://www.cnblogs.com/threestone/p/3406259.html
Copyright © 2020-2023  润新知