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

表格存储是阿里云第一个分布式多模型数据库,是一种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.mzph.cn/news/115738.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MySQL中的表操作,配置文件,储存引擎,数据类型

MySQL中的表操作 1 查库(已密码登陆mysql) show databases; 2 添加库 create database t1; 3 表操作 1选定操作库 use t1 2在库里添加表格式 create table t1(id int, name varchar(32), gender varchar(32),age int); 3往表里添加具体元素 insert…

webgis开发参考资料

一、ArcGIS相关 1、ArcGIS for Server 10.3.X 新型紧凑型缓存的解读和应用 http://zhihu.geoscene.cn/article/1038 2、arcgis server 紧促(bundle)格式缓存文件的读取 https://blog.csdn.net/abc553226713/article/details/8668839 3、ArcGIS 10.0紧…

智慧燃气巡检管理系统

我们知道燃气设施的巡检、巡查是运维工作中一项重要的基础工作,而巡检人员主要靠手动记录,回到公司后还得再进行录入归档、导入照片,然后打印装订等,涉及工作量也是不小的;还有人员更替,易造成人员对燃气设…

GPT-2源码实现及GPT-3、GPT-3.5、GPT-4及GPT-5内幕解析

GPT-2源码实现及GPT-3、GPT-3.5、GPT-4及GPT-5内幕解析 Gavin大咖微信:NLP_Matrix_Space 5.1 ChatGPT提示词流程解析 本节主要是跟大家剖析 GPT内部的源码,在进入源码及运行项目之前,我们先思考一下ChatGPT的机制,ChatGPT默认情况下使用的模型是GPT-3.5,作者在日常工作中使…

模型部署笔记--Pytorch-FX量化

目录 1--Pytorch-FX量化 2--校准模型 3--代码实例 3-1--主函数 3-2--prepare_dataloader函数 3-3--训练和测试函数 1--Pytorch-FX量化 Pytorch在torch.quantization.quantize_fx中提供了两个API,即prepare_fx和convert_fx。 prepare_fx的作用是准备量化&#…

supervisor的使用

一、supervisor简介 Supervisor是用Python开发的一套通用的进程管理程序,能将一个普通的命令行进程变为后台daemon,并监控进程状态,异常退出时能自动重启。它是通过fork/exec的方式把这些被管理的进程当作supervisor的子进程来启动&#xff…

Leetcode 2909. Minimum Sum of Mountain Triplets II

Leetcode 2909. Minimum Sum of Mountain Triplets II 1. 解题思路2. 代码实现 题目链接:2909. Minimum Sum of Mountain Triplets II 1. 解题思路 这一题思路上就是一个累积数组的思路。 我们要找一个山峰结构,使得其和最小,那么我们只需…

【GWO-KELM预测】基于灰狼算法优化核极限学习机回归预测研究(matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

Dapper中使用字符串作为动态参数查询时,结果不是预期的问题

1、如下图,c.industryId作为string类型当作参数传递,解析时会加单引号,即:”c.industryId“, 生成的查询语句就会变成 -- 这里把c.IndustryGroup 当成实际的值所以会查询不出数据 select b.Name,COUNT(c.Id) Num …

爬虫模拟用户登录

使用爬虫模拟用户登录过程一般包括以下几个步骤: 导入所需的库:一般需要导入requests和BeautifulSoup库来发送HTTP请求和解析HTML。 import requestsfrom bs4 import BeautifulSoup 发送GET请求获取登录页面:使用requests库发送GET请求&#…

Spring Boot OAuth 2.0整合详解

目录 一、Spring Boot 2.x 示例 1、初始化设置 2、设置重定向URI 3、配置 application.yml 4、启动应用程序 二、Spring Boot 2.x 属性映射 二、CommonOAuth2Provider 三、配置自定义提供者(Provider)属性 四、覆盖 Spring Boot 2.x 的自动配置…

数学建模——最大流问题(配合例子说明)

目录 一、最大流有关的概念 例1 1、容量网络的定义 2、符号设置 3、建立模型 3.1 每条边的容量限制 3.2 平衡条件 3.3 网络的总流量 4、网络最大流数学模型 5、计算 二、最小费用流 例2 【符号说明】 【建立模型】 (1)各条边的流量限制 &a…

Java赋值运算符(=)

赋值运算符是指为变量或常量指定数值的符号。赋值运算符的符号为“”,它是双目运算符,左边的操作数必须是变量,不能是常量或表达式。 其语法格式如下所示: 变量名称表达式内容 在 Java 语言中,“变量名称”和“表达式…

执行autoreconf -fi的过程报错

https://xie.infoq.cn/article/6bba9dd34fb49b7adacb4aacd https://github.com/curl/curl/blob/master/docs/HTTP3.md#quiche-version curl配置quiche的过程中报错, configure:7902: error: possibly undefined macro: AC_LIBTOOL_WIN32_DLLIf this token and ot…

Linux常用的调试工具

在开发和调试Linux的过程中,经常会遇到各种各样的问题,如程序崩溃、性能低下、内存泄漏等。这时候,调试就显得尤为重要。调试技巧和工具能够帮助开发人员快速定位问题并快速解决。在本文中,我们将介绍一些常用的Linux调试技巧和工…

acwing第 126 场周赛 (扩展字符串)

5281. 扩展字符串 一、题目要求 某字符串序列 s0,s1,s2,… 的生成规律如下: s0 DKER EPH VOS GOLNJ ER RKH HNG OI RKH UOPMGB CPH VOS FSQVB DLMM VOS QETH SQBsnDKER EPH VOS GOLNJ UKLMH QHNGLNJ Asn−1AB CPH VOS FSQVB DLMM VOS QHNG Asn−1AB,其…

MyBatis源码基础-常用类-Configuration

Configuration Configuration类a.java配置b.构建配置类 Configuration类 a.java配置 针对上述的xml配置,可以使用如下的java代码替换: Test public void testConfiguration() {Configuration configuration new Configuration();// 配置propertiesPr…

C++中作为类实例的对象

C中作为类实例的对象 类相当于蓝图,仅声明类并不会对程序的执行产生影响。在程序执行阶段,对象是类的化身。要使用类的功能,通常需要创建其实例—对象,并通过对象访问成员方法和属性。 在C中。类的对象就是该类的某一特定实体&a…

canvas绘制动态视频并且在视频上加上自定义logo

实现的效果&#xff1a;可以在画布上播放动态视频&#xff0c;并且加上自定义的图片logo放在视频的右下角 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><meta name"viewport" content"widthd…