快速认识OTS

什么是OTS

  OTS 是Open Table Service的简称,现在已更名为表格存储Table Store,官网对它的解释为:OTS是构建在阿里云飞天分布式系统之上的 NoSQL 数据库服务,提供海量结构化数据的存储和实时访问。OTS 以实例和表的形式组织数据,通过数据分片和负载均衡技术,达到规模的无缝扩展。OTS 向应用程序屏蔽底层硬件平台的故障和错误,能自动从各类错误中快速恢复,提供非常高的服务可用性。OTS 管理的数据全部存储在 SSD 中并具有多个备份,提供了快速的访问性能和极高的数据可靠性。用户在使用 OTS 服务时,只需要按照预留和使用的资源进行付费,无需关心数据库的软硬件升级维护、集群缩容扩容等复杂问题。

  上面的介绍我们可以简单的概括为:OTS是一个NoSQL的数据库(你可以将它类比为HBase),在使用方面我们可以将OTS类比为一个技术黑箱,它已经为我们把存储扩容、数据备份、负载均衡等工作做了,使用过程中我们只需透明的使用其提供的高可用和高并发的特性即可。

OTS和传统数据关系型数据库的区别

  估计很多人看了上面的介绍加上对上面提到的HBase不是很了解,现在对于OTS还是有很多疑问。没关系,接下来将它和传统关系型数据库Mysql、SQLServer等做一个比较,或许这下你就能更加清晰的认识OTS了。

  OTS的数据模型也是以二维表为中心的,表有行和列的概念,但是与传统数据库不一样,OTS的表是稀疏的,稀疏指的是它的每一行可以有不同的列,可以动态增加或者减少属性列,建表时不需要为表的属性列定义严格的schema。相对于传统数据库的丰富功能(视图、索引、事务、丰富的SQL语句支持),OTS提供较为基础的功能,但是具有更好的规模扩展性,能够较容易的支持更大的数据规模(百TB级别)和并发访问(单表10万QPS)。在编程方面,OTS提供统一的HTTP Restful API,不支持传统的SQL语句标准。

OTS的特点

  对OTS做了初步的了解后,那么问题来了,它有什么特性,在存储产品如此丰富的现状下我们有什么理由去选用它呢?

  它的主要特性我们可以大致概括为以下几个方面:

  1. 扩展性
  • 动态调整预留读写吞吐量

    应用在创建表的时候,需要根据业务访问的情况来配置预留读写吞吐量。OTS 根据表
    的预留读写吞吐量进行资源的调度和预留,从而保证应用获得可预期的性能。在使用
    过程中,应用还可以根据应用的情况动态修改预留读写吞吐量。

  • 无限容量

    OTS 表的数据量没有上限,随着表数据量的不断增大,OTS 会进行数据分区的调整
    从而为该表配置更多的存储。

  1. 数据可靠性
  • OTS 通过存储多个数据备份及备份失效时的快速恢复,提供极高的数据可靠性。
  1. 高可用性
  • 通过自动的故障检测和数据迁移,OTS 对应用屏蔽了机器和网络的硬件故障,提供高可用
    性。
  1. 管理便捷
  • 应用程序无需关心数据分区的管理,软硬件升级,配置更新,集群扩容等繁琐运维任务。
  1. 灵活的数据模型
  • OTS 的表无固定格式要求,每行的列数可以不相同,支持多种数据类型 (Integer、Boolean、
    Double、String、Binary)。
  1. 监控集成
  • 用户可以从 OTS 控制台实时获取每秒请求数、平均响应延时等监控信息。

  这些概括性的对OTS的特点进行了描述,具体量化的服务提供标准如可用率等可以参见官网:

表格存储(Table Store)服务等级协议

  这里可以给大家提供几个主要数据,供大家参考:

  1. 单表百TB级别数据规模,十万级别QPS。(传统单机数据库的100倍)
  2. 10毫秒级别单行读写延迟
  3. 分钟级别单机故障恢复时间

OTS数据模型

   OTS 数据模型概念包括表、行、主键和属性。

  表是行的集合,行由主键和属性组成。主键列和属性列均由名称和值组成。表中的所有行都必须包含相同数目和名称的主键列,但每行包含的属性列的数目可以不固定,名字和数据类型也可以不同。

  与主键列不同,每个属性列可以包含多个版本,每个版本号(时间戳)对应一个列值。

  图示如下:

  对于接触过数据库的人来说,理解上面的模型不是很困难,同样也有主键和属性列之分,但需要我们注意的是复合主键最多只能包含4列,此外让我们疑惑的是模型里面出现了分区键(partition key)这个概念,这又是干什么的?

