Azure Table Storage是什么:

Azure Table Storage是隶属于微软Azure Storage这个大服务下的一个子服务, 这个服务在Azure上算是老字号了, 个人大概在2013年的时候就已经用过了(那会还叫Windows Azure的年代).

也算是微软Azure上最早的NoSql服务之一(那会NoSql也才开始兴起).

Table Storage有大概如下几个我认为比较重要的特点:

①在它约定的设计模式下可以提供(但不保证)较高的性能

②廉价的存储

③NoSql, 任意字段随便存

Table Storage的内部结构:

其大概分为如下几个层次:

首先是在你的一个Azure Storage下,可以新建多个表.

每个表按照规定会拥有至少3个字段字段:PartitionKey(分区键)/RowKey(行键)/Timestamp(时间戳,注意这个存的是Utc时间).

在上述三个字段之外,你可以自定义任意自己的字段(但是注意一个实体最多1M大小的限制), 而且可以我第一行数据100个字段,第二行数据20个字段,类似这样结构可以自己任意改任意构造.

Table Storage的性能最主要受你自己的表是如何设计的影响

其中最重要的就是如何设计PartitionKey和RowKey, 因为Table Storage内部有且仅有这2个索引.

微软有文章详细阐述各种场景下如何设计 表设计准则

我这里简单的说一下:

PartitionKey是分区键

相同PartitionKey它内部会存储在一起,而不同的PartitionKey则(理论上)存储在不同的地方(如果你分的太多,不同的key有概率也是在一起).

用常规关系型数据库的思维去理解的话,就是这个是它分库分表的依据.

RowKey是行键

在同一个PartitionKey内Rowkey必须是唯一,否则会报错,RowKey是按顺序存储(可以用于排序之类的需求).

用常规关系型数据库的思维去理解的话,Rowkey就是主键(PrimmeryKey).

基于上述的设计,Table Storage的性能大概会呈现出如下几个情况(按照速度由快到慢排序)

①同时命中PartitionKey和RowKey的点查询(都是where =模式)

②对PartitionKey进行点查询(where =)然后对RowKey进行范围查询(where <>)

③对PartitionKey进行点查询(where =)然后对非RowKey的字段进行任意查询(任意where)

④不命中PartitionKey的查询,将触发表扫描,效率将会相当低

一句话总结: 没命中Partitionkey的任意查询都会很慢,RowKey可用于辅助加速.

Table Storage贵吗?

前面说过,Table Storage的存储是廉价的,有多廉价呢:

上述价格是Azure世纪互联版(国内版)的价格.

在本地冗余存储的情况下, 4毛5不到一个GB.

4毛5啊, Azure上存东西的服务中比4毛5更低的也就blob那类存文件的了.

但这玩意却提供你一个类似nosql数据库那样子的服务(虽然有点儿约束).

隔壁家其他云的, nosql类型的数据库基本都是mongdb这种级别的, 但是存储成本基本都是几块钱一个G, 而且一般还要额外的计算资源成本(多少核多少内存).

当然关于价格有人还会说还有个操作(写入/读取等)的成本, 但是0.02元1万次, 这是什么概念……

假设你一条数据1kb, 你塞满1g那应该是要 1024 * 1024 = 1,048,576, 然后除以10000后再乘以 0.02, 也就是2块钱左右.

另外Azure是入站流量不收费,所以没有额外的网络有关的费用,上述成本将是你对这个服务要掏的所有成本.

Table Storage能干什么?

一直以来,我自己脑子里都是一种NoSQL的思想.

我的NoSql的意思是  Not Only Sql

诚然传统关系型数据库,其实真的是一个银弹, 只要是”存东西” 活儿它基本都能干.

但是随着时代发展, 虽然它能干这个活, 但它干的并不好.

比如最常见的就是随着现代数据量的暴涨, 在大数据(仅指数据量多)的情况下传统关系型数据库真的有点力不从心.

所以我观点是: 专业的地方找专业的解决方案, 每个地方尽量用上最合适的存储技术.

而Table Storage结合下它几个特点:

限定PartitionKey(潜在RowKey辅助加速)下能有较好性能.

廉价的存储.

首先第一个场景就应用而生了: 记录参数日志

我们想下参数日志的数据有什么特点: 量大, 每条日志的价值点很低, 绝大多数数据都不会被查询, 但是真要用的时候又希望数据不能丢的完整都有.

之前我们参数日志记录到数据库里,由于量过大,基本都是三周一清.

于是乎如果有一个问题活到三周以外的话, 对我们很大概率就是个蛋疼的问题了(一个核心日志缺失,排查难度+++).

而2020年我们开始将参数日志且到Table之后, 妈妈再也不用担心我的数据量问题拉.

关于这个日志的事情, 后续会在第二篇章再写一篇博客出来详细介绍下我们基于Table如何解决我们的的日志问题的设计体系.

第二个场景还在构思中, 就是能否用来存储类似GPS之类的轨迹数据

GPS的设备Id作为PartitionKey, 然后时间是RowKey, 那么我要查这个GPS信息时候大概率可以通过 “对PartitionKey进行点查询(where =)然后对RowKey进行范围查询(where <>)”的模式进行快速查找.

Table Storage怎么用:

我觉得作为一个软系的程序员, 每当问到软家产品怎么用的时候,我总是会说出: docs.microsoft.com

别人写的比绝大多数人写的都更加的专业.

我就不赘述了.

传送门: .Net SDK使用Table Storage

另:

后面微软出的CosmosDb里也包含了一个Table Api

这个是和Azure Storage里的Table是兼容的, 两者的关系官方上有对比.

