深入探索OceanBase分布式数据库理论:开启数据管理新篇章
《深入探索OceanBase分布式数据库理论:开启数据管理新篇章》
在当今数字化转型风起云涌的时代,数据已然成为企业最为宝贵的资产之一。随着数据量呈爆炸式增长、业务场景愈发复杂多元,传统的集中式数据库在应对高并发、海量数据存储与处理时逐渐力不从心。应运而生的OceanBase分布式数据库,凭借其卓越的架构设计与先进的技术理念,为全球数据库领域带来了全新的活力与解决方案。而要真正驾驭这一强大工具,扎实的分布式数据库理论学习是必经之路。今天,就让我们一同踏上深入探索OceanBase分布式数据库理论的求知之旅。
一、分布式数据库基础概念启蒙
- 数据分布策略
分布式数据库的核心在于如何合理地将海量数据分散存储于多个节点之上,以实现高效的读写操作与扩展性。OceanBase采用了多种数据分布策略,其中最为关键的是基于哈希(Hash)和范围(Range)的数据分片方式。哈希分片通过对数据的某个关键属性进行哈希运算,将数据均匀地分配到各个存储节点,确保每个节点的数据负载相对均衡,适用于对数据分布均衡性要求较高的场景,比如大规模电商订单数据的存储,订单ID经过哈希处理后决定其所属节点,有效避免个别节点成为热点。范围分片则依据数据的取值范围,将连续的数据划分到特定节点,便于进行范围查询,如按照时间顺序存储的日志数据,以时间段为分片依据,能快速检索特定时段的日志记录。这两种策略并非孤立存在,OceanBase巧妙地结合使用,根据不同业务需求灵活调配,满足多样化的数据管理诉求。 - 副本管理机制
为确保数据的高可用性与可靠性,副本管理在分布式数据库中起着举足轻重的作用。OceanBase引入了多副本技术,通常一个数据分片会在多个节点上拥有副本,常见的副本配置有三副本模式。这些副本通过一致性协议(如 Paxos 协议)保持数据同步,当主副本所在节点出现故障时,系统能够迅速自动切换到其他可用副本,保证业务的持续运行,对用户无感知。Paxos协议作为一种经典的分布式一致性算法,通过多轮投票选举等复杂机制,确保在分布式环境下,即使面对网络分区、节点故障等异常情况,各个副本最终都能达成一致的状态,维护数据的完整性与一致性。以金融转账业务为例,在数据写入主副本的同时,通过Paxos协议驱动副本同步更新,无论何时何地查询账户余额,不同副本都能给出相同且准确的结果。
二、OceanBase分布式架构深度剖析
- 核心组件功能解读
OceanBase的分布式架构犹如一台精密复杂的机器,由多个核心组件协同运作。其中,ObServer作为数据库实例的载体,直接负责处理客户端的请求,执行SQL语句,进行数据的读写操作,是与用户交互的前沿阵地。RootServer扮演着“指挥官”的角色,掌控全局,负责集群的元数据管理、负载均衡调度以及节点状态监控等关键任务,它依据各节点的负载情况、资源利用率等信息,智能分配任务,确保整个集群高效稳定运行。ChunkServer则专注于数据的存储与管理,承载着海量的数据分片,按照既定的数据分布策略,妥善保存数据,并在接到ObServer的读写指令时,迅速精准地提供数据服务。这三大组件紧密配合,形成了一个有机整体,支撑起OceanBase分布式数据库的强大功能。 - 分布式事务处理
在分布式环境下,事务处理面临诸多挑战,由于数据分散在不同节点,如何保证跨节点事务的原子性、一致性、隔离性和持久性(ACID特性)成为关键。OceanBase采用了创新性的分布式事务解决方案,结合两阶段提交(2PC)协议与自身优化机制,有效应对难题。在事务开始时,协调者(通常由RootServer承担部分角色)发起准备阶段,向各个涉及的节点发送准备请求,节点执行本地事务但暂不提交,将执行结果反馈给协调者;若所有节点准备就绪,协调者则发起提交阶段,通知各节点正式提交事务,否则进行回滚操作。同时,OceanBase引入了全局事务ID、事务日志等辅助手段,确保在复杂的分布式场景下,事务处理准确无误,保障业务逻辑的严谨性。例如,在电商的下单、支付、库存扣减等涉及多个环节、跨多个数据分片的复杂业务流程中,分布式事务机制确保要么所有操作全部成功完成,要么全部回滚,避免出现数据不一致的尴尬局面。
三、一致性与高可用性权衡
- 强一致性保障机制
OceanBase以提供强一致性的数据服务为重要目标,这意味着无论何时何地,用户读取到的数据都是最新且准确无误的。除了依托前文提及的Paxos协议确保副本间的严格同步外,OceanBase还在查询处理层面进行精细设计。当客户端发起查询请求时,系统通过特殊的读一致性算法,自动选择合适的副本进行读取,优先确保读取到已提交的最新数据,即使在网络抖动、节点故障修复后重新加入集群等复杂情况下,依然坚守强一致性原则。这种强一致性保障为诸多对数据准确性要求苛刻的行业,如金融、电信等,提供了坚实的技术支撑,让实时账务处理、客户信息查询等业务能够精准无误地运行。 - 高可用性设计策略
在追求强一致性的同时,OceanBase并未忽视高可用性的构建。一方面,通过多副本冗余机制,最大限度降低节点故障对业务的影响,只要集群中多数副本存活,业务就能持续运转;另一方面,OceanBase具备强大的自动故障切换能力,一旦检测到主副本故障,能够在极短时间内(通常在秒级甚至亚秒级)激活备用副本,无缝接管业务,减少业务中断时间。此外,在集群扩容、节点维护等日常运维场景下,OceanBase采用在线迁移、滚动升级等技术,保障业务不中断,实现真正意义上的高可用性,满足企业7×20小时甚至全年无休的业务需求。
四、理论学习方法与实践结合要点
- 学习方法推荐
面对如此庞大复杂的分布式数据库理论体系,科学有效的学习方法至关重要。首先,系统阅读专业书籍与学术论文是筑牢理论根基的必经之路,经典的分布式系统教材如《分布式系统:概念与设计》能提供宏观的理论框架,结合OceanBase官方发布的技术白皮书、学术研究报告,深入探究其独特的技术细节;其次,线上课程学习不容忽视,各大在线教育平台推出的由OceanBase资深工程师讲解的课程,通过生动的案例、直观的演示,帮助理解晦涩难懂的概念;再者,积极参与技术论坛与社区讨论,如OceanBase官方社区、Stack Overflow等,与全球范围内的同行交流心得、请教疑难问题,在思想碰撞中加深对理论的认知。 - 实践结合思路
理论学习必须紧密结合实践才能真正内化于心。搭建本地或云端的OceanBase测试环境是首要任务,依据官方文档,亲手部署集群,配置节点参数,在实践中熟悉各个组件的安装、启动与交互流程;随后,利用测试环境进行大量的模拟业务操作,编写SQL语句执行数据的增删改查,观察数据分布变化、事务执行效果,验证所学理论知识;最后,尝试模拟各类故障场景,如节点宕机、网络中断等,检验OceanBase的高可用性与一致性保障机制是否如理论预期般运作,通过实践反馈进一步完善理论知识体系。
OceanBase分布式数据库理论犹如一座深邃的知识宝库,蕴含着无尽的智慧与力量,等待着我们去挖掘、去领悟。通过扎实深入地学习其基础概念、架构原理、一致性与高可用性精髓,并巧妙地将理论与实践相结合,我们方能逐步掌握这一前沿技术,为应对数字化时代海量数据的挑战奠定坚实基础,开启数据管理的全新篇章,在数据库技术的星辰大海中乘风破浪,驶向成功彼岸。
相关文章:
深入探索OceanBase分布式数据库理论:开启数据管理新篇章
《深入探索OceanBase分布式数据库理论:开启数据管理新篇章》 在当今数字化转型风起云涌的时代,数据已然成为企业最为宝贵的资产之一。随着数据量呈爆炸式增长、业务场景愈发复杂多元,传统的集中式数据库在应对高并发、海量数据存储与处理时逐…...
如何用VS调试不属于解决方案的EXE和DLL程序-使用PDB和EXE文件-根据exe|pdb|源码文件进行调试分析
文章目录 1.问题2.基本点3.方法步骤3.1.新建一个空的解决方案3.2.构建源码项目3.3.添加pdb文件目录3.4.调试目标exe 4.源码断点 1.问题 如果你手里有一个现成的EXE, 以及EXE相关联PDB文件, 还有相关联的CPP文件和H文件. 你如何用VS调试? (当然你可以选择WinDbg.不过这里就讨论…...
2. CSS的元素显示模式
2.1什么是元素显示模式 作用:网页的标签非常多,在不同地方会用到不同类型的标签,了解他们的额特点可以更好的布局我们的网页。 元素显示模式就是元素(标签)以什么方式进行显示,比如<div>自己占一行…...
marktext 开源markdown安装
https://github.com/marktext/marktext 该 markdown 的免费安装, 在mac os 上 安装时, 出现无法安装的情况 使用如下的命令可以, 可以进行使用 https://github.com/marktext/marktext/issues/2983 This isn’t the recommended command si…...
/src/utils/request.ts:axios 请求封装,适用于需要统一处理请求和响应的场景
文章目录 数据结构解释1. 核心功能2. 代码结构分析请求拦截器响应拦截器 3. 改进建议4. 总结 console.log(Intercepted Response:, JSON.stringify(response));{"data": {"code": 0,"msg": "成功","data": {"id":…...
蓝桥杯 第十五届 研究生组 B题 召唤数学精灵
问题描述: 数学家们发现了两种用于召唤强大的数学精灵的仪式,这两种仪式分别被称为累加法仪式 A(n) 和累乘法仪式 B(n)。累加法仪式 A(n) 是将从 1 到 n 的所有数字进行累加求和,即:A(n)12⋯n累乘法仪式 B(n) 则是将从 1 到 n 的所…...
四种编译方式(make、cmake、configure、autogen.sh)
文章目录 一、make特征编译步骤(make)样例编译二、cmake特征编译步骤(cmake --> make)样例编译三、configure特征编译步骤(./configure --> make)样例编译四、autogen.sh特征编译步骤(./autogen.sh --> ./configure --> make)样例编译总结一、make 特征 …...
Cursor 实战技巧:好用的提示词插件Cursor Rules
你好啊,见字如面。感谢阅读,期待我们下一次的相遇。 最近在小红书发现了有人分享这款Cursor提示词的插件,下面给各位分享下使用教程。简单来说Cursor Rules就是可以为每一个我们自己的项目去配置一个系统级别的提示词,这样在我们…...
mysql事务及隔离机制
mysql总结 mysql事务特性: 原子性(Atomicity)一致性(Consistency)隔离性(Isolation)持久性(Durability) 并发访问数据库造成的问题: 脏读:读到…...
《护网行动与数字时代:如何应对日益复杂的网络威胁?》
什么是护网 1.什么是护网行动 护网行动是由公安部牵头组织的网络安全攻防演练活动,旨在评估和提升企事业单位的网络安全防护能力。 具体来说,护网行动通过模拟真实的网络攻击场景,组织攻防双方进行对抗演练,以检测企事业单位网…...
1月9日星期四今日早报简报微语报早读
1月9日星期四,农历腊月初十,早报#微语早读。 1、上海排查47家“俄罗斯商品馆”:个别店铺被责令停业,立案调查; 2、西藏定日县已转移受灾群众4.65万人,检测到余震646次; 3、国家发改委&#x…...
科大讯飞前端面试题及参考答案 (下)
除了 echarts 还了解其它画图工具吗? 除了 Echarts,还有不少优秀的画图工具可供选择使用。 Highcharts:它是一款功能强大且应用广泛的图表绘制工具,支持多种常见的图表类型,像柱状图、折线图、饼图、散点图等,同时也能创建较为复杂的图表,比如仪表盘图表、极坐标图等。H…...
linux创建服务,实现程序异常退出自启
以启动java程序进行示例,其他程序也可按照该方式进行配置 [Unit] DescriptionMy Java Service Afternetwork.target[Service] WorkingDirectory/opt/myapp # 设置你的 jar 文件所在目录 ExecStart/usr/bin/java -jar myapp.jar # 替换为你的 jar 启动命令 Restartalways Re…...
linux-28 文本管理(一)文本查看,cat,tac,more,less,head,tail
之前提到过linux的几个重要哲学思想,使用纯文本文件保存软件的配置信息是其中之一,所以大多数情况下,我们对整个系统的操作,都是通过编辑它的配置文件来完成,那也就意味着,处理文本文件是我们作为系统管理员…...
Springboot3巧妙运用拦截器阻断xss攻击
Springboot3巧妙运用拦截器阻断xss攻击 什么是xss跨站脚本攻击类型简单示例解决方法拦截器代码使用demo 什么是xss 人们经常将跨站脚本攻击(Cross Site Scripting)缩写为CSS,但这会与层叠样式表(Cascading Style Sheetsÿ…...
leetcode 2551. 将珠子放入背包中
题目如下 数据范围 示例 题目的意思是将一个长度为n的数组weight(简称w)分成k个小数组,同时计算这些小数组的边界和。 设i (0 < i < n - 1) 首先我们假设已经找到最大分数序列即划分的小数组最优 令 j1,j2,j3.....jk为这些小数组的左端点(不包括第一个小数组)。 则有…...
【Spring】SpringBoot整合ShardingSphere并实现多线程分批插入10000条数据(进行分库分表操作)。
??个人主页:哈__ 期待您的关注 目录 一、ShardingSphere简介 ?1.Sharding-JDBC 2.Sharding-Proxy? 3.Sharding-Sidecar(TBD)? 二、为什么用到ShardingSphere? 三、数据分片 四、SpringBoot整合ShardingSphere 1.创建我们的数据…...
Python中的ast.literal_eval:安全地解析字符串为Python对象
Python中的ast.literal_eval:安全地解析字符串为Python对象 什么是ast.literal_eval?为什么说它是“安全”的? 如何使用ast.literal_eval?示例1:将字符串转换为列表示例2:将字符串转换为字典示例3ÿ…...
前端用json-server来Mock后端返回的数据处理
<html><body><div class"login-container"><h2>登录</h2><div class"login-form"><div class"form-group"><input type"text" id"username" placeholder"请输入用户名&q…...
【linux】文件与目录命令 - mv
文章目录 1. 基本用法2. 常用参数3. 用法举例4. 注意事项 mv 命令用于移动或重命名文件和目录,是 Linux 系统中管理文件的重要工具之一。它既能移动文件到指定路径,也能重命名文件或目录。 1. 基本用法 语法: mv [选项] 源文件 目标文件 mv…...
OSPF - LSA对照表
LSA的三要素,如何唯一表示一条LSA Type:表示是几类的LSA Link-id:这个比较特殊,不同的LSA的Link-ID不同 Advertising router:谁产生的LSA 常用的就是1、2、3、4、5、7型LSA 点击蓝字跳转LSA详细介绍(持续更新中…...
Mongodb基础sqL
------------------------------------------数据库------------------------------ (2).查看所有数据库 show dbs (3).选择数据库,如果不存在则隐式创建这个数据库 use 数据库名 ------------------------------------------集合------------------------------ …...
uniapp开发u-icon图标不显示问题
uniapp开发图标用u-icon不显示,换成uv-icon就可以了 插件市场从这里下载:uv-ui 破釜沉舟之兼容vue32、app、h5、小程序等多端,灵活导入,利剑出击 - DCloud 插件市场 组件库看这个:介绍 | 我的资料管理-uv-ui 是全面兼…...
宁德时代2025年Verify入职测评语言理解及数字推理真题SHL题库汇总、考情分析
宁德时代社招Verify入职测评对薪酬有着重要影响,其规定正确率达到80%才能顺利通过测评。这体现了公司对人才专业素养与能力的严格要求,旨在筛选出真正符合岗位需求的优秀人才。测评内容涵盖了专业知识、技能运用、逻辑思维等多方面,只有综合能…...
Spring Data Elasticsearch简介
一、Spring Data Elasticsearch简介 1 SpringData ElasticSearch简介 Elasticsearch是一个实时的分布式搜索和分析引擎。它底层封装了Lucene框架,可以提供分布式多用户的全文搜索服务。 Spring Data ElasticSearch是SpringData技术对ElasticSearch原生API封装之后的产物,它通…...
即插即用,无缝集成各种模型,港科大蚂蚁等发布Edicho:图像编辑一致性最新成果!
文章链接:https://arxiv.org/pdf/2412.21079 项目链接:https://ezioby.github.io/edicho/ 亮点直击 显式对应性引导一致性编辑:通过将显式图像对应性融入扩散模型的去噪过程,改进自注意力机制与分类器自由引导(CFG&…...
鸿蒙开发(29)弹性布局 (Flex)
概述 弹性布局(Flex)提供更加有效的方式对容器中的子元素进行排列、对齐和分配剩余空间。常用于页面头部导航栏的均匀分布、页面框架的搭建、多行数据的排列等。 容器默认存在主轴与交叉轴,子元素默认沿主轴排列,子元素在主轴方…...
华为 Sensor 省电策略调研
华为EMUI 9.0.0.187(C00E57R1P15) 无该功能 华为EMUI 9.1.0.321(C00E320R1P1) 之后有sensor管控 一、华为 Sensor 省电策略 1. Sensor 类别只配置非唤醒类Sensor 2. 手机静止情况,应用不可见时达到1分钟࿰…...
Kotlin语言的网络编程
Kotlin语言的网络编程 Kotlin作为一种现代的编程语言,其简洁、安全和高效的特性使得在开发各种应用时得到广泛认可。尤其是在网络编程方面,Kotlin凭借其与Java的高度兼容性以及丰富的库支持,使得网络操作变得更加简单易用。本文将详细探讨Ko…...
redis:安装部署、升级以及失败回退
安装部署 一、准备工作 1. 检查系统要求 确保你的服务器满足 Redis 的基本要求: 操作系统:支持的 Linux 发行版(如 Ubuntu, CentOS)内存:至少 4GB(根据实际应用需求调整)CPU:单核或多核 CPU磁盘空间:足够的磁盘空间用于数据存储和日志记录2. 更新系统软件包 在开始…...
3. ML机器学习
1.人工智能与机器学习的关系 机器学习是人工智能的一个重要分支,是人工智能的一个子集。它无需显式编程,而是通过数据和算法使机器能够自动学习和改进,从而实现智能行为。机器学习依赖于算法来识别数据中的模式,并通过这些模式做出…...
在高德地图上加载3DTilesLayer图层模型/天地瓦片
1. 引入必要的库 Three.js:一个用于创建和显示3D图形的JavaScript库。vuemap/three-layer:一个Vue插件,它允许你在高德地图中添加Three.js图层。vuemap/layer-3dtiles:一个用于处理3D Tiles格式数据的Vue插件,可以用来…...
用户使用LLM模型都在干什么?
Anthropic 对用户与 Claude 3.5 Sonnet 的大量匿名对话展开分析,主要发现及相关情况如下: 使用用途分布 软件开发主导:在各类使用场景中,软件开发占比最高,其中编码占 Claude 对话的 15% - 25%,网页和移动应…...
2 抽象工厂(Abstract Factory)模式
抽象工厂模式 1.1 分类 (对象)创建型 1.2 提出问题 家具店里有沙发、椅子、茶几等产品。产品有不同风格,如现代、北欧、工业。希望确保客户收到的产品风格统一,并可以方便地添加新产品和风格。 1.3 解决方案 提供一个创建一…...
数据结构-串
串的实现 在C语言中所使用的字符串就是串的数据类型的一种。 串的存储结构 定长顺序存储表示 类似于线性表的顺序存储结构,用一组连续的存储单元存储串值的字符序列。 #define MAXLEN 255 //预定义最大串长为255 typedef struct SString {char ch[MAXLEN]; …...
C#,图论与图算法,有向图(Direct Graph)广度优先遍历(BFS,Breadth First Search)算法与源程序
1 图的广度优先遍历 图的广度优先遍历(或搜索)类似于树的广度优先遍历(参见本文的方法2)。这里唯一需要注意的是,与树不同,图可能包含循环,因此我们可能再次来到同一个节点。为了避免多次处理节…...
使用ElasticSearch查询
从一个query body开始 {"query": {"bool": {"disable_coord": true,"must": [{"match": {"enabled": "1"}},{"range": {"effectTime": {"lt": "2017-06-13 13:33:…...
PyCharm+RobotFramework框架实现UDS自动化测试——(一)python-can 库的安装与环境配置
从0开始学习CANoe使用 从0开始学习车载测试 相信时间的力量 星光不负赶路者,时光不负有心人。 文章目录 1. 概述2.安装 python-can 库—基于pycharm在对应的工程下3. 在任意盘中安装环境4. 导入 can 模块语法5. 配置 CAN 接口6.CANoe设备连接语法 1. 概述 本专栏主…...
C# 值类型和引用类型详解
简介 在 C# 中,值类型和引用类型是两个基础的数据类型类别,它们的主要区别在于 存储位置 和 赋值方式。 值类型 值类型存储的是数据本身,分配在 栈 (Stack) 中。当一个值类型变量被赋值给另一个变量时,会复制值。 值类型的特点…...
计算机网络 —— 网络编程(TCP)
计算机网络 —— 网络编程(TCP) TCP和UDP的区别TCP (Transmission Control Protocol)UDP (User Datagram Protocol) 前期准备listen (服务端)函数原型返回值使用示例注意事项 accpect (服务端)函数原型返回…...
[Unity Shader] Shader基础光照3:环境光与自发光
在Unity中,光照是场景渲染的关键组成部分。正确使用环境光和自发光能够大大提高场景的真实感和视觉效果。本篇文章将详细介绍Unity中的环境光和自发光的基本概念,以及如何在编辑器和Shader中进行操作和实现。 1. 环境光(Ambient Light) 1.1 环境光的定义 环境光是场景中…...
云原生安全风险分析
一、什么是云原生安全 云原生安全包含两层含义: 面向云原生环境的安全具有云原生特征的安全 0x1:面向云原生环境的安全 面向云原生环境的安全的目标是防护云原生环境中基础设施、编排系统和微服务等系统的安全。 这类安全机制不一定具备云原生的特性…...
Redis 安装与配置指南
Redis 安装与配置指南 目录 安装说明 Linux 安装 Redis 3.0 压缩包上传服务器编译和安装修改配置启动 Redis关闭 Redis 卸载 RedisRedis 集群配置 Master 主库配置启动 Master 节点的 Redis 和 Sentinel客户登录验证Slave 从库配置查看集群数据验证 安装说明 Linux 安装 R…...
C语言Day13(c程序设计小红书+pta)
目录 (一)用函数调用实现,把最小的数字放在最前面,把最大的放在最后边 (二)使数字向后移m位 (三)用户自定义数据类型: (四)候选人计票数 &am…...
C++二十三种设计模式之迭代器模式
C二十三种设计模式之迭代器模式 一、组成二、特点三、目的四、缺点五、示例代码 一、组成 抽象聚合类:存储集合元素,声明管理集合元素接口。 具体聚合类:实现管理集合元素接口。 抽象迭代器类:声明访问和遍历聚合类元素的接口。 …...
【AI游戏】使用强化学习玩 Flappy Bird:从零实现 Q-Learning 算法(附完整资源)
1. 引言 Flappy Bird 是一款经典的休闲游戏,玩家需要控制小鸟穿过管道,避免碰撞。虽然游戏规则简单,但实现一个 AI 来自动玩 Flappy Bird 却是一个有趣的挑战。本文将介绍如何使用 Q-Learning 强化学习算法来训练一个 AI,使其能够…...
VSCode 中的 launch.json 配置使用
VSCode 中的 launch.json 配置使用 在 VSCode 中,launch.json 文件用于配置调试设置,特别是用来定义如何启动和调试你的应用。它允许你配置不同的调试模式、运行参数和调试选项。 基本结构 launch.json 文件位于 .vscode 文件夹内,可以通过…...
深度学习算法:开启智能时代的钥匙
引言 深度学习作为机器学习的一个分支,近年来在图像识别、自然语言处理、语音识别等多个领域取得了革命性的进展。它的核心在于构建多层的神经网络,通过模仿人脑处理信息的方式,让机器能够从数据中学习复杂的模式。 深度学习算法的基本原理…...
Clojure语言的并发编程
Clojure语言的并发编程 引言 在现代软件开发中,并发编程成为了处理多个任务、提高应用效率和响应速度的重要手段。尤其是在多核处理器逐渐成为主流的今天,如何高效利用这些计算资源是每个开发者面临的挑战。Clojure作为一种函数式编程语言,…...
MySQL学习记录1【DQL和DCL】
SQL学习记录 该笔记从DQL处开始记录 DQL之前值得注意的点 字段 BETWEEN min AND max 可以查询区间[min, max]的数值如果同一个字段需要满足多个OR条件,可以采取 字段 IN(数值1, 数值2, 数值3....)LIKE语句 字段 LIKE ___%%% 表示模糊匹配,_匹配一个字段…...