首页 > 其他分享 >TIDB存储TiKV的键值对数据

TIDB存储TiKV的键值对数据

时间:2024-05-26 18:46:23浏览次数:23  
标签:-- TIDB TiKV 索引 键值 KV TiDB ID

1. TiDB概述

TiDB 是一款开源 分布式关系型数据库,同时支持 在线事务处理(OLTP) 与 在线分析处理(OLAP) 的混合型(Hybrid Transactional and Analytical Processing, HTAP) 分布式数据库,具备水平扩容或缩容、金融级高可用、实时 HTAP、Kubernetes 云原生的分布式数据库、兼容 MySQL 5.7 协议和 MySQL 生态等重要特性,支持在本地和云上部署。

与传统的单机 MySQL 数据库相比,TiDB 具有以下优势:

  • 分布式架构: 纯分布式架构,拥有良好的扩展性,支持弹性的扩缩容

  • 兼容MySQL: 支持 SQL,对外暴露 MySQL 的网络协议,并兼容大多数 MySQL 的语法,在大多数场景下可以直接替换 MySQL

  • 高可用部署: 默认支持高可用,在少数副本失效的情况下,数据库本身能够自动进行数据修复和故障转移,对业务透明

  • 支持强一致性: 符合CAP理论的CP,支持 ACID 事务,对于一些有强一致需求的场景友好,例如:银行转账

  • 丰富的开源生态链: 具有丰富的工具链生态,覆盖数据迁移、同步、备份等多种场景

 

2. TiDB组件

在内核设计上,TiDB 分布式数据库将整体架构拆分成了多个模块,各模块之间互相通信,组成完整的 TiDB 系统。对应的架构图如下:

计算引擎层:TiDB/TiSpark

存储引擎层:TiKV/TiFlash

3. TiKV键值对数据是如何组织的

1. 表数据映射到KV

由于 TiDB 底层基于键值对存储数据,TiDB 表中的 行数据 需要按照一定格式映射转换为 键值对:

  • 为了保证同一张表的数据放在一起,方便查找,TiDB 会为每个表分配一个 表 ID,用 TableID 表示。表 ID 是一个整数,在整个 集群内唯一。

  • TiDB 会为表中每行数据分配一个 行 ID,用 RowID 表示。行 ID 也是一个整数,在表内唯一。对于行 ID,TiDB 做了一个小优化,如果某个表有整数型的主键,TiDB 会使用主键的值当做这一行数据的行 ID。

每行数据按照如下规则编码成 (Key, Value) 键值对:

Key: tablePrefix{TableID}_recordPrefixSep{RowID}
Value: [col1, col2, col3, col4]

2. 表索引映射到KV

TiDB 同时支持 主键索引 和 二级索引。与表数据映射方案类似,TiDB 为表中每个索引分配了一个 索引 ID,用 IndexID 表示。

  • 对于 主键索引 和 唯一索引,需要根据键值快速定位到对应的 RowID,因此,按照如下规则编码成 (Key, Value) 键值对:

Key: tablePrefix{TableID}_indexPrefixSep{IndexID}_indexedColumnsValue
Value: RowID

  • 对于非唯一性约束的 普通二级索引,一个键值可能 对应多行,需要根据 键值范围 查询对应的 RowID。因此,按照如下规则编码成 (Key, Value) 键值对:

Key: tablePrefix{TableID}_indexPrefixSep{IndexID}indexedColumnsValue{RowID}
Value: null

 

3. KV映射示例

数据与 KV 的映射关系,定义如下:

复制
tablePrefix     = []byte{'t'}recordPrefixSep = []byte{'r'}indexPrefixSep  = []byte{'i'}1.2.3.

假设表结构如下:

复制
CREATE_TABLE User (    ID int,    Name varchar(20),    Role varchar(20),    Age int,    UID int,    PRIMARY KEY (ID),    KEY idxAge (Age),    UNIQUE KEY idxUID (UID));1.2.3.4.5.6.7.8.9.10.

假设表数据如下:

复制
1, "TiDB", "SQL Layer", 10, 100012, "TiKV", "KV Engine", 20, 100023, "PD", "Manager", 30, 100031.2.3.
  • 表数据映射到KV如下:

复制
t10_r1 --> ["TiDB", "SQL Layer", 10, 10001]t10_r2 --> ["TiKV", "KV Engine", 20, 10002]t10_r3 --> ["PD",   "Manager",   30, 10003]1.2.3.
  • 唯一索引映射到KV如下:

