Windows Azure存储为应用程序开发人员提供了四个对象抽象 · Blob(二进制大文件存储) – 提供了一个简单的接口存储文件及文件的元数据 · Table(表) – 提供大规模可扩展结构化存储一个Table就是包含一组属性的一组实体应用程序可以操作这些实体并可以查询存储在Table中的任何属性 · Queue(队列) – 为应用程序消息提供可靠的存储和投递在应用程序不同组件(角色)之间建立松散的连接和可伸缩的工作流 · Drive (驱动器) – 为Windows Azure应用程序提供持久性NTFS卷允许应用程序使用现有NTFS API访问网络附加持久化驱动器每个驱动器都是一个网络附加的Page Blob格式作为一个NTFS VHD卷使用 下图显示了Windows Azure存储的抽象概念和BlobTable和Queue使用的URI 图 Windows Azure存储的概念视图 存储账号和它们的位置 访问Windows Azure存储必须使用它的存储账号创建存储账号时可以指定存储的位置目前可以选择的位置有 · 美国中北部 · 美国中南部 · 欧洲北部 · 欧洲西部 · 东亚 · 东南亚 选择位置应选择与你托管的服务相同的位置这样服务和存储之间的带宽才能得到保证 注意你注册的账号名将成为主机名的第一部分如 DNS将会用它将请求直接重定向到该账号对应的数据存储位置其中的Queue表示应将请求定向到该位置的Queue服务因为BlobTable和Queue都是独立的服务因此在Windows Azure存储账号下的都有它们自己的命名空间因此Blob容器Table和Queue的名字可以是相同的 一个存储账号可以保存TB数据对Blob容器BlobTableQueue实体消息都无数量限制但总容量不能超出TB Windows Azure Blob 下图显示了Windows Azure Blob的抽象概念在这里我们的存储账号是 cohowinery 在这个账号下我们创建了一个叫做 images 的Blob容器在这个容器下放了两张分别叫做 picjpg 和 pic jpg 的图片另外还创建了一个叫做 videos 的Blob容器在这个容器下放了一个叫做 vidavi 视频文件 图 Windows Azure Blob概念视图 · 存储账号 – 所有对Windows Azure存储的访问都是通过存储账号完成的 · 它是访问Blob的最高级命名空间 · 一个账户可以有多个Blob容器 · Blob容器 – 容器为一组Blob提供了容身之地 · 共享策略是在容器级设置的容器可以设置为私有或公共访问设置为公共访问时它里面的所有内容无需身份验证就可以访问设置为私有访问时身份验证通过后才能访问它里面的内容 · 容器本身也有元数据 其格式是<名称值>对 每个容器的元数据大小最大为KB · 提供了列出容器中所有Blob的功能 · Blob – Blob存储在Blob容器内Blob本身也有元数据其格式是<名称值>对每个Blob的元数据大小最大为KB可以从Blob数据位设置和检索元数据 // 账号名 这样的命名空间是对所有Blob的访问要访问特定的Blob其URI格式是// 账号名 / Blob容器名 / Blob名 目前支持两种类型的Blob · Block Blob – 针对流工作负载 · 每个Blob由一串Block组成 · Block Blob最大大小是GB · 修改Block Blob需要两步先更新再提交 · 阅读范围可以从Blob中的任意字节处开始 · Page Blob – 针对随机写工作负载 · 每个Blob由一组Page组成 · Page Blob最大大小是TB · 立即更新语义写入即提交 Windows Azure Table 下图显示了Windows Azure Table的抽象概念在这里我们的存储账号是 cohowinery 创建了 customers 和 winephotos 两个Table在 customers Table下保存了代表客户信息的实体实体有NameEmail等属性 winephotos Table下的实体具有 PhotoID 和 Date 等属性 图 Windows Azure Table概念视图 下面是对Windows Azure Table数据模型的总结 · 存储账号 – 同上每个账号可以有多个Table · Table – 包含一组实体 · 实体(行) 实体(一个实体与一行的概念相似)是Table中最基本的数据项一个实体包含一组属性每个Table都有两个属性( PartitionKey 和 RowKey )它们一起组成实体的唯一键 一个实体最多可以有个属性 一个实体的所有属性总大小不能超出MB这个大小包括属性名称属性值或它们的类型的大小 · 属性(列) 它表示实体的一个值属性名是大小写敏感的 · PartitionKey – 每个Table的第一个键属性系统使用这个键自动在多个服务器之间分配和负载均衡Table的实体 · RowKey – Table的第二个键属性它是实体在所属分区中的唯一ID PartitionKey 和 RowKey 结合起来组成实体的唯一身份标识 · Timestamp – 每个实体都有由系统维护的一个版本用于乐观并发控制 · 排序顺序 – Windows Azure Table有一个唯一的索引 表中的所有实体都先按 PartitionKey 排序然后再按 RowKey 排序的 这意味着指定这些键查询的效率是非常高的返回的所有结果也是先按 PartitionKey 排序然后再按 RowKey 排序的 · 类型 PartitionKey 和 RowKey 必须是字符串类型其它属性可以是 Binary BoolDateTimeDouble GUIDInt IntString 中的任意类型 · 无固定的结构描述 – Windows Azure Table中不会存储结构描述所有属性都存储为<名称值>对这意味着相同表中的两个实体的属性可以完全不同不同实体的属性名可以是相同的但属性值的类型必须不同在单个实体中属性名必须是唯一的 访问特定Table的URI结构如下 // 账号名 / Table名 Windows Azure Queue 下图显示了Windows Azure Queue的抽象概念在存储账号 cohowinery 下创建了一个叫做 orders 的Queue存储了正在等待处理的订单消息消息包含 customer ID order ID 订单链接等信息 图 Windows Azure Queue概念视图 · 存储账号 – 同上一个账户可以有多个Queue · Queue – Queue中包含许多消息 · 存储在Queue中的消息数量没有限制(唯一的限制是每个存储账号的总容量是TB) · 消息至少保留一周超过一周的消息系统会自动进行垃圾回收 · Queue本身也有元数据其格式也是<名称值>对每个Queue的元数据最大大小为KB · 消息 – 消息是存储在Queue中的每条消息最大KB如果想存储更大的数据可以将数据存储在Azure Blob或Azure Table中然后在消息中存储Blob/实体的名称存储消息时消息可以是二进制数据但从存储提取消息时返回的是XML格式基于Base编码的信息 访问特定Queue的URI结构如下 // 账号名 / Queue名称 |