TiDB与Doris实操对比:深度剖析数据库选型要点
TiDB与Doris实操对比:深度剖析数据库选型要点
宝子们,在大数据处理的广阔天地里,TiDB和Doris都是备受瞩目的数据库解决方案。它们各自有着独特的优势和适用场景,对于我们开发者来说,深入了解它们的实操特性,有助于在实际项目中做出更合适的选择。接下来,就让我们通过实操对比,全方位领略这两款数据库的风采吧!
一、安装与配置
1. TiDB安装与配置
• 安装过程:
◦ 本地安装(单机模式,仅用于测试):在本地环境中,我们可以按照官方文档的指引,通过二进制文件的方式进行安装。首先,需要下载对应版本的TiDB二进制包,解压后配置相关环境变量。不过,这种方式仅适用于简单的测试场景,无法体验TiDB真正的分布式魅力。
◦ 分布式集群安装(生产环境常用):在生产环境中,TiDB通常以分布式集群的方式部署。这涉及到多个组件的安装和配置,包括TiDB Server、PD(Placement Driver)和TiKV。一般来说,我们可以借助Ansible等自动化工具来进行集群的部署,这样可以大大简化安装过程,但需要对Ansible和集群的网络配置有一定的了解。
• 配置要点:
◦ PD配置:PD是TiDB集群的“大脑”,负责管理元数据和调度数据。在配置PD时,需要关注一些关键参数,如max-merge-region-size
(控制Region合并的大小)和leader-schedule-limit
(控制Leader调度的并发度)。合理调整这些参数可以优化集群的性能和稳定性。
◦ TiKV配置:TiKV作为存储引擎,其配置也非常重要。例如,storage-block-size
参数决定了数据在磁盘上的存储块大小,合适的块大小可以提高数据的读写性能。同时,还需要根据服务器的硬件资源合理配置TiKV的副本数量,以确保数据的高可用性。
2. Doris安装与配置
• 安装过程:
◦ 单机模式安装(适合学习和测试):Doris的单机模式安装相对简单。你可以从官方网站下载Doris的安装包,解压后按照文档的指引进行配置。在单机模式下,Doris的所有组件都运行在一个节点上,方便我们快速上手和进行功能测试。
◦ 集群模式安装(生产环境推荐):在生产环境中,为了满足高并发和大规模数据处理的需求,通常会采用集群模式部署Doris。Doris的集群安装需要配置FE(Frontend)和BE(Backend)节点。FE负责元数据管理和查询规划,BE负责数据的存储和计算。安装过程中需要注意节点的网络配置和角色分配,确保各个节点之间能够正常通信和协同工作。
• 配置要点:
◦ FE配置:FE的配置主要涉及到内存分配、查询并发度等方面。例如,query_timeout
参数可以设置查询的超时时间,避免长时间运行的查询占用过多资源。另外,还可以通过调整edit_log_port
和http_port
等参数来满足不同的网络环境需求。
◦ BE配置:BE的配置重点在于存储和计算资源的分配。比如,storage_page_size
参数决定了数据在磁盘上的存储页大小,合适的页大小可以提高数据的读写效率。同时,还需要根据服务器的硬件资源合理配置BE的CPU和内存资源,以充分发挥Doris的性能优势。
二、数据导入
1. TiDB数据导入
• CSV格式导入:TiDB支持通过LOAD DATA
语句将CSV格式的数据导入到表中。例如,假设我们有一个名为students.csv
的文件,其中包含学生的姓名、年龄和成绩等信息,我们可以使用以下SQL语句将数据导入到名为students
的表中:
LOAD DATA LOCAL INFILE '/path/to/students.csv'
INTO TABLE students
FIELDS TERMINATED BY ','
ENCLOSED BY '"'
LINES TERMINATED BY '
'
(name, age, score);
• 其他方式导入:除了LOAD DATA
语句,TiDB还可以通过一些第三方工具进行数据导入,如DataX
。DataX
提供了丰富的插件和配置选项,可以方便地将各种数据源的数据导入到TiDB中,适用于大规模数据的批量导入场景。
2. Doris数据导入
• CSV格式导入:Doris同样支持CSV格式的数据导入。可以通过IMPORT
命令来实现,例如:
IMPORT INTO table_name
FROM 'hdfs://path/to/students.csv'
PROPERTIES ("desired_concurrent_number" = "3","timeout" = "3600"
);
上述语句将HDFS上的students.csv
文件导入到名为table_name
的表中,并设置了并发数和超时时间等参数。
• 其他数据源导入:Doris还支持从其他数据库(如MySQL)导入数据,通过IMPORT FROM MYSQL
命令可以实现跨数据库的数据迁移。这对于需要整合不同数据源数据的场景非常有用。
三、查询优化
1. TiDB查询优化
• 索引使用:TiDB支持多种索引类型,如B+树索引、哈希索引等。在查询优化中,合理选择和使用索引至关重要。例如,对于经常根据某个字段进行等值查询的场景,创建哈希索引可以提高查询效率;而对于范围查询,则B+树索引更为合适。同时,要注意避免创建过多的索引,以免影响写入性能和占用过多的存储空间。
• 查询语句优化:TiDB的查询优化器会自动对查询语句进行优化,但我们也可以通过一些技巧来进一步提高查询性能。比如,尽量避免使用子查询,因为子查询可能会导致性能下降;合理使用连接查询(JOIN),并注意连接条件的选择,以减少数据扫描量。
2. Doris查询优化
• 索引与分区:Doris支持主键索引和聚集索引,合理设计索引可以提高查询性能。此外,Doris的分区功能也非常强大,通过合理划分数据分区,可以将数据分散存储在不同的节点上,提高查询的并行度和效率。例如,按照时间维度对数据进行分区,对于按时间范围查询的场景可以大大减少数据扫描量。
• 查询优化技巧:在编写查询语句时,要注意选择合适的聚合函数和过滤条件。对于复杂的查询,可以考虑将其拆分成多个简单的子查询,然后通过临时表或视图进行组合,这样可以提高查询的可读性和性能。
四、数据更新与删除
1. TiDB数据更新与删除
• 数据更新:TiDB支持使用UPDATE
语句对数据进行更新操作。例如:
UPDATE students
SET score = 90
WHERE name = 'Alice';
上述语句将名为Alice
的学生的成绩更新为90分。需要注意的是,在分布式环境下,数据更新可能会涉及到多个节点的操作,因此要确保数据的一致性和并发控制。
• 数据删除:使用DELETE
语句可以删除表中的数据。例如:
DELETE FROM students
WHERE age < 18;
这条语句将删除年龄小于18岁的学生记录。同样,在分布式环境中,要注意数据删除的原子性和一致性。
2. Doris数据更新与删除
• 数据更新:Doris也支持UPDATE
语句进行数据更新,但在实际应用中,由于其列式存储的特性,频繁的更新操作可能会影响性能。因此,对于需要频繁更新的数据,建议在设计表结构时进行合理规划,或者考虑使用其他更适合频繁更新场景的数据库。
• 数据删除:Doris的DELETE
语句用于删除满足条件的数据记录。例如:
DELETE FROM students
WHERE score < 60;
此语句将删除成绩小于60分的学生记录。需要注意的是,Doris的数据删除操作可能会导致数据的碎片化,因此需要定期进行数据整理和优化。
五、集群搭建与运维
1. TiDB集群搭建与运维
• 集群搭建:TiDB集群的搭建涉及到多个组件的配置和管理,需要一定的技术水平和经验。在搭建过程中,要注意各个组件之间的版本兼容性和网络通信配置。同时,为了确保集群的高可用性,还需要合理规划节点的数量和分布,以及设置合适的备份和恢复策略。
• 运维监控:TiDB提供了一套完善的监控系统,包括Grafana仪表盘和Prometheus监控指标等。通过这些工具,我们可以实时监控集群的性能指标,如CPU使用率、内存使用率、磁盘I/O等,及时发现和解决潜在的问题。此外,还可以通过日志分析和告警机制来进一步保障集群的稳定运行。
2. Doris集群搭建与运维
• 集群搭建:Doris的集群搭建相对简单,只需要按照官方文档的指引配置好FE和BE节点即可。在搭建过程中,要注意节点的角色分配和网络配置,确保各个节点之间能够正常通信。同时,为了提高集群的性能和稳定性,可以根据实际需求调整节点的数量和资源配置。
• 运维管理:Doris提供了一些运维管理工具,如FE的管理界面和命令行工具等。通过这些工具,我们可以方便地管理集群的元数据、监控节点状态、执行数据平衡和备份恢复等操作。此外,Doris还支持在线扩容和缩容功能,使得集群能够根据业务需求灵活调整资源配置。
六、总结与建议
通过对TiDB和Doris的实操对比,我们可以看出这两款数据库各有其独特的优势和适用场景。
TiDB作为一款分布式关系型数据库,具有强大的事务处理能力和高并发读写性能,适合对数据一致性和事务支持有严格要求的业务场景,如金融交易、电商订单处理等。同时,TiDB的兼容性较好,能够很好地与现有的应用系统和开发工具集成。
Doris则是一款专注于分析型查询的数据库,具有高效的列式存储和查询性能,在处理大规模数据的分析和报表生成方面表现出色。对于需要进行复杂数据分析、数据挖掘和商业智能应用的场景,Doris是一个不错的选择。
在实际项目中,选择TiDB还是Doris,需要根据具体的业务需求、数据特点和技术团队的能力来综合考虑。如果业务对事务处理和实时性要求较高,且数据量不是特别巨大,TiDB可能更适合;如果主要进行数据分析和大规模数据处理,对查询性能有较高要求,那么Doris可能会更有优势。
希望这次的实操对比能够帮助你更好地了解TiDB和Doris的特点和应用场景,在数据库选型时做出更明智的决策。加油哦,小伙伴们!
相关文章:
TiDB与Doris实操对比:深度剖析数据库选型要点
TiDB与Doris实操对比:深度剖析数据库选型要点 宝子们,在大数据处理的广阔天地里,TiDB和Doris都是备受瞩目的数据库解决方案。它们各自有着独特的优势和适用场景,对于我们开发者来说,深入了解它们的实操特性࿰…...
How to install vmware workstation pro on Linux mint 22
概述 VMware 是一家专注于虚拟化技术和云计算解决方案的全球领先软件公司,成立于1998年,总部位于美国加州。它的核心技术是通过“虚拟化”将一台物理计算机的硬件资源(如CPU、内存、存储等)分割成多个独立的虚拟环境(…...
redis常用部署架构之redis分片集群。
redis 3.x版本后开始支持 作用: 1.提升数据读写速度 2..提升可用性 分片集群就是将业务服务器产生的数据储存在不同的机器上。 redis分片集群的架构 如上图所示,会将数据分散存储到不同的服务器上,相比于之前来说,redis要处…...
vim的一般操作(分屏操作) 和 Makefile 和 gdb
目录 一. vim的基本概念 二. vim基础操作 2.1 插入模式 aio 2.2 [插入模式]切换至[正常模式] Esc 2.3[正常模式]切换至[末行模式] shift ; 2.4 替换模式 Shift R 2.5 视图(可视)模式 (可以快速 删除//注释 或者 增加//注释) ctrl v 三&…...
DeepSeek 为何能在短时间内超过 ChatGPT?—— 技术变革与成本重构的双重胜利
2025 年 1 月 27 日,全球科技圈见证了一个历史性时刻:中国 AI 公司深度求索(DeepSeek)开发的同名应用,首次登顶美国苹果 App Store 免费下载榜,超越了长期霸榜的 ChatGPT。这一突破不仅打破了美国科技公司在…...
Wireshark学习
Wireshark简介 抓包前 1.打开wireshark得到下面的界面 2.选择菜单栏上捕获-> 选项,勾选WLAN网卡(这里需要根据各自电脑网卡使用情况选择,简单的办法可以看使用的IP对应的网卡)。点击开始。启动抓包。 3.wireshark启动后&am…...
我的创作纪念日——三周年
大家好,心心念念的三年之气已到,但是我似乎对于博客专家的身份没有那么渴望了哈哈。虽然最近比较忙,但是看到三周年纪念日的通知,还是想写一点什么,并不是因为三周年有多么值得纪念,而是这段时间确实有一些…...
Softmax 回归 + 损失函数 + 图片分类数据集
Softmax 回归 softmax 回归是机器学习另外一个非常经典且重要的模型,是一个分类问题。 下面先解释一下分类和回归的区别: 简单来说,分类问题从回归的单输出变成了多输出,输出的个数等于类别的个数。 实际上,对于分…...
基于云服务器的数仓搭建-hive/spark安装
mysql本地安装 安装流程(内存占用200M,升至2.1G) # 将资料里mysql文件夹及里面所有内容上传到/opt/software/mysql目录下 mkdir /opt/software/mysql cd /opt/software/mysql/ # 待上传文件 install_mysql.sh mysql-community-client-8.0.3…...
YOLO历代发展 图像增强方式 架构
YOLO1 YOLOV5 数据增强 mosaic 仿射变换(Affine)、透视变换(Perspective) 网络搭建...
Spring AI Alibaba EmbeddingModel使用
一、嵌入模型 (Embedding Model)简介 1、核心概念 嵌入模型(EmbeddingModel)是嵌入过程中采用的模型。 当前 EmbeddingModel的接口主要用于将文本转换为数值向量,接口的设计主要围绕这两个目标展开: 可移植性: 该接口…...
C++入门五式——类和对象(下)
目录 再探构造函数——初始化列表 类型转换 static成员 友元函数 内部类 匿名对象 再探构造函数——初始化列表 之前我们实现构造函数时,初始化成员变量主要使用函数体内赋值,构造函数初始化还有一种方式,就是初始化列表。 //初始化列…...
Spring的SPEL(Spring Expression Language)的使用说明,包含语法、示例和常见场景
以下是Spring的SPEL(Spring Expression Language)的使用说明,包含语法、示例和常见场景: 1. 基本语法 变量引用 表达式:#{变量名}(如#{systemProperties[os.name]})作用域:在Sprin…...
Linux应用:线程进阶
线程同步之信号量 信号量(Semaphore)是一个整型的计数器,用于控制对共享资源的访问。它通过 PV 操作来实现同步,P 操作将信号量的值减 1,如果值小于 0 则线程阻塞;V 操作将信号量的值加 1,如果…...
策略模式 (Strategy)
策略模式 (Strategy) 应用场景:用于处理不同的任务配置参数。在你的任务中,可能会有不同的任务类型,每个任务类型可能有不同的单位(比如米、毫米)或不同的处理方式。策略模式可以让你根据不同的任务类型选择不同的处理…...
【YOLOv8】YOLOv8改进系列(10)----替换主干网络之UniRepLKNet
主页:HABUO🍁主页:HABUO 🍁YOLOv8入门改进专栏🍁 🍁如果再也不能见到你,祝你早安,午安,晚安🍁 【YOLOv8改进系列】: YOLOv8改进系列࿰…...
mathtype一些用法总结
1.一个是公式旁边加入||,一般使用键盘直接打入的会比较小,mathtype中的会好看很多,打开这个栏目,会看到有很多。 2.另外是带^符号,在字符上面带没有办法直接带,所以可以在mathtype中先加帽子,然…...
1、SQL注入攻击的防范
原文地址: SQL注入攻击的防范 更多内容请关注:代码安全 PHP安全编码——书写安全的代码 1、SQL注入攻击的防范 提问 问题1:什么是SQL注入攻击? 问题2:有几种简单方法防范SQL注入攻击? 问题3:mys…...
核心知识——论文总结
引入 本文我们会针对论文中的核心内容进行总结,加深小伙伴对于Spark的理解。而通过Spark的论文,重点需要掌握理解如下内容: Spark 里核心的 RDD 是一个什么概念,它是通过什么方式来优化分布式数据处理的,它的设计思路…...
HTTP 核心知识点整理
1. HTTP 基础 定义:HTTP(HyperText Transfer Protocol)是应用层协议,基于 请求-响应模型,用于客户端(浏览器)与服务器之间的通信。特点: 无状态:每次请求独立&a…...
什么是矩阵账号
矩阵账号是指在同一平台或多个平台上,围绕同一品牌或个人,创建的多个相互关联、协同工作的账号组合。这些账号虽然独立,但在内容定位和运营策略上有所区分,同时又相互引流,共同形成一个网络结构,类似于矩阵…...
【6】VS Code 新建上位机项目---项目分层
【6】VS Code 新建上位机项目---项目分层 1 项目分层(layer)2 项目分层实现数据插入SQL3 项目分层实现 (实体类封装参数)4 项目分层的实现SQL查询数据1 项目分层(layer) 表示层(UI):与用户交互使用。比如按钮,输入信息等;业务层(BLL):传递数据,业务逻辑。根据用户需…...
EspressoSample深度解析:在CircleCI上高效运行Android UI测试
项目背景与简介 EspressoSample项目位于GitHub上的circleci/EspressoSample仓库,该项目旨在展示如何在CircleCI平台上配置和使用Espresso进行Android应用的UI测试。 项目结构与环境准备 项目结构 EspressoSample项目遵循典型的Android项目结构,包含a…...
【每日论文】MetaSpatial: Reinforcing 3D Spatial Reasoning in VLMs for the Metaverse
下载PDF或查看论文,请点击: LlamaFactory - huggingface daily paper - 每日论文解读 | LlamaFactory | LlamaFactory探索LlamaFactory,为你解读AI前沿技术文章,快速掌握最新技术动态https://www.llamafactory.cn/daily-paper/de…...
mac m4 Homebrew安装MySQL 8.0
1.使用Homebrew安装MySQL8 在终端中输入以下命令来安装MySQL8: brew install mysql8.0 安装完成后,您可以通过以下命令来验证MySQL是否已成功安装: 2.配置mysql环境变量 find / -name mysql 2>/dev/null #找到mysql的安装位置 cd /op…...
Java关于多态
多态 字面意思:对象的多种形态。 Student(子类)<-Person(父类)->Teacher(子类) Student snew Student(); 学生形态 对象 代表用new创建一个学生对象赋值给Student 类型,代表Student类型(学生对象)现在是学生形态。 有了多态之后ÿ…...
K8S学习之基础四十六:k8s中部署Kibana
部署kibana组件 上传kibina镜像到harbor 部署kibana组件,包括svc和deplomentvi kibana.yaml apiVersion: v1 kind: Service metadata:name: kibananamespace: kube-logginglabels:app: kibana spec:ports:- port: 5601selector:app: kibana --- apiVersion: apps/…...
如何快速对比两个不同的excel文件中的单元格的数据是否完全相同 并把不同的单元格的背景颜色更改为红色?
要快速对比两个不同的Excel文件中的单元格数据是否完全相同,并将不同的单元格背景颜色更改为红色,可以使用Excel的以下几种方法: 方法一:使用条件格式 打开两个Excel文件。将一个文件的内容复制到另一个文件的新工作表中&#x…...
基于Python+LanceDB实战向量搜索
本篇实战演示向量搜索的实现和示例。 预期效果 给出一个查询的字符串,通过向量搜索,在下面三个语句中搜索出关联性最大的那句。 "熊猫是中国的国宝,主要栖息在四川山区。","长城是古代中国建造的军事防御工事,全…...
多路转接epoll
目录 一、为什么epoll最高效? 二、epoll的三个系统调用 三、理解epoll模型 四、epoll的优点 五、epoll的使用示例 六、epoll的工作模式 ET模式和LT模式的对比 七、epoll的使用场景 总结 一、为什么epoll最高效? 按照 man 手册的…...
AI编程工具哪家强?对比Cusor、Copilot、Cline
前言 AI最先革谁的命?刚毕业参加工作的那个时候就在想是否可以开发一个程序让它自己写代码,在那个遥远的年代,这种想法仿佛就是天方夜谭。但是今天大模型的出现让理想成为了现实。回答前面的问题,AI最先革谁的命,最聪…...
[FPGA基础学习]实现流水灯与按键暂停
FPGA实现LED流水灯 1.vscode的安装和使用 vscode下载 Visual Studio Code - Code Editing. Redefined vscode插件(Verilog-HDL/SystemVerilog)下载 quartus绑定vscode 2.用6个LED完成周期为1秒的跑马灯效果 流水灯模块设计 时钟输入 DE2-115开发板…...
刷题记录(LeetCode 994.腐烂的橘子)
在给定的 m x n 网格 grid 中,每个单元格可以有以下三个值之一: 值 0 代表空单元格;值 1 代表新鲜橘子;值 2 代表腐烂的橘子。 每分钟,腐烂的橘子 周围 4 个方向上相邻 的新鲜橘子都会腐烂。 返回 直到单元格中没有…...
ECharts折线图源码合集1(共18个自定义图表),附视频讲解与代码下载
引言: 在数据可视化的世界里,ECharts凭借其丰富的图表类型和强大的配置能力,成为了众多开发者的首选。今天,我整理了18个自定义折线图图表,不仅对每个图表代码进行了精简优化,剥离冗余配置项,…...
SQL小菜之TOP N查找问题
前言 SQL的编写是后端面试中非常常见,其中TOP N查找问题也是高频出现的问题,今天我们来看两道SQL TOPN问题。 问题 我们有一张雇员表Employee: CREATE TABLE Employee (id int DEFAULT NULL,salary int DEFAULT NULL,department varchar(…...
蓝桥杯 临时抱佛脚 之 二分答案法与相关题目
二分答案法(利用二分法查找区间的左右端点) (1)估计 最终答案可能得范围 是什么 (2)分析 问题的答案 和 给定条件 之间的单调性,大部分时候只需要用到 自然智慧 (3)建…...
Css环形旋转立体感动画
Css环形旋转立体感动画 index.html <!DOCTYPE html> <html lang"en" > <head><meta charset"UTF-8"><title>Css环形旋转立体感动画</title><link rel"stylesheet" href"./style.css">&l…...
音乐极客指南:Melody高音质私有云音乐平台本地部署方案
文章目录 前言1. 添加镜像源2. 本地部署Melody3. 本地访问与使用演示4. 安装内网穿透5. 配置Melody公网地址6. 配置固定公网地址 前言 嘿,各位音乐爱好者们!今天我要带大家玩个大招——在香橙派Zero3上搭建你的专属在线音乐平台,还能通过cpo…...
Microi吾码界面设计引擎之基础组件用法大全【内置组件篇·中】
🎀🎀🎀 microi-pageengine 界面引擎系列 🎀🎀🎀 一、Microi吾码:一款高效、灵活的低代码开发开源框架【低代码框架】 二、Vue3项目快速集成界面引擎 三、Vue3 界面设计插件 microi-pageengine …...
# WebSocket 与 Socket.IO 对比与优化
核心概念对比 WebSocket 协议性质:HTML5 提供的全双工通信协议 (RFC 6455)连接方式:基于 TCP 的低层协议通信模式:持久化连接,服务端可主动推送协议升级:通过 HTTP 101 状态码切换协议 Socket.IO 协议性质…...
vue3中,route4,获取当前页面路由的问题
首先应用场景如下: 在main.js里面,引入的是路由的配置文件,如下: import {router} from /router; app.use(router); 路由配置文件router.js如下: import { createRouter, createWebHistory } from vue-router; imp…...
python将整个txt文件写入excel的一个单元格?
要将整个txt文件写入Excel的一个单元格,可以使用Python的openpyxl库来实现。以下是一个简单的示例代码: from openpyxl import Workbook# 读取txt文件内容 with open(file.txt, r) as file:txt_content file.read()# 创建一个新的Excel工作簿 wb Work…...
日志2333
Pss-9 这一关考察的是时间盲注 先练习几个常见命令语句: select sleep(5);--延迟5s输出结果 if (1>0,ture,false);--输出‘ture’ /if (1<0,ture,false);--输出‘false’ select ascii()/select ord()返回字…...
用Deepseek写扫雷uniapp小游戏
扫雷作为Windows系统自带的经典小游戏,承载了许多人的童年回忆。本文将详细介绍如何使用Uniapp框架从零开始实现一个完整的扫雷游戏,包含核心算法、交互设计和状态管理。无论你是Uniapp初学者还是有一定经验的开发者,都能从本文中获得启发。 …...
C++中的异常和智能指针
一、C中的异常 1.1C语言中关于错误的处理(回顾) 1.1.1处理一:文件中的错误码,错误信息 C语言中,文件打开成功则返回地址,不成功返回0 FILE* foutfopen("Test.txt","r"); cout<&…...
Selenium 简单入门操作示例
最简单的 Selenium 示例(Python版) 下面是一个完整的、最简单的 Selenium 操作示例,带你快速上手: from selenium import webdriver from selenium.webdriver.common.by import By import time# 1. 启动浏览器(这里使…...
6.1 模拟专题:LeetCode 1576. 替换所有的问号
1. 题目链接 LeetCode 1576. 替换所有的问号 2. 题目描述 给定一个仅包含小写字母和问号 ? 的字符串 s,要求将所有 ? 替换为任意小写字母,使得替换后的字符串中 没有相邻的两个字符相同。 示例: 输入:s "?zs" →…...
前端知识点---用正则表达式判断邮箱(javascript)
// 全面的正则(兼容大多数情况) const emailRegex /^[a-zA-Z0-9._%-][a-zA-Z0-9.-]\.[a-zA-Z]{2,}$/;// 或直接使用浏览器内置验证 <input type"email" required>/:正则表达式的起始和结束标志。 ^:匹配字符串的…...
深度剖析 Spring 源码 性能优化:核心原理与最佳实践
深度剖析 Spring 源码 & 性能优化:核心原理与最佳实践 🚀 Spring 框架 作为 Java 生态的核心技术,广泛应用于企业级开发。但很多开发者只会“用”Spring,而不深入其内部原理,导致无法高效排查问题 & 进行性能优…...
Axure RP9教程 :轮播图(动态面板) | 头部锁定
文章目录 引言I 轮播图操作步骤在画布中添加一个动态面板设置面板状态II 头部锁定将头部区域选中,右键组合或用Ctrl+G快捷键;将组合的头部区域,右键创建动态面板;引言 动态面板的功能十分强大,比如:拥有独立的内部坐标系,有多个状态; Banner的案例中会用到动态面板多个…...