了解 kudu 数据模型 | 学习笔记

简介: 快速学习 了解 kudu 数据模型

开发者学堂课程【NoSQL 数据库 Kudu 教程了解 kudu 数据模型学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/723/detail/12913


了解 kudu 数据模型


内容介绍:

一、 table schema

二、 kudu 底层数据模型

三、 tablet 发现过程

 

一、table schema

Kudu 设计是面向结构化存储的,因此, Kudu 的表需要用户在建表时定义它的 Schema 信息,这些 Schema 信息包含:列定义(含类型), Primary  Key 定义(用户指定的若干个列的有序组合)。这一点与 HBase 不相同, HBase 当中需要组件列、族,列可以动态的扩展,而 Kudu 中必须指定清楚,尤其是 Primary  Key 组件,因为 Kudu 根据组件来进行数据的唯一性判断。 Kudu 提供了 Alter 命令来增删列,但位于 Primary  Key 中的列是不允许被删除的。将删除组件这一列时,此时数据的唯一性就很难被判断。

从用户使用角度来看, Kudu 是一种存储结构化数据表的存储系统。在一个 Kudu 集群中可以定义任意数量的 table ,每个 table 都需要预先定义好 schema 。每个 table 的列数是确定的,每一列都需要名字和类型,每个表中可以把其中一列或多列定义为主键。这么看来, Kudu 更像关系型数据库,而不像 HBase Cassandra MongoDB 这些 NoSQL 数据库。不过 Kudu 目前还不能像关系型数据一样支持二级索引。

Kudu 使用确定的列类型,而不是类似于 NoSQL 的“ everything  is byte ”。带来好处:确定的列类型使 Kudu 可以进行类型特有的编码,可以提供元数据给其他上层查询工具。

 

二、kudu 底层数据查询

进行数据存储,就会想到文件存储系统。 Kudu 的底层数据查询,未采用 HDFS 这样的较高抽象层次的分布式文件系统,而是自行开发了一套可基于 Table / Tablet / Replica 视图级别的底层存储系统。

image.png

如图,在 Kudu 中,定义任何一张表,一个物理层面的 Table 表,它会被分成多个 Tablet (表中的水平划分,相当于 HBase 中的区域划分,它有相当的规则,比如根据列的哈希值进行划分等),每个 Tablet 会被分为两大块,MetaData Tablet 的元数据信息,用来记录 Tablet 是属于哪个Table )和 RowSet RowSet 又分为 MemRowSet DiskRowSet ,它会存在于内存和磁盘当中,在内存当中,MemRowSet 主要用于新数据的插入及数据的更新,它的优点在于内存中数据更新的快,缺点在于内存不会无限制的存储。一个 MemRowSet 写满后会将数据刷到磁盘形成若干个 DiskRowSet ,默认是1 G 或者120 S 。在磁盘中的 DiskRowSet 可能会有多个,每刷新一个就会生成一个。在 DiskRowSet 中,又做了划分,首先是 BloomFile ,根据一个DiskRowSet 中的 key 生成一个 bloom  filter ,用于快速模糊定位某个 key 是否在 DiskRowSet 中;接下来是 AdhocIndex ,是主键的索引,用于定位 key DiskRowSet 中的具体哪个偏移位置。 BaseData MemRowSet  flush 下来的数据,按列存储,按主键有序。 UndoFile 是基于 BaseData 之前时间的历史数据,通过在 BaseData apply  UodoFile 中的记录,可以获得历史数据。 RedoFile 是基于 BaseData 之后时间的变更记录,通过在 BaseData apply  RedoFile 中的记录,可获得较新的数据。 DeltaMem 用于 DiskRowSet 中数据的变更,先写到内存中,写满后 flush 到磁盘形成 RedoFile

image.png

Kudu 中,把 DiskRowSet 分为了两部分: base  data delta  stores base  data 负责存储基础数据,delta  stores 负责存储 base  data 中的数据变更。

image.png

如上图所示,数据从 MemRomSet 刷到磁盘后就形成了一份 DiskRowSet (只包含 base  data),每份 DiskRowSet 在内存中都会有一个对应的 DeltaMlemStore, 负责记录此 DiskRow Set 后续的数据变更(更新、删除)。DeltaMemStore 内部维护一个 B ﹣树索引,映射到每个 row  offset 对应的数据变更。 DeltaMemStore 数据增长到一定程度后转化成二进制文件存储到磁盘,形成一个DeltaFile ,随着 base data 对应数据的不断变更, DeltaFile 逐渐增长。

 

三、tablet 发现过程

image.png

当创建 Kudu 客户端时,其会从主服务器务上获取 tablet 位置信息,然后直接与服务于该 tablet 的服务器进行交谈。

为了优化读取和写入路径,客户端将保留该信息的本地缓存,以防止他们在每个请求时需要查询主机的 tablet 位置信息。随着时间的推移,客户端的缓存可能会变得过时,并且当写入被发送到不再是 tablet 领导者的 tablet 服务器时,则将被拒绝。然后客户端将通过查询主服务器发现新领导者的位置来更新其缓存。

相关实践学习
云数据库HBase版使用教程
  相关的阿里云产品:云数据库 HBase 版 面向大数据领域的一站式NoSQL服务,100%兼容开源HBase并深度扩展,支持海量数据下的实时存储、高并发吞吐、轻SQL分析、全文检索、时序时空查询等能力,是风控、推荐、广告、物联网、车联网、Feeds流、数据大屏等场景首选数据库,是为淘宝、支付宝、菜鸟等众多阿里核心业务提供关键支撑的数据库。 了解产品详情: https://cn.aliyun.com/product/hbase   ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库 ECS 实例和一台目标数据库 RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
相关文章
|
4月前
|
存储 NoSQL Java
HBase的数据模型是什么样的?
HBase的数据模型是什么样的?
35 0
|
6月前
|
存储 NoSQL 分布式数据库
94 hbase数据模型
94 hbase数据模型
26 0
|
10月前
|
存储 分布式计算 NoSQL
分布式数据库HBase的基本概念和架构之基本数据模型的Table
HBase是一个分布式数据库系统,基于Google的Bigtable和Apache Hadoop的HDFS构建而成。
|
10月前
|
存储 分布式计算 NoSQL
分布式数据库HBase的基本概念和架构之基本数据模型的Column
HBase是一个分布式数据库系统,基于Google的Bigtable和Apache Hadoop的HDFS构建而成。
231 0
|
10月前
|
存储 分布式计算 NoSQL
分布式数据库HBase的基本概念和架构之基本数据模型的TimeStamp
HBase是一个分布式数据库系统,基于Google的Bigtable和Apache Hadoop的HDFS构建而成。
364 0
|
11月前
|
存储 NoSQL 关系型数据库
【Cassandra从入门到放弃系列 三】Cassandra的数据模型设计
【Cassandra从入门到放弃系列 三】Cassandra的数据模型设计
235 0
|
存储 数据挖掘 分布式数据库
kudu入门 _应用场景_kudu|学习笔记
快速学习kudu入门 _应用场景_kudu
87 0
kudu入门 _应用场景_kudu|学习笔记
|
存储 SQL 数据挖掘
kudu原理_ Kudu是什么|学习笔记
快速学习kudu原理_ Kudu是什么
71 0
|
存储 NoSQL OLAP
Kudu入门_对比_列式和行式|学习笔记
快速学习Kudu入门_对比_列式和行式
65 0
Kudu入门_对比_列式和行式|学习笔记
|
存储 缓存 NoSQL
HBase 数据模型
HBase 数据模型
134 0