分区键(Partition Key)

  还记得我们在说OTS特点的时候第一个就提到了它的扩展性,对于OTS来说扩展性是它很大的一个亮点,而要实现它的扩展性,与分区键的关系密不可分。

在OTS存储中,一张大表会被自动的切分成很多个数据分区(也叫partition),这些partitions被尽量均匀的调度到不同的存储节点上进行数据的存储和请求的处理。当一个partition的数据规模增长到一定大小或者这个partition上的请求过热,可以对这个partition进行分裂,分裂成数据规模更小的两个partition,也对落到原先这个partition上的请求进行了分摊。分裂之后的partition会被迁移到不同的存储节点上,从而减小原始节点上的访问压力。当机器资源不足进行扩容时,也可以触发partition的迁移从而达到数据和访问压力的均衡。通过partition的切分、分裂和迁移等机制,OTS支持数据和访问规模的动态伸缩。

  一般情况下,我们将组成主键的第一个主键列作为分区键, 具有相同分区键的行属于同一个分片,一个分片可能包含多个分片键。分片的过程是自动进行的,无需用户进行干涉。

  我们需要牢记的是,分区键对于OTS来说是一个很重要的因素,我们在设计表结构的时候一定要根据应用需求设计出一个合理的分区键,设计的一些准则和建议可以参考这篇文章——OTS最佳实践——设计良好的主键

列值类型

  OTS一共支持五种类型的列值String、Integer、Double、Boolean、Binary。每种类型有如下限制:

类型 能否作为主键 空间占用限制
String UTF-8 字符串,可以为空字符串 不超过 64KB,如果为主键列不超过1KB
Integer 范围为 -2ˆ63 ~ 2ˆ63-1 的 64 位整型 固定 8Byte
Double 范围为 -10ˆ308 ~ 10ˆ308 的双精度浮点数 固定 8Byte
Boolean 值为 True 或 False 固定 1Byte
Binary 二进制数据,可以为空 不超过64KB

OTS支持的操作

表操作

  1. ListTable -- 列出实例下的所有表
  2. CreateTable -- 创建表
  3. DeleteTable -- 删除表
  4. DescribeTable -- 获取表的属性信息
  5. UpdateTable -- 更新表的预留读写吞吐量配置

数据操作

  • 单行操作

    1. GetRow -- 读取单行数据
    2. PutRow -- 新插入一行。如果该行内容已经存在,先删除旧行,再写入新行
    3. UpdateRow -- 更新一行。应用可以增加、删除一行中的属性列,或者更新已经存在的
      属性列的值。如果该行不存在,那么新增一行
    4. DeleteRow -- 删除一行
  • 批量操作
    1. BatchGetRow -- 批量读取一张或者多张表的多行数据
    2. BatchWriteRow -- 批量插入、更新、删除一张表或者多张表的多行数据
  • 范围读取
    1. GetRange -- 读取表中一个范围内的数据

操作说明

  在OTS中开发者是通过统一的HTTP Restful API来完成上述操作的。详细的操作说明,和数据的格式请参考官网文档:API操作概览

OTS典型应用场景

  看到这里我们对于OTS已经有了一个大致的了解,它有很多特别的优点,但任何一款产品并不是万能的,并不能适用于所有的领域。下面我们来看看根据OTS的这些特性,它针对那些应用场景特别适用:

移动社交

  使用OTS来存储人与人之间产生的大量社交信息,包括聊天、评论、跟帖和点赞,OTS的弹性资源按量付费能够以较低的成本满足访问波动明显大并发低延时的需要。

金融风控

  低延时、高并发,弹性资源可以让的风控系统永远工作在最佳状态,牢牢控制交易风险,灵活的数据结构能够让业务模式跟随市场需求快速迭代。

电商物流

  大量的交易订单及物流跟踪信息,使用OTS能够让使用者无需担心数据规模,它的弹性资源,可以从容应对节日促销活动。

云存储解决方案

  大量的联系人、短信、通话记录、便笺等结构化信息与图片、视频、文件的元数据正好与OTS数据模型相对应,并且OTS的备份机制可以保障这些数据的安全性。