复制
t10_i1_10001 --> 1t10_i2_10002 --> 2t10_i3_10003 --> 31.2.3.
  • 非唯一索引映射到KV如下:

复制
# 假设 IndexID 为 1t10_i1_10_1 --> nullt10_i1_20_2 --> nullt10_i1_30_3 --> null1.2.3.4
 

标签:--,TIDB,TiKV,索引,键值,KV,TiDB,ID
From: https://www.cnblogs.com/xiaohuozi6/p/18214122

相关文章

  • 国产数据库TiDB的常用方法
    TiDB的常用方法主要涉及安装配置、数据操作、性能调优以及监控和维护等方面。以下是对这些常用方法的归纳和介绍:1.安装与配置安装TiDB:根据官方文档的指引,用户可以按照步骤进行TiDB的安装。配置TiDB:安装完成后,需要对TiDB的相关参数进行配置,包括端口号、数据目录等。这些配......
  • 查询指定用户的unique,primary索引名/键值
    --1.SQL用postgres账户查询PostgreSQL中指定DB以及schema下唯一索引的信息,按照表名:索引名:索引键值并按表名排序输出SELECTt.tablenameAStable_name,i.indexnameASindex_name,string_agg(a.attname,','ORDERBYa.attnum)ASindex_keysFROMpg_i......
  • 快速部署 微软开源的 Garnet 键值数据库
    快速部署微软开源的Garnet键值数据库Garnet是MicrosoftResearch推出的一种新型远程缓存存储,其设计速度极快、可扩展且延迟低。Garnet在单个节点内是线程可扩展的。它还支持分片集群执行、复制、检查点、故障转移和事务。它可以在主内存以及分层存储(例如SSD和Azure存......
  • 利用 Amazon EMR Serverless、Amazon Athena、Apache Dolphinscheduler 以及本地 TiDB
    引言在数据驱动的世界中,企业正在寻求可靠且高性能的解决方案来管理其不断增长的数据需求。本系列博客从一个重视数据安全和合规性的B2C金融科技客户的角度来讨论云上云下混合部署的情况下如何利用亚马逊云科技云原生服务、开源社区产品以及第三方工具构建无服务器数据仓库的解......
  • TiDB Vector 抢先体验之用 TiDB 实现以图搜图
    本文首发自TiDB社区专栏:https://tidb.net/blog/0c5672b9转载请注明出处!前言最早知道TiDB要支持向量化的消息应该是在23年10月份左右,到第一次见到TiDBVector的样子是在今年1月初,当时dongxu在朋友圈发了一张图:去年我研究了一段时间的向量数据库,一直对TiDB向量特性......
  • golang etcd键值存储系统
    目录存储配置文件watch命令在Go语言中,etcd是一个高可用的键值存储系统,它主要用于共享配置和服务发现。etcd由CoreOS团队开发,它是Kubernetes项目中用于存储所有集群数据的关键组件。etcd使用Raft协议来保持集群之间的数据一致性,并且提供了强一致性保证https://blog.csdn.net/jo......
  • TiDB基础概念
    TIDB是什么官网这么说的,TiDB是PingCAP公司自主设计、研发的开源分布式关系型数据库,是一款同时支持在线事务处理与在线分析处理(HybridTransactionalandAnalyticalProcessing,HTAP)的融合型分布式数据库产品,具备水平扩容或者缩容、金融级高可用、实时HTAP、云原生的分......
  • tidb 6.1.4 table cache 导致的集群QPS异常问题
    1.问题现象TIDB日志中频繁的刷以下日志:[2024/03/1309:09:40.542+08:00][WARN][cache.go:205]["lockcachedtableforread"][error="previousstatement:updatemysql.table_cache_metasetlock_type='READ',lease=448342830925742080where......
  • TiDB-TiCDC的使用方法
    命令:1.cdccli2.tiupctlcdc1.查看capture状态(如果没下载会自动下载)tiupctl:v6.1.0cdccapturelist--pd=http://192.168.210.38:23792.创建同步任务格式cdcclichangefeedcreate--pd=http://192.168.210.38:2379--sink-url="mysql://root:[email protected]......
  • tidb-逻辑备份(6)-lightning导入工具的部署、使用
    一、Tidblightning的部署方法一、1.联网安装[root@tidb01~]#tiupinstalltidb-lightning方法二(tidb-community-toolkit)1.下载包(https://docs.pingcap.com/zh/tidb/v6.1/download-ecosystem-tools),解压获取:wgethttps://download.pingcap.org/tidb-communi......