使用 Azure 表存储 API 和 Azure Cosmos DB 进行开发

我简单挑几个我认为重点的区别说下:

CosmosDB的更贵,(每GB存储成本到2块多了),但是能保证性能(也有更快的性能)而且不再像Table那样只有PartitionKey和RowKey是索引, 它是全表索引.

反正就更隔壁家其他云的mongdb之类的差不多了, 只是API用的是同一套而已.

怎么选择看自己场景, 比如我前面说的日志是属于量大但是每个数据的价值相对较低的, 那么应该用Table, 但是如果你数据价值较高且对性能敏感的那么应该要用CosmosDb的.

还是那句话: 专业的地方找专业的解决方案, 每个地方尽量用上最合适的存储技术.

Azure Table Storage(一) : 简单介绍的更多相关文章

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

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

  2. 自定义 Azure Table storage 查询过滤条件

    本文是在Azure Table storage 基本用法一文的基础上,介绍如何自定义 Azure Table storage 的查询过滤条件.如果您还不太清楚 Azure Table storage ...

  3. Azure Table storage 之改进DynamicTableEntity类为其添加动态语言扩展

    在之前的一篇文章中提到,storage类库中包含一个可以用来动态获取Azure table storage 表结构的类-DynamicTableEntity. 我们可以通过这个类,我们无需为每一个表提 ...

  4. Windows Azure Table storage 之 动态Table类 DynamicTableEntity

    在一般情况下,当我们在.net中使用Azure table storage的时候都会为该表建立一个TableEntity的派生类,如下所示. public class CustomerEntity : ...

  5. Windows Azure Table Storage 解决 Guid 查询问题

    在使用 Windows Azure Table Storage 的 CloudTableClient 对Azure 进行数据查询时,会发现在自定义类的Guid类型始终无法去成功查询出数据,对比发现 G ...

  6. 微软Azure 存储管理器的简单介绍

    Windows Azure存储用户经常希望能够在“管理器”中查看他们的数据,管理器指的是一款可用于显示存储帐户数据的工具.我们之前提供了我们所知的存储管理器列表.在本文中,我们将对此列表进行更新,使其 ...

  7. Azure 基础:Table storage

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

  8. Azure 基础:自定义 Table storage 查询条件

    本文是在 <Azure 基础:Table storage> 一文的基础上介绍如何自定义 Azure Table storage 的查询过滤条件.如果您还不太清楚 Azure Table s ...

  9. Azure Storage 系列(四)在.Net 上使用Table Storage

    一,引言 今天我们就不多说废话了,直接进入正题,Azure Table Storage.开始内容之前,我们先介绍一下Azure Table Storage. 1,什么是Azure Table Stor ...

随机推荐

  1. 题解-JSOI2011 分特产

    题面 JSOI2011 分特产 有 \(n\) 个不同的盒子和 \(m\) 种不同的球,第 \(i\) 种球有 \(a_i\) 个,用光所有球,求使每个盒子不空的方案数. 数据范围:\(1\le n, ...

  2. Android全面解析之由浅及深Handler消息机制

    前言 很高兴遇见你~ 欢迎阅读我的文章. 关于Handler的博客可谓是俯拾皆是,而这也是一个老生常谈的话题,可见的他非常基础,也非常重要.但很多的博客,却很少有从入门开始介绍,这在我一开始学习的时候 ...

  3. Node:使用express搭建一个简易的服务器

    ①安装node环境 在node.js官网下载LTS长期支持版本,然后傻瓜式安装 ②查看是否安装成功 打开cmd终端,输入node -v 有版本号,则安装成功.再输入npm -v 有版本号,则npm也安 ...

  4. Hadoop使用实例 词频统计和气象分析

    一.词频统计 下载喜欢的电子书或大量文本数据,并保存在本地文本文件中 编写map与reduce函数 本地测试map与reduce 将文本数据上传至HDFS上 用hadoop streaming提交任务 ...

  5. 数据结构与算法——图(游戏中的自动寻路-A*算法)

    在复杂的 3D 游戏环境中如何能使非玩家控制角色准确实现自动寻路功能成为了 3D 游戏开 发技术中一大研究热点.其中 A*算法得到了大量的运用,A*算法较之传统的路径规划算法,实时性更高.灵活性更强, ...

  6. .Net Core 学习之旅知乎版

    @[yuyue](.Net Core 学习之旅-.netCore Developer RoadMap) # .Net Core 学习之旅 随着.NET5.O 的正式推出,微软的VS大一统目的逐步成型, ...

  7. 彻底理解Spring如何解决循环依赖

    Spring bean生命周期 可以简化为以下5步. 1.构建BeanDefinition 2.实例化 Instantiation 3.属性赋值 Populate 4.初始化 Initializati ...

  8. Windows系统提示:“windows找不到文件请确定文件名是否正确后

    最近使用Win7/10系统的用户反应在系统中移动了桌面上的一些与系统无关的文档,在挪动了文件之后出现的问题,弹出了windows找不到文件请确定文件名是否正确后,再试一次, 的错误提示,该怎么办呢? ...

  9. Windows Server 2016介绍与安装

    版本介绍 Windows Server 2016 Essentials edition Windows Server 2016 Essentials版是专为小型企业而设计的.它对应于Windows S ...

  10. SonarQube学习(一)- 使用Docker安装SonarQube(亲测可用)

    一.前言 不得不吐槽下,现在的博客写的真太扯淡了,就网上写的使用docker安装SonarQube而言,搜到十篇文章,最少9篇照着操作配置都不可用,卡在SonarQube无法启动.自然,我也是被折磨的 ...