日志监控

  我们可以将应用程序的监控和日志信息写入OTS,提供在线的日志检索,并利用离线数据处理服务ODPS进行监控与日志分析,挖掘其中的数据价值。

  目前阿里内部采用OTS的产品有:

  1. 云OS云空间
  2. 钉钉即时聊天、用户关系和行为跟踪数据
  3. 冰火鸟TCIF
  4. ODPS meta存储

实例说明

  我们通过一个例子来应用下上面的知识点,加深对OTS的理解吧。

手机云空间

  我们就拿OTS典型的手机云空间这个例子来做说明:

应用需求

  • 存储手机用户的联系人、通话记录、短信、便签
  • 目标是上千万的手机用户,每个用户数据永久保留,数据规模未来可达几百TB

基于OTS的解决方案

  • 不同的业务数据放在不同的数据表中,属于一个表组,以userid为partition key进行数据分区
  • 每张业务表都附带多张视图,满足不同顺序的数据查询需求
  • 表组中还有一张用户数据统计表,对其他表的操作同时对该表的记录内容进行更新,确保数据的一致性

表结构设计模型

用户表

用户ID 短信数目 联系人数目 总容量
U0001 2000 200 100,000,00
U0002 1024 500 100,000,00
... ... ... ...

短信表

用户ID 接收时间 唯一ID 对方号码 短信内容 短信类型
U0001 2016-08-09 0001 123456 hello 接收
U0002 2016-08-09 0002 123445 hi 发送
... ... ... ... ... ...

。。。

  用户其他信息的表格设计类似于短信表。我们可以看到对于这些不同的表,我们可以将用户ID作为其 分区键 这样同一用户的所有信息都会存储在同一数据分区下,读写遍历的同时,也可以支持对同一用户不同表数据的事务操作。

文章为了让大家快速认识OTS有些细节东西没有讲,例如这里提到的事务操作,在OTS中同样可以支持事务的提交和回滚操作,事务可以应用在同一个表中,也可以应用在同一分区下的表格中。对于这些细节部分大家可以看官文的帮助文档进行学习:OTS官方帮助文档

  接着我们的分析,我们短信表中有个唯一ID这个属性列,这个列起到的作用是防止主键重复,我们知道在所有的数据库中主键可用于唯一区分数据库不同的行不能重复,但有些情况下当我们用几个属性列设置了复合主键后依然会有重复的可能例如这里的短信表,这时候我们就可以引如一个没有实际意义的属性列作为复合主键中的唯一区分不同行的变量因素,这就是唯一ID属性段的作用。

  其他的一些分析不是很难,大家按照自己的理解即可。可以看到当我们熟悉关系型数据库的使用后,理解和使用OTS没有多大的障碍。

时间: 2024-09-29 21:24:46

快速认识OTS的相关文章

MaxCompute访问TableStore(OTS) 数据(20170601更新)

免费开通大数据服务:https://www.aliyun.com/product/odps 0. 前言 MaxCompute作为阿里云大数据平台的核心计算组件,承担了集团内外大部分的分布式计算需求.而MaxCompute SQL作为分布式数据处理的主要入口,为快速方便处理/存储EB级别的离线数据提供了强有力的支持. 随着大数据业务的不断扩展,新的数据使用场景在不断产生,在这样的背景下,MaxCompute计算框架也在不断的演化,原来主要面对内部特殊格式数据的强大计算能力,也正在一步步的开放给不同

阿里云开放结构化数据服务OTS介绍

阿里云,开放结构化数据服务(Open Table Service,简称OTS)是一种NoSQL服务,面向结构化数据与半结构化数据,提供海量存储和实时查询能力,具有强一致.高并发.低延迟以及支持灵活的数据模型等特点.它有以下优势: 单表支持百TB级别的服务能力 Ÿ   保证稳定而快速的响应时间 Ÿ   单表的吞吐能力(CU)高度可扩展 强一致的读写 Ÿ   确保读取的始终是最新值 高可用与高可靠 Ÿ   基于飞天分布式操作系统,可用性达99.9%,数据可靠性达99.9999999% Ÿ   单机故

使用MaxCompute访问TableStore(OTS) 简明手册

关系数据库已经存在半个世纪,有非常广泛的使用场景,但是在快速迭代的互联网领域其扩展性和 schema 灵活性被诟病颇多,因此类似 TableStore/BigTable/HBase 等强调扩展性和灵活性的NoSQL数据库逐步流行起来,这些 NoSQL 数据库只提供 API 接口,不提供 SQL 访问,这就导致很多熟悉 SQL 但是不喜欢写代码的用户没法很舒服的使用此类NoSQL数据库.基于此,表格存储开发团队联合 MaxCompute(下文中 ODPS 与 MaxCompute 同义)团队打通了

