表格存储TableStore是阿里云自研的面向海量结构化和半结构化数据存储的Serverless NoSQL多模型数据库,被广泛用于社交、物联网、人工智能、元数据和大数据等业务场景。表格存储TableStore采用与Google Bigtable类似的宽表模型,天然的分布式架构,能支撑高吞吐的数据写入以及PB级数据存储。

原生的宽表数据模型,存在一些天然的缺陷,例如无法很好的支持属性列的多条件组合查询,或者更高级的全文检索或空间检索。另外在与计算系统的对接上,特别是流计算场景,传统的大数据Lambda架构,需要用户维护多套存储和计算系统,没法很天然的支持数据在存储和计算系统之间的流转。以上这些问题,均在表格存储TableStore在支持阿里巴巴集团内、阿里云公共云以及专有云等业务中逐渐暴露出来。

表格存储TableStore简单可靠的数据模型和架构,开始承担越来越丰富的不同类型的数据存储,例如时序时空数据、元数据、消息数据、用户行为数据和轨迹溯源数据等。越来越多的客户也开始把表格存储TableStore当做一个统一的在线大数据存储平台,所以我们迫切需要支持海量数据中对数据的高效查询、分析和检索。同时也需要考虑如何更贴近业务,抽象出更贴近业务的数据模型,让数据的接入变得更加简单。

在2019年3月6日的云栖发布会,表格存储TableStore对以下几个方面做了重大升级:

  1. 提供多种数据模型,满足不同数据场景的需求,简化数据建模和开发。
  2. 提供多元化索引,满足不同场景下简单或复杂条件查询的功能需求。
  3. 提供实时数据通道,无缝对接流计算引擎,支持表内数据的实时更新订阅。

多模型

表格存储TableStore在选择要支持的数据模型的时候,更多的综合了当前业务现状以及用户画像,提取大部分客户的通用需求,总结和定义了产品适合的几大类核心数据场景,来抽象和定义数据模型。数据模型的定义分为『具象』和『抽象』:抽象模型是类似于关系模型或者文档模型的能满足大部分类型数据的抽象,属于比较通用的数据模型;具象模型是对某一具体特征场景数据的抽象,适合单一垂直类的数据场景。表格存储TableStore同时提供抽象和具象模型,当然在介绍这些模型之前,先来明确我们的核心数据场景。

核心场景

表格存储TableStore的核心场景包含这五大类,分别对应不同类型的应用系统,以及每类数据场景下数据有典型的特征和对存储和计算的特殊的需求,简单来说:

  • 时序数据:时序数据解决的是对包含4W(Who, When, Where, What)元素数据的抽象,数据量相对比较庞大,需要存储引擎支持对时间线的索引以及对时间线的时间范围查询。
  • 时空数据:时空数据是基于时序数据加上了空间的维度,同时可能没有时序数据的连续性。总的来说,特征和时序数据比较类似。
  • 消息数据:消息数据广泛存在于消息系统,例如即时通讯消息系统或者Feeds流消息系统内。消息的存储和传递更像是消息队列模型,但是要求消息队列能够提供海量级消息存储以及海量Topic,这是传统专业级消息队列产品所无法支撑的。
  • 元数据:这类元数据属于非关系类元数据,例如历史订单数据、图片智能标签元数据点。特点是量级比较大,每个数据存在的属性比较多且是稀疏的,要求存储能够支持对各种维度属性的条件过滤,对查询可用性有比较高的要求。
  • 大数据:这是Bigtable模型所对应的最主要数据场景,特点是数据量极其庞大,需要很好的支持批量计算。

TableStore多模型

基于以上总结的表格存储TableStore所针对的核心数据场景,我们从业务需求中抽象出三大类数据模型,分别是:WideColumn(宽行模型)、Timeline(消息模型)和Timestream(时序模型)。

宽行模型

宽行模型是由Bigtable提出,特征是:

  • 三维数据结构:对比MySQL的二维数据结构,在属性列这一维度上多了版本属性。同一列数据可以存储多个不同版本,并可定义不同的生命周期,主要用于数据的自动化生命周期管理。
  • 稀疏列:表不需要有强格式定义,可以任意的对每一行定义列和类型。
  • 大表:一张表可以存储万亿行数据,大表数据根据分区键的范围来分区,不同的分区由不同的机器来加载和提供服务,能比较简单的实现分布式。

