表存储数据模型:宽列和时间序列

news/2025/2/3 21:56:25/

表格存储是阿里云第一个分布式多模型数据库,是一种NoSQL数据库。目前,很多应用系统底层不再单纯依赖关系型数据库,而是根据不同的业务场景使用不同的数据库。例如,缓存KeyValue数据将存储在Redis中,文档数据将存储在MongoDB中,图形数据将存储在Neo4J中。

回顾NoSQL的发展:NoSQL诞生于Web 2.0时代。互联网快速发展的时代也带来了互联网数据的爆炸式增长。传统的关系数据库无法处理如此海量的数据,需要具有高扩展性的分布式数据库。然而,基于传统的关系数据模型实现高可用、可扩展的分布式数据库是非常具有挑战性的。互联网上大多数数据的数据模型都很简单,不需要关系模型来建模。如果能够用更简单的数据模型来代替关系模型到模型的数据,弱化事务和约束,以高可用性和可扩展性为目标,那么这样设计的数据库会更好地满足业务需求。这样的理念推动了NoSQL的发展。

图片标题

综上所述,NoSQL的发展是基于互联网时代业务的新挑战和对数据库的新需求。基于此发展起来的NoSQL具有鲜明的特点:

最新的 DZone 参考卡

NoSQL 迁移要点


多数据模型:为了满足不同数据类型的需求,创建了许多不同的数据模型,例如KeyValue、Document、Wide Column、Graph和Time Series。这是NoSQL数据库最显着的特点之一,它突破了关系模型的限制,选择了多元化的发展方向。数据模型的选择更加面向场景,更加符合业务的实际需求,并且可以进一步优化。
高并发、低延迟: NoSQL数据库的发展主要是由线上业务的需求驱动,其设计目标更多的是为线上业务提供高并发、低延迟的访问。
高可用: 为了应对数据量的爆发式增长,可扩展性是核心设计目标之一,因此在设计之初往往会考虑分布式底层架构。
图片标题

DBEngines的发展趋势表明,各种NoSQL数据库近年来取得了长足的发展。阿里云TableStore作为分布式NoSQL数据库,在数据模型上采用了多模型架构,同时支持Wide Column和Time Series。

Wide Column模型是BigTable提出的经典模型,并被其他同类型系统广泛使用。目前世界上大部分半结构化和结构化数据都是采用这种模型存储的。除了Wide Column模型之外,我们还引入了另一种新的数据模型:时间序列,新一代消息数据模型,适用于IM、Feed、IoT设备等消息系统中消息的存储和同步下推,现在被广泛使用。接下来,对这两种模型进行详细描述。

宽柱模型
宽列模型阿里云

上图是宽柱模型的示意图。为了更好地理解这个模型,我们拿一个关系模型来进行比较。关系模型可以简单理解为由行和列组成的二维模型,每行的模式都是固定的。所以关系模型的特点是二维的、固定模式,这是除了事务和约束之外最简单的理解。宽列模型是在行列二维的基础上增加了时间维度的三维模型。时间维度体现在属性列中,属性列有多个值,每个值对应一个时间戳作为版本。并且每一行都是无模式的,没有强模式定义。所以宽列模型和关系模型的区别是:三维、无模式、简化事务和约束。

该模型包括:

主键:每一行都有一个主键,由多个(1 - 4)列组成。主键是用固定的模式定义的,主要用于唯一标识一行数据。
分区键:主键的第一列称为分区键,用于对表进行分区。每个分区都分布到不同的机器上进行服务。在同一分区键内,提供跨行事务。
属性列:一行中除了主键列之外的所有列都是属性列。一个属性列对应多个值,不同的值对应不同的版本,一行可以存储无限个属性列。
版本:每个值对应不同的版本,其值是定义数据生存时间的时间戳。
数据类型:表格存储支持多种数据类型,包括String、Binary、Double、Integer、Boolean。
生存时间:可以为每个表定义生存时间。例如,如果配置生存时间为1个月,则1个月之前写入表数据的数据会被自动清理。数据的写入时间由版本决定,一般由服务器端写入数据时的服务器时间决定,也可以由应用程序指定。
MaxVersion:可以为每个表定义每列保存的最大版本数,用于控制某列的版本数。超过最大版本数的数据将被自动清理。
宽列模型的特点概括为三维结构(行、列、时间)、宽行、多版本数据、生存时间管理。另外,在数据操作方面,Wide Column模型提供了两种数据访问API:Data API和Stream API。

数据接口
Data API是标准的数据API,提供在线数据读写,包括:

PutRow:插入新行,如果存在则覆盖同一行。
UpdateRow:更新一行,可用于添加或删除一行中的属性列,或者更新现有属性列的值。如果该行不存在,将插入新行。
删除行:删除一行。
BatchWriteRow:批量更新多个表中的多行数据,可以组合PutRow、UpdateRow、DeleteRow。
GetRow:从行中读取数据。
GetRange:扫描某个范围内的数据,可以按升序或降序排列。
BatchGetRow:批量读取多个表中的多行。
流媒体接口
在关系模型数据库中,对于数据库中的增量数据没有标准的API,而在传统关系数据库的很多应用场景中,增量数据(binlog)的使用是不可忽视的。这在阿里巴巴内部被广泛使用,并提供了DRC中间件来充分利用这部分数据。充分利用增量数据后,我们在技术架构上可以做很多事情:

异构数据源复制:MySQL数据可以增量同步到NoSQL进行冷数据存储。
与流计算集成:可以对某些控制室显示应用程序实时分析MySQL数据。
与搜索系统集成:搜索系统可以扩展为MySQL的二级索引,增强MySQL的数据检索能力。
然而,即使关系数据库的增量数据有用,业界也没有标准的API定义来获取这些数据。TableStore很早就认识到这些数据的价值,并提供了标准的API来充分利用这些数据。这是我们的 Stream API(文档)。


http://www.ppmy.cn/news/1172006.html

相关文章

驱动开发LED灯绑定设备文件

头文件 #ifndef __HEAD_H__ #define __HEAD_H__typedef struct {unsigned int MODER;unsigned int OTYPER;unsigned int OSPEEDR;unsigned int PUPDR;unsigned int IDR;unsigned int ODR; }gpio_t;#define PHY_LED1_ADDR 0x50006000 #define PHY_LED2_ADDR 0x50007000 #defin…

vue 生命周期钩子函数 created()案例

通过发请求来获取数据。在数据响应化之后&#xff0c;dom搭建之前&#xff0c;通过发送axios来获取数据并初始化。 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible"…

UVM 验证方法学之interface学习系列文章(八)《interface不小心引入X态问题》

前面的文章学习,想必大家都对interface 有了深入了解。大家可不要骄傲哦,俗话说:小心驶得万年船。今天,再给大家介绍一个工作中,不是经常遇到,但是一旦遇到,会让你纠结很久的事情。 前面文章提到,随着验证复杂度的不断增加,interface 的bind 的操作,是必不可少的用法…

《红蓝攻防对抗实战》四.内网探测协议出网之ICMP协议探测出网

目录 一.Windows系统探测ICMP协议出网 1. Ping命令 2.Tracert 命令 二.Linux系统探测ICMP协议出网 1. Ping命令 ICMP&#xff08;Internet Control Message Protocol&#xff09;是一种面向无连接的协议&#xff0c;属于网络层的协议&#xff0c;用于检测网络通信故障和实…

使用Java实现汉诺塔问题~

我们设A为起始柱子&#xff0c;B为辅助柱子&#xff0c;C为目标柱子 由于盘子只能是大的放在下面&#xff0c;小的放在上面&#xff0c;因此&#xff0c;我们需要先将A柱子除了最下层的盘子都移动至B柱子 如下所示完成了最下层柱子到达它的最终位置&#xff0c;接下来&#xf…

【大数据 - Doris 实践】数据表的基本使用(四):动态分区

数据表的基本使用&#xff08;四&#xff09;&#xff1a;动态分区 1.原理2.使用方式3.动态分区规则参数3.1 主要参数3.2 创建历史分区的参数3.3 创建历史分区规则3.4 创建历史分区举例3.5 注意事项 4.示例4.1 创建动态分区表4.2 查看动态分区表调度情况4.3 查看表的分区4.4 插…

ES(elasticsearch) - kibana导出csv

前言 主要记录使用Kibana导出查询结果的csv文件&#xff0c;以及相关的导出配置 1.条件过滤 Discover -> 选择索引模式 -> 选择要显示字段 -> 输入你的查询条件 -> 选择时间范围 -> 点击保存 2.下载 management> Kibana > Reporting 中下载 3.常见问题…

小白也会的校园网宽带拨号自动重连设置

开始菜单搜索“任务计划程序”&#xff1a;我这个开始菜单和你们的不太一样&#xff0c;用了StartAllBack设置的&#xff0c;总之能找到这个程序就行了 提示&#xff1a;可以按下“Win R”&#xff0c;打开“运行”&#xff0c;输入taskschd.msc来打开任务计划程序 点击“任务…