发布时间:2025-06-11
浏览次数:0
这是一个或许对你有用的社群
一对一沟通/面试指导手册/简历提升/求职难题解答,诚挚邀请您加入「」知识星球。该星球为您准备了以下部分资料:
这是一个或许对你有用的开源项目
这款国产开源项目已突破十万用户,其前端涵盖管理后台与微信小程序,后端则兼容单体及微服务架构。
该系统具备 RBAC 权限管理、SaaS 多租户架构、数据访问权限控制、在线商城、支付系统、工作流程管理、大屏数据报表展示、微信公众号集成以及客户关系管理等多项功能。
国内首发的产品,兼容 JDK 21 及其后续版本,以及 JDK 8 和 Boot 2.7.18 这两个并行版本。
TiDB 是一款分布式数据库系统,具备水平扩展能力。它严格遵守ACID事务原则,支持标准SQL语法和MySQL协议。该系统确保了数据的高度一致性,并具备高可用性。同时dnastar key,TiDB 适用于既包含在线事务处理(OLTP)又包含在线分析处理(OLAP)的混合场景。
TiDB是由该公司独立设计和开发的开放源代码的分布式关系型数据库系统,它是一款能够同时满足在线事务处理和在线分析处理需求的综合性分布式数据库产品,拥有可进行水平扩展或缩减、达到金融级别的高可用性、支持实时HTAP操作、原生支持云计算环境、兼容MySQL 5.7协议以及融入MySQL生态系统等显著特性。旨在为用户打造全方位的在线事务处理(OLTP)、在线分析处理(OLAP)以及混合事务分析处理(HTAP)解决方案。TiDB 满足对高可用性、强一致性要求较高以及数据量较大的各类应用需求。
数据库发展至今已经有3代了:
SQL,传统关系型数据库,例如 MySQL
noSQL,例如 ,Redis
该系统依托于Boot、Plus和Vue技术框架,成功构建了后台管理平台及用户小程序,并具备RBAC动态权限管理、多租户模式、数据权限控制、工作流处理、第三方登录认证、支付系统、短信服务以及商城模块等多样化功能。
自本世纪初起,互联网发展迅猛,其应用的用户基数和数据量持续攀升,同时对于全天候不间断的在线服务提出了更高要求。
在这种背景下,传统的关系型数据库系统遭遇了发展障碍,一般而言,存在两种应对策略:
虽然提升了性能,但总有天花板。
使用分布式集群结构
将单一数据库的数据进行分割处理,并将这些数据存储于由低成本设备构成的分布式集群中,从而提升了系统的扩展能力,然而,这也随之引入了新的挑战和问题。
过去集中存储于单一库中的数据,如今分散于多个库中,导致应用系统无法自主在多个库间进行操作,因而必须借助数据库分片中间件来实现这一功能。
在进行数据操作时,分片中间件表现尚可,然而一旦触及跨库联合查询和事务处理,问题便接踵而至,令许多开发者感到棘手,因此他们往往选择在业务层面自行解决,这无疑增加了项目的复杂度。
该系统依托于Cloud、Nacos以及Vue技术,构建了后台管理平台和用户小程序,具备RBAC动态权限管理、多租户模式、数据权限控制、工作流处理、第三方登录认证、支付系统、短信服务以及商城模块等多种功能。
随后,noSQL数据库应运而生,它舍弃了传统SQL所强调的事务完整性和关系型结构,转而将核心关注点置于数据库的稳定运行和规模扩展能力上。
具备与noSQL相似的扩展能力,同时依然采用关系型数据库模型,并且继续使用高度成熟的SQL作为查询工具,确保了ACID事务的一致性。
简而言之,这实际上是在传统的数据库系统中融入了NoSQL技术所具备的卓越扩展能力。
传统的SQL数据库设计理念并未融入分布式特性,然而,随着云计算时代的到来,其本质上是与分布式架构相契合的。
Codis这一知名开源分布式缓存服务的创作者,同时也是联合创始人兼首席技术官,资深工程师黄东旭,他在分布式存储系统的设计及实施方面拥有深厚造诣,被誉为开源社区的狂热技术高手。即便在互联网行业蓬勃发展之际,他依旧在数据库这一边界模糊、充满变数的领域,不懈地探索着确定性的实践路径。关注微信公众号“码猿技术专栏”,输入关键词“1111”,即可获得阿里巴巴内部Java性能优化指南!
直至2012年年末,他阅读了该机构发表的若干篇论文,这些论文宛如一面面棱镜,映射出他内心深处微弱的光芒。这些论文详细阐述了该机构内部运用的一种庞大关系型数据库F1/,该数据库成功解决了关系型数据库的扩展性、弹性以及全球分布等难题,并在实际生产环境中得到了广泛的应用。若此设想得以实现,数据存储行业将面临一场革命性的变革;黄东旭对于完美方案的诞生感到无比兴奋,正是基于这一理念,TiDB应运而生。
TiDB拥有社区版和企业版两个版本,其中企业版需付费使用,并能够提供安全性的保障与服务。
只需新增节点,TiDB 的横向扩展便能轻松实现;根据需求调整,无论是提升处理能力还是增加存储空间,都能轻松驾驭高并发和大数据量的应用场景。
TiDB 架构设计采用了存储与计算分离,这使得我们能够根据需求对计算和存储资源进行灵活的在线扩展或缩减,且这一过程对应用运维人员来说是完全透明的。
TiDB 100% 支持标准的 ACID 事务
相较于传统的M-S复制方法,采用Raft算法的多数派选举机制确保了金融级别的100%数据强一致性,同时,它还能在保留多数副本的情况下,自动完成故障的恢复过程,无需人工干预。
数据实行多份复制存储,副本间通过 Multi-Raft 协议同步事务记录,只有当多数派写入成功后事务才能被确认,从而保障了数据的强一致性。即便少数副本出现故障,也不会影响数据的正常使用。此外,用户可以根据实际需求,灵活配置副本的地理位置和数量等策略,以满足不同级别的容灾需求。
TiDB 是一种典型的在线事务处理(OLTP)行存数据库,它不仅拥有卓越的在线分析处理(OLAP)性能,而且与特定技术相结合,能够提供全面的一站式混合事务分析处理(HTAP)解决方案。通过这种方案,用户可以在同一份存储中同时处理OLTP和OLAP任务,从而避免了传统ETL(提取、转换、加载)过程的繁琐和复杂。
提供TiKV行存储引擎和列存储引擎两款产品,它们通过Multi-Raft协议实时同步数据,从而确保TiKV与列存储引擎间的数据高度一致。TiKV支持灵活部署于不同机器之上,以此解决HTAP资源隔离的难题。
TiDB是一款专为云端打造的数据库系统,与云环境深度结合,兼容公有云、私有云以及混合云环境,极大简化了部署、配置与维护的过程。其设计宗旨是全面覆盖100%的在线事务处理(OLTP)场景以及80%的数据分析(OLAP)场景,对于更为复杂的OLAP分析任务,则可通过特定的项目来加以实现。TiDB 对业务运作无任何干预,能够巧妙地取代传统数据库中间件、数据库分库分表等解决方案。此外,它还使得开发与运维人员无需过多关注数据库扩展性的具体细节,从而能够集中精力投入到业务开发中,显著提高了研发团队的生产效率。
支持 MySQL 5.7 的协议规范、广泛使用的 MySQL 功能特性,以及 MySQL 生态系统,使得应用在迁移至 TiDB 时无需或仅需少量代码调整即可顺利完成。
提供多样化的数据迁移解决方案,助力应用轻松实现数据迁移任务,在多数情形下,用户无需对代码进行调整,即可轻松将数据从MySQL迁移到TiDB,即便是经过分库分表的MySQL集群,也能借助TiDB工具实现数据的实时迁移。
OLTP,又称联机事务处理系统,它是传统关系型数据库的核心应用之一。其主要功能涉及日常事务的基本处理,包括实时进行的增加、删除、修改和查询操作。例如,在银行进行存款或取款操作,便是一次典型的事务交易。
联机事务处理系统具有极高的事务性,通常这类系统都是高可靠性的在线系统。它们主要处理小规模的事务和查询。在评估这类系统时,我们通常会关注其每秒能执行的SQL语句数量。在这些系统中,单个数据库每秒处理的交易量常常超过数百甚至数千,而语句的执行次数每秒可能达到数千甚至数万。典型的在线事务处理系统包括电子商务平台、金融机构以及证券公司等,例如美国的eBay所使用的业务数据库,便是一个典型的OLTP数据库实例。
OLAP,即在线分析处理技术,它是数据仓库体系结构中的关键组成部分,能够执行各种复杂的分析任务,主要服务于决策支持,并且能够生成易于理解的查询输出。其典型应用场景包括构建复杂的动态报表系统。
在这种系统架构下,语句执行次数并非评估的核心指标,这是因为单个语句的运行周期可能极为漫长,且涉及的数据量相当庞大。因此,评估的关键指标通常转变为对磁盘子系统的处理能力(即带宽),具体表现为每秒能处理多少兆字节的数据流量。
OLTP和OLAP的特性对比
—
实时性
在线事务处理系统对时效性有着严格的要求,其数据库设计目标在于确保事务型应用程序只记录必要的信息,以此加快对单个事务的处理速度。
OLAP系统对实时性的需求并不强烈,多数情况下,相关应用仅需每日对数据进行一次更新即可。
数据量
OLTP系统中的数据量并不庞大,通常仅涉及读取或写入几十条数据记录,主要处理的是相对简单的业务事务。
OLAP 数据量庞大,这主要是因为OLAP系统支持动态查询功能。用户在获取所需信息时,可能需要对大量数据进行统计分析,比如进行时间序列分析等,因此所需处理的数据量十分巨大。
用户和系统的面向性
OLTP 是面向顾客的,用于事务和查询处理
OLAP 是面向市场的,用于数据分析
数据库设计
在线事务处理系统(OLTP)采纳了基于实体-联系(ER)的模型,并实施了以应用为导向的数据库设计方案。
OLAP 采用星型或雪花模型和面向主题的数据库设计
—
用户
操作人员,低层管理人员
决策人员,高级管理人员
功能
日常操作处理
分析决策
主要工作
增、删、改
查询
DB 设计
面向应用
面向主题
数据
当前的,最新的细节,二维的,分立的
历史的,聚集的,多维集成的,统一的
存取
读/写数十条记录
读上百万条记录
工作单位
简单的事务
复杂的查询
用户数
上千个
上百个
DB 大小
100MB-GB
100GB-TB
与传统的单机数据库相比,TiDB 具有以下优势:
为了深入掌握 TiDB 的横向扩展能力及其高可靠性特性,我们应当首先熟悉 TiDB 的整体设计。TiDB 集群的核心构成包含三个关键模块:TiDB、PD 以及 TiKV,并且还配备了专门针对用户复杂 OLAP 问题的组件。关注公众号“码猿技术专栏”,输入关键词“1111”即可获取阿里内部的 Java 性能优化指南!
TiDB 分布式数据库在内核层面进行了精心设计,其整体架构被细分为若干个模块。这些模块之间通过通信相互协作,共同构成了一个完整的 TiDB 系统。以下是相应的架构图展示:
TiDB 承担着接收 SQL 查询的任务,对 SQL 相关的操作进行处理,接着通过 PD 模块确定存储和计算所需数据的 TiKV 服务器地址,与 TiKV 进行数据交互,最终将查询结果返回给用户。TiDB 无状态特性显著,它自身并不承担数据存储任务,专注于数据处理,支持无限制的水平扩展。此外,TiDB 还能借助负载均衡技术(例如 LVS 或 F5),向外界提供一个统一的访问入口。
(简称 PD) 是整个集群的管理模块,其主要工作有三个:
PD借助Raft协议确保了数据的安全,其中Raft协议主要负责处理各项操作,而其他PD节点则主要负责确保系统的可用性。在此建议,部署PD节点时最好选择奇数数量。
TiKV 负责数据的存储任务,从外部视角来看,它呈现为一个分布式的事务型 Key-Value 存储引擎。在数据存储层面,其基本单元是 Key Range,每个 Key Range 负责存储一段从起始键到终止键的左闭右开区间内的数据。每个 TiKV 节点承担着管理多个 Key Range 的职责。TiKV 通过采用 Raft 协议来实现数据的复制,以此确保数据的一致性并增强系统的容灾能力。副本是以特定单位进行管理的,而在各个节点上,多个这样的副本共同组成了一个Raft Group,彼此之间形成副本关系。在多个TiKV之间,数据的负载均衡工作由PD调度系统负责,调度工作同样是以特定单位为基准进行的。
TiDB的核心理念在于其作为处理用户复杂OLAP需求的关键模块,它实现了Spark SQL在TiDB存储层的直接运行。此外,TiDB还巧妙地结合了TiKV分布式集群的强大功能,并深度融入了大数据社区的生态系统。因此,TiDB凭借单一系统即可实现OLTP与OLAP的双重支持,从而有效消除了用户在数据同步方面所面临的困扰。
这类节点属于一种独特的存储类别。与常规的 TiKV 节点不同,其内部数据存储方式采用列式结构,其主要作用在于提升分析场景的处理速度。
TiKV与传统的整节点备份方法有所区别,它将数据依据key的范围分割成若干大小相近的片段(以下简称为“片段”),每个片段都设有若干副本(一般而言是3个),其中有一个副本负责提供读写服务。TiKV利用PD对相关数据以及副本进行分配,确保数据读写任务在各个TiKV节点间实现均衡分布,此设计确保了集群资源得到最大化利用,并支持随着服务器数量的提升实现横向扩展。
一旦某个数据块超过预设的阈值(通常是144MB),TiKV便会将其拆分成两个或更多部分,确保各部分尺寸大致相等,从而便于PD在调度决策时更加高效。此外,若某个数据块因频繁删除操作而缩小,TiKV还会将相邻的两个较小数据块合并为一个。
副本之间采用 Raft 协议确保数据的一致性,所有写操作仅能在主副本上进行,并且必须等到多数副本(默认为三个副本,即至少两个副本)成功写入后dnastar key,才会向客户端确认写入操作成功。
在PD需要将某个副本从TiKV的一个节点迁移至另一节点时,它首先会在目标节点上为该Raft Group新增一个副本,即复制相关数据。待新增副本的进度与原副本基本一致后,PD会将该副本转换为新的主副本,随后移除原操作节点的副本,从而完成副本的调度任务。
副本的调度机制与之相似,但需注意,在目标节点的副本成功转换为副本之后,还需进行一次额外操作,即促使该副本主动发起一轮选举,从而成为新的,随后由新副本负责移除旧的副本。
TiKV 允许实现分布式事务处理,用户或 TiDB 在进行操作时,能够同时对多个 key-value 进行写入,无需考虑它们是否位于同一数据切片中。系统采用两阶段提交机制,确保了所有读写操作均满足 ACID 原则。
TiDB的高可靠性是其显著优势之一,其中TiDB、TiKV与PD这三大组成部分均具备应对部分节点故障的能力,确保集群整体可用性不受影响。具体而言,以下将逐一阐述这三个组件的可靠性特性、单个节点故障可能带来的影响以及相应的恢复措施。
TiDB系统不具备状态信息,因此建议至少部署两个副本,前端服务通过负载均衡器对外提供访问。若某个副本出现故障,将导致该副本上正在进行的操作受到影响,从应用层看来,可能会导致单次请求失败。用户只需重新建立连接,即可恢复服务。对于失效的副本,可以选择重启该副本或部署新的副本以恢复服务。
PD集群依托Raft协议确保数据的一致性,当单个节点出现故障时,若该节点并非Raft的领导者,服务将不受任何影响;若该节点担任领导者,则会立即启动新的领导者选举,系统将自动恢复服务。在选举领导者期间,PD集群无法对外提供服务,这一过程通常持续约3秒钟。建议至少设立三个PD服务节点,一旦某个节点出现故障,可以对其重启或增配新的节点以恢复服务。
TiKV 是一个集群,它依赖 Raft 协议确保数据的一致性,副本数量可灵活配置,默认为三个副本。此外,它还通过 PD 实现负载均衡与调度功能。当单个节点出现故障时,该节点存储的所有数据将受到影响。在集群中的主节点失效时,服务将中断,并需等待重新选举;而在从节点失效的情况下,服务则不会受到影响。若TiKV节点出现故障,且在规定时间(通常为10分钟)内无法恢复正常运作,PD系统便会将此节点上的数据自动转移至其他TiKV节点。
TiDB 的应用场景之一涉及对 MySQL 进行分片与合并的操作。对于已经采用 MySQL 的业务系统来说,分库、分表、分片以及使用中间件是常见的做法。然而,随着分片数量的增加,如何进行跨分片查询成为了亟待解决的问题。TiDB 支持与 MySQL 的访问协议相兼容,并开发了一款数据同步工具,该工具能使 TiDB 以 MySQL Slave 的形式存在,成为现有数据库的从库,连接至主 MySQL 库之后,从而在这一层面实现数据流通,并支持直接执行涉及多个数据库、多个表以及不同业务领域的复杂实时 SQL 查询。黄东旭指出,以往数据库设计多为单一主节点与多个从节点,而TiDB的出现则实现了相反的模式,即多个主节点对应一个从节点。
在第二种情况下,我们可以采用 TiDB 来替代 MySQL。若是在构建 IT 架构的初期,未曾考虑到分库分表的需求,而是全面采用了 MySQL,那么在业务迅猛发展的过程中,面对日益增多的海量高并发 OLTP 场景,我们该如何应对架构上的不足之处呢?
在 TiDB 数据库中,无需进行分库分表的设置,数据库本身即可处理所有分布式任务。TiDB 与 MySQL 协议相兼容,因此可以无缝替代 MySQL,并且基本实现即装即用。无需担忧传统分库分表方案带来的沉重工作负担和复杂的维护开销。其友好的用户界面,使得即便是普通技术人员也能高效地完成维护与管理工作。TiDB 拥有与 NoSQL 相似的扩展功能,即便是在数据量与访问流量不断攀升的情况下,它也能通过横向扩展来增强系统的业务承载能力,同时保持响应时间的稳定。
TiDB 是一个分布式的系统,其第三种应用场景便是作为数据仓库。TPC-H 是数据分析领域中的一个测试集合。TiDB 2.0 在处理OLAP场景时,性能得到了显著增强。以前在数据仓库中运行的一些复杂查询,在TiDB 2.0中执行,其运行时间基本都能缩短至10秒以内。自然,鉴于OLAP的领域相当广泛,TiDB的SQL在处理某些情况时可能力不从心,因此,我们开源了一个名为Spark插件的工具,用户能够通过Spark SQL在TiKV上实时进行大数据分析。
TiDB 是一个将存储与计算分离的经典项目,其核心的 Key-Value 层,能够独立地充当 HBase 的角色,并且具备处理跨行事务的能力。TiDB 向外界提供了两种API接口,其一为ACID标准的API,旨在支持跨行事务的处理;其二为Raw API,该接口能够执行单行事务,以此换取整体性能的增强,然而它并不支持跨行事务的ACID特性。用户可根据自身实际需求,在两种API接口中自主进行选择。部分用户已直接在TiKV的基础上实现Redis协议,以此取代部分对容量需求较大且对延迟要求不高的Redis应用场景。
TiDB的自增列确保了唯一性,并且能在单个TiDB实例中实现自增,但无法确保在多个TiDB实例间的自增一致性,也无法保证自动分配值的连续性。因此,建议不要将默认值与自定义值混合使用,以免出现错误信息。
TiDB 允许通过设置系统变量来控制是否允许移除列的特性。具体操作方法包括:使用 alter table 语句,或者采用 alter table 的方式。
TiDB 不支持添加列的 属性,移除该属性后不可恢复。
目前TiDB不支持 对视图进行、、等写入操作 。
关于es的配置
系统中该值为 1
macOS 系统中该值为 2
在默认设置下,一旦类型字段所在的数据行发生更新,该字段便会自动调整为当前的日期和时间,这种自动更新的机制可以通过参数进行调节。
欢迎加入我的知识星球,全面提升技术能力。
加入方式,“长按”或“扫描”下方二维码噢:
星球的内容包括:项目实战、面试招聘、源码解析、学习路线。
文章有帮助的话,在看,转发吧。
谢谢支持哟 (*^__^*)
如有侵权请联系删除!
Copyright © 2023 江苏优软数字科技有限公司 All Rights Reserved.正版sublime text、Codejock、IntelliJ IDEA、sketch、Mestrenova、DNAstar服务提供商
13262879759
微信二维码