宽行模型主要应用于元数据和大数据场景,一些典型应用场景可参考:

  • 《TableStore实战:智能元数据管理方案》
  • 《TableStore实战:亿量级订单管理解决方案》
  • 《百亿级全网舆情分析系统存储设计》
  • 《基于云上分布式NoSQL的海量气象数据存储和查询方案》

我们也提供HBase API兼容的Client:《使用HBase Client访问阿里云NoSQL数据库表格存储》。

消息模型

消息模型是表格存储TableStore针对消息数据所抽象的数据模型,主要适用于消息系统中海量消息存储和同步,特征是:

  • 轻量级消息队列:大表中能模拟海量消息队列,虽然不能完全模拟一个真正消息队列的所有能力,但是能满足对消息最基本的存储和同步能力。
  • 消息永久存储:能保证对数据的永久存储,消息写入和同步的性能不会受到数据规模的影响。
  • 消息同步模型:对消息同步模型没有严格要求,应用层可以根据自己的业务特征,同时实现推模型或者拉模型。

消息模型主要应用于消息数据场景,一些典型应用场景可参考:

  • 《现代IM系统中消息推送和存储架构的实现》
  • 《TableStore Timeline:轻松构建千万级IM和Feed流系统》
  • 《如何打造千万级Feed流系统》
  • 《基于TableStore构建简易海量Topic消息队列》
  • 《如何快速开发一个IM系统》

时序模型

时序模型主要应用与时序和时空场景,也是表格存储TableStore综合了业界主流的时序数据库,所定义和抽象的数据模型,特征是:

  • 海量数据存储:能提供PB级数据存储,可打造多租户的时序数据库底层存储,写入和查询性能不受数据规模的影响。
  • 时间线索引:提供对时间线的索引,能满足对时间线Tag的任何条件组合过滤,并且能够支持比较海量的时间线规模。
  • 完整的模型定义:在业界标杆的时序数据库模型定义上,补充了空间维度的定义并且提供空间索引,以及支持多列值支持,不限制只对数值类型的支持。

时序模型主要应用于时序和时空数据,一些典型应用场景可参考:

  • 《TableStore时序数据存储 - 架构篇》
  • 《TableStore实战:轻松实现轨迹管理与地理围栏》

查询优化

上述场景中提到的对于表内数据的查询优化,最基本手段就是需要对数据建立索引。表格存储TableStore选择的做法是,对于不同类型的查询场景,我们需要提供不同类型的索引。业界对海量数据建立索引的方案有多种,在传统技术架构中应用比较多的主要包括Phoenix SQL二级索引或者Elasticsearch搜索引擎。二级索引能提供高效的固定维度的条件查询,查询性能不受数据规模的影响,而Elasticsearch搜索引擎能提供比较灵活的多条件组合查询、全文索引和空间索引。两种类型的索引实现,有不同的优缺点,以及适用于不同的场景。表格存储TableStore的做法是同时实现和这两类索引原理类似的索引,来满足不同场景下对查询的不同需求。

全局二级索引

当用户创建一张表时,其所有PK列构成了该表的『一级索引』:即给定完整的行主键,可以迅速的查找到该主键所在行的数据。但是越来越多的业务场景中,需要对表的属性列,或者非主键前缀列进行条件上的查询,由于没有足够的索引信息,只能通过进行全表的扫描,配合条件过滤,来得到最终结果,特别是全表数据较多,但最终结果很少时,全表扫描将浪费极大的资源。表格存储TableStore提供的全局二级索引功能支持在指定列上建立索引,生成的索引表中数据按用户指定的索引列进行排序,主表的每一笔写入都将自动异步同步到索引表。用户只向主表中写入数据,根据索引表进行查询,在许多场景下,将极大的提高查询的效率。更多的技术解读,请参考这篇文章《通过全局二级索引加速表格存储上的数据查询》。

多元索引

表格存储TableStore多元索引是表格存储TableStore重点打造的一个多功能索引能力,旨在补位二级索引无法覆盖的场景,解决大数据场景下的复杂查询和轻量级分析问题,比如多字段组合查询、前缀查询、通配符查询、嵌套查询、全文检索(分词)、地理位置查询、排序和统计聚合等功能。关于对多元索引的更多解读,可以阅读这篇文章《TableStore多元索引,大数据查询的利器》,关于多元索引的更多应用场景,可以参考以下文章:

  • 《TableStore:交通数据的存储、查询和分析利器》
  • 《TableStore:爬虫数据存储和查询利器》