仇应俊:OTS产品设计和技术实践

2014年12月27日,阿里云课堂第五期在深圳开课,"结构化存储与结构化数据服务的技术实践"主题分享在众多朋友的期待下精彩上演,现场观众再次爆满.本次活动中,仇应俊和杨成虎(花名:叶翔)两位讲师为大家献上了精彩演讲,并在OpenSpace环节与观众展开讨论,积极互动.应广大用户要求,我们将云课堂讲师现场分享内容全文整理出来,供大家参考.阿里云课堂会继续在全国各地陆续开课,欢迎大家继续支持!   以下为讲师仇应俊的分享内容:         今天我想从几个方面跟大家分享一下OTS产品相关

win7系统下关闭闭英特尔快速存储技术的方法教程

  Intel快速存储技术是一种可以提高磁盘的读写性能和保护磁盘的技术.不过使用该存储服务会占用大量的系统资源,如果你不需要该功能河东软件园小编建议你将其关闭,那么在win7系统下如何关闭Intel快速存储技术呢?下面我们看下详细的操作方法吧! 第一步.Win7系统如果安装了Intel快速存储技术支持的话,在桌面的,右下角会显示下面所示的图标. 第二步.双击托盘里面的Intel快速存储技术图标的话,就会弹出来下图所示的窗口,这其实就是快速存储服务的控制面板. 第三步.直接单击管理选项,也可以单击

Photoshop快速给山峰图片加上厚厚的冰雪

  Photoshop快速给山峰图片加上厚厚的冰雪.作者制作冰雪的方法非常实用,过程:用魔棒工具选取想要的区域,并把选区部分的图像复制到新的图层;然后用色相/饱和度降低饱和度,增加明度得到初步的冰雪效果;后期再用透明度较低的柔边白色画笔把过渡涂抹自然即可. 原图 最终效果 1.用魔棒工具,容差25,点击山峰的明亮部分,因为山体是有轮廓的,通常斜坡被阳光照射时会明亮,而直面峭壁明亮度不够,所以肉眼观察时会呈现山体轮廓,通过画面山体轮廓,我们知道亮的部分就是斜坡,也是被雪覆盖最多的部分.魔板工具选取

Photoshop快速制作一根香烟

  Photoshop快速制作一根香烟.香烟构成非常简单,也非常适合新手练习.重点:学习一些组合图形的绘制方法;用图层样式来增加质感;细节部分的简单刻画等. 最终效果 1.新建大小自定文档,背景填充暗灰色.新建图层,没用矩形工具,椭圆工具画出香烟的外形. 2.用直线工具画出香烟上的纹理. 3.选择香烟嘴的图层,在香烟嘴图层用椭圆工具画出一个椭圆,为方便调整,现将透明度调整成80%. 4.再次选择椭圆工具并调整成减去顶层形状,在圆上方的位置画出一个比他小一些的圆形,得到以下图形,并将透明度调回10

4个流程帮你快速搞定运营设计!

  请同学们留出3--5分钟,看完这条微博要用.前两天<我是歌手>失控,汪涵超强的救场能力让大家都看到他背后几十年的沉淀.同理,设计师想适应运营短且快的特点,持续高产,有一套可执行的流程非常重要.微博之后,更加精彩 >>> 在现如今的社会中,每天都在进行着一场场没有硝烟的商战.运营设计则是至关重要的一部分.那么怎么才能做出一个好的运营设计或者一个相对比较成功的运营设计呢?我们要知道设计的目的. 设计的目的是什么? 设计核心在于能够让用户在有限的时间内Get最有价值的信息,找到

哪种字体最适合快速阅读?(附搭配建议)

  什么样的字体兼具易认性和可读性?中英字体该如何搭配才能保证顺畅阅读?今天分享一篇专业的字体搭配科普文,有图有分析,还有贴心的中英字体搭配建议 >>> 阿卡林:这个问题涉及了两个概念:易认性(Legibility)和可读性(Readability). 易认性是辨识单个字符的难易度,也就是「辨认起来的方便程度」. 可读性是辨识整个单词,整个句子,整段文字的难易度,也就是在一大段文字丢给读者时,读者「阅读起来的快慢程度」. (以上引用来自于维基百科) 事实上,我们在报刊杂志中或者屏幕上所能