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

表格存储是阿里云第一个分布式多模型数据库,是一种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(文档)。

你可能感兴趣的:(java,ui,开发语言)