计算衔接

表格存储TableStore已经与比较多的开源大数据计算引擎以及阿里云计算产品衔接,例如Hive、Spark、MaxCompute以及DataLakeAnalytics等,覆盖了批量计算和交互式分析。可以由第三方产品提供的数据通道服务,将表格存储TableStore上的数据全量或者增量复制到计算系统,也可以由计算系统通过Connector直接访问表内的数据。

批量计算和交互式分析访问数据存储的方式是批量扫描,主要通过自定义数据Connector的方式。但是其他类计算系统例如流计算或者函数计算(Lambda架构),数据是需要流式的并且实时的从存储系统到计算系统。这个能力是传统开源Bigtable类数据库所做不到的,例如HBase或Cassandra。

如果表内的数据可以实时的流动,那将给表带来更丰富的计算和处理场景,例如可以做跨域复制、备份,或者接入流计算引擎做实时分析或者函数计算做事件触发式编程,也可以由应用方自定义数据处理,来做个性化数据处理。

表格存储TableStore提供了全新的实时数据通道,能支持订阅表内的实时数据更新,来扩充表格存储TableStore的计算能力。

通道服务

TableStore 通道服务(Tunnel Service)是基于表格存储数据接口之上的全增量一体化服务,通道服务为用户提供了增量、全量、增量加全量三种类型的分布式数据实时消费通道。通过为数据表建立Tunnel Service数据通道,可以简单地实现对表中历史存量和新增数据的消费处理。基于通道服务用户可以轻松的实现如图所示的场景架构:数据同步、搬迁和备份,流式数据处理以及事件驱动架构。

关于对通道服务TunnelService更多的技术解读,可以参考这篇文章:《大数据同步利器: 表格存储全增量一体消费通道》。基于通道服务的更多应用场景,可以参考以下文章:

  • 《实时计算最佳实践:基于表格存储和Blink的大数据实时计算》
  • 《TableStore: 海量结构化数据实时备份实战 》
  • 《TableStore: 海量结构化数据分层存储方案》

总结

表格存储TableStore通过同时提供具象和抽象的数据模型,来满足不同核心数据场景的要求,更贴近业务抽象;提供多元化索引(全局二级索引和多元索引)来满足不同类型场景条件查询需求;提供全新的实时数据通道,来扩充实时计算的能力以及可自定义的实时数据处理。这三大方面的新功能发布,能够让我们在数据模型、灵活查询以及数据分析层面,都有一定的提升,帮助打造统一的在线数据存储平台。

原文链接
本文为云栖社区原创内容,未经允许不得转载。

表格存储TableStore全新升级,打造统一的在线数据存储平台!相关推荐

  1. TableStore发布多元索引功能,打造统一的在线数据平台

    什么是NoSQL "NoSQL"一词最早出现在1998年,距今刚好二十年.站在今天回头看的话,很少有人能想到在关系型数据库成熟发展了三十年,已经在数据存储领域占据了不可动摇的的地位 ...

  2. 12 | 存储优化(上):常见的数据存储方法有哪些?

    通过专栏前面我讲的 I/O 优化基础知识,相信你肯定了解了文件系统和磁盘的一些机制,以及不同 I/O 方式的使用场景以及优缺点,并且可以掌握如何在线上监控 I/O 操作. 万丈高楼平地起,在理解并掌握 ...

  3. 应用宝7.0版全新升级 打造宅家休闲娱乐必备品

    经过一个星期的疲劳工作,大多上班族在双休会选择宅居家中,通过追剧.阅读.网上购物等方式来消除一周的疲惫.但不少用户会发现,这些网上娱乐还得需在各处找寻资源,颇费脑筋.经不少网友体验推荐,腾讯应用宝最新 ...

  4. 京颐CTO宋建康:如何应对系统高度分化异构的挑战,打造不间断服务的在线交易云平台...

    [现场视频]京颐CTO兼医疗云事业部总经理宋建康:基于医疗核心业务系统的在线交易云平台,点此进入→https://yq.aliyun.com/video/play/1171 摘要:在9月7日云栖专家& ...

  5. 浪潮存储:基于系统级可靠性设计,为数据存储保驾护航

    存储系统是由控制器.背板.结构件.硬盘.内存等部件构成的多个子系统组成,其中任何单一元器件故障都可能导致存储系统出现问题.因此,系统可靠运行的基础,离不开元器件.部件以及整个控制系统的可靠性设计.浪潮 ...

  6. 如何打造有特色的在线教育培训平台

    去年7月中旬,教科文组织针对新冠疫情对高等教育造成的影响所做的一份调查显示,新冠大流行对教学的主要影响是在线教育的增加,混合教学模式已经成为最流行的形式. 在这两年的教育行业新热词中,"OM ...

  7. 单片机C语言数据存储原理,介绍单片机中C语言的数据存储与程序编写

    一.五大内存分区: 内存分成5个区,它们分别是堆.栈.自由存储区.全局/静态存储区和常量存储区. 1.栈区(stack):FIFO就是那些由编译器在需要的时候分配,在不需要的时候自动清除的变量的存储区 ...

  8. 以下用于数据存储领域的python第三方库是-Python数据存储及表示

    [http://naotu.baidu.com/file/15cbc506e3da5e640a40659058d5be24?token=873f2ab3461d8f9a](http://naotu.b ...

  9. android中bmob云存储,我在将Bmob作为云进行数据存储!但不知道如何把img内的文件上传到bmob云中...

    我在将Bmob作为云进行数据存储!但不知道如何把内的文件上传到bmob云中 BMOB提供的js代码如下: 整个文件上传 上传文件有两种方法: 直接上传文件,例如,我们上传一个内容为"Hell ...

最新文章

  1. windows 安装与使用redis
  2. mfc 监控文件操作_mfc是什么
  3. 一周要闻:为什么从百度离职,程序员五件事.......
  4. 在C#中调用一个dll函数,其中有个参数为 hdc,如何在C#中得到这个值并传给这个参数呢?
  5. codeforces 1038a(找最长的前k个字母出现相同次数的字符串)水题
  6. 轻松做性能测试,月入3万的主流测试工具大揭秘
  7. 《Webservice的应用与开发》学习笔记 ·002【XML进阶、XML Schema】
  8. 字节跳动异构场景下的高可用建设实践
  9. Java连接各种数据库的实例
  10. oracle rac 创建ocr,转:Oracle RAC 添加和删除OCR(10g)
  11. python清空画布_关于python:如何清除Tkinter画布?
  12. qq物联网 android sdk,qcloud-iot-sdk-android
  13. 【OpenCV 例程200篇】20. 图像的按位运算(cv2.bitwise)
  14. FTX交易平台与AZA Finance达成合作,推动非洲数字经济发展
  15. 情感分析与观点挖掘第五章笔记(上)/基于方面的情感分析/SentimentAnalysis-and-OpinionMining by Bing Liu
  16. java 持久监听blockqueue的变化_Curator目录监听
  17. ECCV 2022 | 清华腾讯AI Lab提出REALY: 重新思考3D人脸重建的评估方法
  18. Android删除除自定义铃声后,来电铃声显示是一串数字
  19. Distilling Object Detectors with Fine-grained Feature Imitation(2019 CVPR KD)
  20. 基于华为模拟器(ensp)的静态路由配置实验

热门文章

  1. 判断二叉树是否是完全二叉树c语言_完全二叉树的节点数,你真的会算吗?
  2. java velocity是什么意思_基于 Java 的模板引擎Velocity快速入门
  3. python写软件测试用例_Python单元测试框架unittest:单个测试用例编写步骤及实例...
  4. ol xyz 加载天地图_OpenLayers加载天地图方法——WMTS和XYZ
  5. python画饼图存在的问题_Matplotlib 绘制饼图解决文字重叠的方法
  6. python三方库打包项目中_将Python库打包到项目中
  7. 字长16位的计算机表示最大整数_废话不多说跪送计算机选择8前十题
  8. oracle cascade是什么意思啊,Oracle外键(Foreign Key)之级联删除(DELETE CASCADE)
  9. php箱子,webshell箱子php版本.rar
  10. voip和rtc_为什么开发WebRTC与VoIP开发不一样?(上)