【金仓数据库征文】从Oracle到KingbaseES的语法兼容与迁移
随着“信创”战略的深入推进,国产数据库逐渐成为IT系统的重要组成部分。KingbaseES(金仓数据库)凭借其良好的Oracle兼容性和日益完善的生态,成为金融、政务等核心行业国产化替代的重要选项。本文将从语法兼容性分析出发,系统梳理从Oracle迁移至KingbaseES的全过程,分享迁移中遇到的典型问题与实战解决方案,帮助读者顺利完成系统国产化落地。
目录
一、兼容性分析:从Oracle到KingbaseES的技术对齐
1.1 SQL语法兼容性概览
1.2 Oracle对象与KingbaseES对象映射
1.3 特别语法处理建议
二、迁移准备:架构梳理与策略规划
2.1 系统评估清单:看清“家底”,再动迁移
1)数据库结构层
2)业务逻辑层
3)任务调度层
4)接口调用层
5)第三方依赖与外围工具
2.2 迁移流程策略:结构 - 数据 - 逻辑 - 接口 四步走
1)结构迁移(DDL)
2)数据迁移(DML)
3)逻辑迁移(PL/SQL)
4)接口适配与测试
2.3 项目角色与节奏安排建议
2.4 迁移过程中常用工具建议
三、实战案例:金融系统迁移全过程
3.1 项目背景与迁移挑战
3.2 表结构迁移实战
3.3 存储过程迁移与优化
3.4 JOB调度迁移 Oracle中:
3.5 数据一致性校验脚本
一、兼容性分析:从Oracle到KingbaseES的技术对齐
在国产数据库替代进程中,Oracle系统的迁移是最具挑战性的任务之一。其挑战不仅源于业务系统对数据库依赖度极高,更在于Oracle数据库庞大复杂的SQL扩展体系、丰富的对象模型和高性能调度机制。KingbaseES作为国产数据库中的佼佼者,其核心优势之一正是对Oracle语法和特性的高度兼容性。
本节将聚焦Oracle与KingbaseES之间的语法兼容、对象映射和典型差异,为后续迁移打下坚实基础。
1.1 SQL语法兼容性概览
KingbaseES自V6版本起就确立了向Oracle兼容方向演进的技术路线,其在SQL标准和扩展语法的支持度上做了大量工作:
-
支持标准SQL 92/99大部分语法
-
兼容Oracle的PL/SQL开发语言
-
支持Oracle的常用函数、数据类型和系统对象
例如,KingbaseES在PL/SQL支持方面包括过程(PROCEDURE)、函数(FUNCTION)、包(以模块方式部分支持)、游标(CURSOR)、触发器(TRIGGER)等。这种设计大大降低了迁移过程中对存储逻辑的重构工作量。
然而,也存在部分差异或不完全兼容之处:
类别 | Oracle特色 | KingbaseES支持情况 | 备注说明 |
---|---|---|---|
数据类型 | NUMBER(p,s) 精度动态可变 | NUMERIC(p,s) 固定精度 | 精度不匹配时需注意数据溢出风险 |
函数支持 | NVL 、DECODE 、SYS_CONNECT_BY_PATH 等 | 部分支持 | 可用 CASE、COALESCE、递归CTE 代替 |
日期处理 | SYSDATE , ADD_MONTHS 等 | 提供函数名兼容替代 | 注意时区设置与默认返回类型差异 |
动态SQL | EXECUTE IMMEDIATE , DBMS_SQL | 基本兼容 | 推荐使用 EXECUTE IMMEDIATE 语法 |
存储过程语法 | 异常处理 EXCEPTION WHEN | 完整支持 | 部分报错代码差异需调整 |
1.2 Oracle对象与KingbaseES对象映射
数据库迁移的核心之一是对象模型的迁移,以下是常见Oracle对象与KingbaseES对应映射表:
Oracle 对象 | KingbaseES 对应对象 | 兼容性说明 |
---|---|---|
TABLE | TABLE | 结构基本一致,约束、分区功能逐步增强 |
VIEW | VIEW | 语法基本一致 |
SEQUENCE | SEQUENCE | 兼容 NEXTVAL、CURRVAL |
TRIGGER | TRIGGER | 支持 BEFORE/AFTER 事件 |
FUNCTION/PROCEDURE | FUNCTION/PROCEDURE | 支持基本PL/SQL语法 |
PACKAGE | 暂无原生支持 | 需转为模块化FUNCTION组合 |
SYNONYM | 暂无直接映射 | 可通过VIEW或ALIAS方式模拟 |
MATERIALIZED VIEW | 支持(近V8开始完善) | 同步机制不同,建议使用定时刷新+物化表模拟 |
特别提醒,PACKAGE 是Oracle特有的模块封装机制,在Kingbase中需要分解为多个FUNCTION并适配调用逻辑。此外,Oracle的SYNONYM机制目前并无Kingbase直接替代方案,推荐通过逻辑视图或统一命名策略解决。
1.3 特别语法处理建议
-
触发器兼容策略:Kingbase支持 BEFORE/AFTER INSERT/UPDATE/DELETE 等事件,但对于复合触发器(如INSTEAD OF)需要用视图或应用逻辑替代。
-
JOB调度迁移建议:Oracle的
DBMS_SCHEDULER
可迁移为系统级 crontab + 存储过程调用,或使用Kingbase支持的任务调度框架。 -
安全性语法:部分如
AUDIT
、GRANT EXECUTE ON PACKAGE
的语法需根据Kingbase权限系统重构。
二、迁移准备:架构梳理与策略规划
一套成功的数据库迁移工程,并非从执行脚本开始,而是始于详尽的系统评估与周密的策略制定。特别是在从Oracle迁移至KingbaseES的过程中,由于两者在对象结构、语义执行与生态工具链方面均存在一定差异,因此迁移前的准备工作尤为关键。
2.1 系统评估清单:看清“家底”,再动迁移
迁移前必须对现有系统做一次“体检”,主要涵盖以下五大维度:
1)数据库结构层
-
表结构是否使用了分区表?是否有嵌套视图?
-
索引类型有哪些?是否有函数索引、位图索引?
-
是否使用LOB字段、外键、唯一约束等特殊对象?
2)业务逻辑层
-
有多少函数、存储过程、触发器?PL/SQL的使用频率如何?
-
动态SQL是否大量使用?是否存在调用链复杂的PACKAGE?
3)任务调度层
-
是否依赖DBMS_JOB、DBMS_SCHEDULER?
-
是否有计划任务控制事务性逻辑(如月底结转、每日结算等)?
4)接口调用层
-
是否使用OCI驱动或Oracle专有驱动(如Pro*C)?
-
是否通过中间件调用如MyBatis/Hibernate/JPA?
5)第三方依赖与外围工具
-
BI、报表系统如FineReport、BO、DataStage是否通过SQL集成?
-
是否对接硬件加密卡、审计系统、安全网关等设备?
以上评估要形成文档和资产清单,并标注“需重构”、“需测试”、“可复用”等分类标签,为后续迁移策略制定提供依据。
2.2 迁移流程策略:结构 - 数据 - 逻辑 - 接口 四步走
一个清晰、闭环的迁移策略应该覆盖以下四大阶段:
1)结构迁移(DDL)
-
使用
KDBM
工具自动分析Oracle的DDL脚本并转换为KingbaseES兼容语法。 -
对不兼容结构如PACKAGE、TYPE等需人工调整,或拆解为多个子模块处理。
2)数据迁移(DML)
-
小数据量系统可采用全量导出导入(如KDBM + CSV),大数据量需使用并行流式传输工具如pgloader或DataX。
-
建议按业务模块或分表分批导入,便于故障回溯与压测。
3)逻辑迁移(PL/SQL)
-
存储过程需重构语法、错误处理、日志输出等语义。
-
多采用“对照表格 + 单元测试”方式验证迁移一致性。
-
动态SQL必须统一参数绑定机制,防止语义漂移或SQL注入。
4)接口适配与测试
-
对接应用需重新配置JDBC连接串,并调试参数(如ConnectionPool行为)。
-
若使用ORM框架,需检查SQL方言兼容性、事务传播配置。
-
与外围系统接口需重新测试连接池、加密方式、字符集等。
2.3 项目角色与节奏安排建议
迁移项目应组建一支跨部门的小型敏捷团队,典型角色及职责如下:
角色 | 职责 |
---|---|
DBA | 数据库结构迁移、性能调优、备份与恢复验证 |
后端开发 | 存储过程重构、应用重构、接口适配 |
测试工程师 | 数据一致性校验、回归测试、压力测试 |
架构师 | 统筹系统评估、集群规划、故障策略设计 |
2.4 迁移过程中常用工具建议
工具 | 用途 | 说明 |
---|---|---|
KDBM | 元数据分析、结构迁移工具 | Kingbase官方出品 |
pgloader | 高效并发数据迁移工具 | 支持从Oracle全量迁移 |
SQLDiff | SQL结构对比工具 | 可识别存储过程、触发器等细粒度差异 |
Navicat | 可视化连接管理 + SQL测试 | 支持Oracle与Kingbase双连接 |
三、实战案例:金融系统迁移全过程
在众多行业中,金融系统对数据库的性能、可靠性和一致性要求极高。本节以某省级农村商业银行核心账务子系统的Oracle迁移项目为例,深入讲述从评估、结构迁移到逻辑改造、接口适配全过程,并穿插关键代码示例。
3.1 项目背景与迁移挑战
该系统原基于Oracle 11g,包含上百张业务表、数十个包、上千条存储过程,部署在高可用双机集群上。核心业务涉及高并发资金清算、利息计算、账户变更等,迁移挑战主要体现在以下方面:
-
数据结构复杂,依赖多个分区表和索引策略
-
使用大量PL/SQL嵌套调用(函数→包→过程→游标)
-
JOB调度与中间件耦合紧密
-
对数据一致性要求极高,零容忍“账实不符”
3.2 表结构迁移实战
通过KDBM导出结构,部分DDL语法需手动调整。例如,Oracle支持分区表语法:
CREATE TABLE txn_detail (id NUMBER PRIMARY KEY,txn_date DATE,amount NUMBER(12,2)
)
PARTITION BY RANGE (txn_date) (PARTITION p1 VALUES LESS THAN (TO_DATE('2023-01-01', 'YYYY-MM-DD')),PARTITION p2 VALUES LESS THAN (TO_DATE('2024-01-01', 'YYYY-MM-DD'))
);
KingbaseES 中需转换为语义等价的继承表结构:
-- 主表
CREATE TABLE txn_detail (id NUMERIC PRIMARY KEY,txn_date DATE,amount NUMERIC(12,2)
);-- 子表模拟分区
CREATE TABLE txn_detail_p1 (LIKE txn_detail) INHERITS (txn_detail);
CREATE TABLE txn_detail_p2 (LIKE txn_detail) INHERITS (txn_detail);
应用层通过 UNION ALL
视图汇总数据:
CREATE VIEW txn_detail_all AS
SELECT * FROM txn_detail_p1
UNION ALL
SELECT * FROM txn_detail_p2;
3.3 存储过程迁移与优化
Oracle过程示例:
CREATE OR REPLACE PROCEDURE calc_interest(p_account_id IN NUMBER) ISv_rate NUMBER;
BEGINSELECT rate INTO v_rate FROM interest_config WHERE account_id = p_account_id;UPDATE accountSET interest = balance * v_rate / 100WHERE id = p_account_id;
EXCEPTIONWHEN OTHERS THENINSERT INTO error_log VALUES (p_account_id, SYSDATE, SQLERRM);
END;
KingbaseES改写版本:
CREATE OR REPLACE FUNCTION calc_interest(p_account_id NUMERIC)
RETURNS VOID AS $$
DECLAREv_rate NUMERIC;
BEGINSELECT rate INTO v_rate FROM interest_config WHERE account_id = p_account_id;UPDATE accountSET interest = balance * v_rate / 100WHERE id = p_account_id;EXCEPTION WHEN OTHERS THENINSERT INTO error_log VALUES (p_account_id, CURRENT_TIMESTAMP, SQLERRM);
END;
$$ LANGUAGE plpgsql;
3.4 JOB调度迁移 Oracle中:
BEGINDBMS_SCHEDULER.CREATE_JOB (job_name => 'DAILY_INTEREST',job_type => 'PLSQL_BLOCK',job_action => 'BEGIN calc_all_interest(); END;',start_date => SYSTIMESTAMP,repeat_interval => 'FREQ=DAILY;BYHOUR=0;BYMINUTE=0',enabled => TRUE);
END;
KingbaseES方案:
# /etc/crontab
0 0 * * * postgres psql -d bankdb -c "SELECT calc_all_interest();"
3.5 数据一致性校验脚本
import cx_Oracle
import psycopg2oracle_conn = cx_Oracle.connect("user/pwd@ORCL")
kingbase_conn = psycopg2.connect(dbname="bankdb", user="postgres", password="pwd")oracle_cur = oracle_conn.cursor()
kingbase_cur = kingbase_conn.cursor()oracle_cur.execute("SELECT COUNT(*) FROM txn_detail")
kingbase_cur.execute("SELECT COUNT(*) FROM txn_detail")o_count = oracle_cur.fetchone()[0]
k_count = kingbase_cur.fetchone()[0]assert o_count == k_count, f"Mismatch! Oracle: {o_count}, Kingbase: {k_count}"
print("行数一致,初步验证成功")
Oracle向KingbaseES的迁移,不只是一次技术转向,更是信创背景下自主可控的战略选择。本文从兼容性分析到实践案例,系统剖析了迁移过程中可能遇到的挑战与解决方案。面对日益增长的国产化需求,建议企业在迁移前做好充分评估,结合Kingbase生态工具与社区支持,构建稳健、高性能的数据库底座。未来,期待金仓数据库持续拓展其生态边界,为“技术自立”贡献更强引擎。
相关文章:
【金仓数据库征文】从Oracle到KingbaseES的语法兼容与迁移
随着“信创”战略的深入推进,国产数据库逐渐成为IT系统的重要组成部分。KingbaseES(金仓数据库)凭借其良好的Oracle兼容性和日益完善的生态,成为金融、政务等核心行业国产化替代的重要选项。本文将从语法兼容性分析出发࿰…...
MATLAB 下载安装教程
## 一、下载MATLAB 1. 访问 MathWorks 官方网站:https://www.mathworks.com/ 2. 点击右上角的"登录"按钮 - 如果没有账号,需要先注册一个 MathWorks 账号 - 学生可以使用教育邮箱注册,获得教育版授权 3. 登录后,点击&…...
Android kotlin通知功能完整实现指南:从基础到高级功能
本文将详细介绍如何在Android应用中实现通知功能,包括基础通知、动作按钮和内联回复等高级特性。 一、基础通知实现 1. 基本通知发送方法 fun sendBasicNotification(context: Context, title: String, message: String) {// 1. 创建通知渠道(Android 8.0必需)va…...
Javase 基础入门 —— 04 继承
本系列为笔者学习Javase的课堂笔记,视频资源为B站黑马程序员出品的《黑马程序员JavaAI智能辅助编程全套视频教程,java零基础入门到大牛一套通关》,章节分布参考视频教程,为同样学习Javase系列课程的同学们提供参考。 01 什么是继…...
2.4/Q2,Charls最新文章解读
文章题目:The impact of hearing ability on depression among retired middle-aged and elderly individuals in China: the chain mediating role of self-rated health and life satisfaction DOI:10.1186/s41043-025-00791-9 中文标题:中…...
对流对象的理解
在c里,“流”可以理解为数据传输与操作的“介质”。 从输入输出角度来看,有输入流(比如cin)和输出流(cout)。对于输入流,数据通过它从外部设备(例如键盘)“流入”程序内…...
RBAC权限-笔记
1. RBAC模型简介 1.1. RBAC三要素 RBAC权限模型(Role-Based Access Control:基于角色的访问控制)有3个基础组成部分,分别是:用户、角色和权限。它们之间的关系如下图所示: 用户(User)…...
stm32之GPIO函数详解和上机实验
目录 1.LED和蜂鸣器1.1 LED1.2 蜂鸣器 2.实验2.1 库函数:RCC和GPIO2.1.1 RCC函数1. RCC_AHBPeriphClockCmd2. RCC_APB2PeriphClockCmd3. RCC_APB1PeriphClockCmd 2.1.2 GPIO函数1. GPIO_DeInit2. GPIO_AFIODeInit3. GPIO_Init4. GPIO_StructInit5. GPIO_ReadInputDa…...
MsQuick编译和使用
MsQuick编译和使用 编译克隆代码使用cmakevs2022编译 使用示例 编译 克隆代码 git clone --recurse-submodules https://github.com/microsoft/msquic.git使用cmakevs2022编译 然后直接configure之后Generate然后打开vs工程编译即可生成动态库 使用示例 #include <s…...
01 ubuntu中wps桌面快捷键无法使用
文章目录 1. 问题描述:2. 解决方法:3. 结果展示4. 参考 1. 问题描述: 2. 解决方法: 添加权限 chmod 755 ./wps-office-prometheus.desktop 右键选择允许运行 3. 结果展示 修改前 修改后 4. 参考 参考1...
云原生后端架构:重塑后端开发的新范式
📝个人主页🌹:慌ZHANG-CSDN博客 🌹🌹期待您的关注 🌹🌹 一、引言:后端开发的新时代正在到来 传统的后端开发常常面临如下挑战:部署流程复杂、环境不一致、系统难以扩展、监控能力薄弱、上线流程缓慢。在企业数字化转型、业务快速迭代的大背景下,这些问题暴露得…...
Linux命令-tcpdump
tcpdump 是一个功能强大的网络数据包捕获和分析工具。以下是 tcpdump 命令的完整参数列表及说明: 参数 -a 将网络地址和广播地址转换为名字 tcpdump -a -i eth0-A 以 ASCII 格式打印所有分组,最小化链路层头部信息 tcpdump -A-b 在数据链路层上选择协议…...
分糖果——牛客
链接:登录—专业IT笔试面试备考平台_牛客网 来源:牛客网 题目描述 幼儿园准备了nnn包糖果,每包糖果里有111、222或333颗美味的糖果。现在需要将这些这些糖果平分给两个表现优异的小朋友以作奖励,为了公平公正,需要…...
L0、L2和L∞范数这三种范数的区别
目录 一、解释 1. L0范数:数一数你有多少件行李 2. L2范数:别把行李塞得太满 3. L∞范数:别带任何超重的东西 一句话总结 二、作用 1. L0范数的作用:做减法,只留最重要的…...
[实战]zynq7000设备树自动导出GPIO
目录 zynq7000设备树自动导出GPIO添加设备树节点验证实验 结论 zynq7000设备树自动导出GPIO 今天无聊,掏出我82年产的microzed玩一玩。玩啥好呢,要不点个灯吧。于是,三下五除二,通过linux sys接口以及echo,很快就点亮…...
java六人打分
import java.util.Scanner;public class HelloWorld {public static void main(String[] args) {//打分平均分System.out.println("请输入六个评分");Scanner sc new Scanner(System.in);double[] score new double[6];for(int i0;i<score.length;i){System.ou…...
量子计算浪潮下的安全应对之法
量子计算凭借其强大的计算能力,被传言能够在极短时间内秒级破解传统计算机需耗时漫长岁月(以万年算)才能解开的密码,成为了近年来人们讨论的热点。这看似高深的科技名词在网络安全中又扮演着何种角色?我们应从当前人们…...
Windows Server 2022 常见问题解答
一、安装与部署 1.1 系统要求 硬件配置:最低需要 1.4 GHz 64 位处理器、512 MB 内存、32 GB 硬盘空间。但在实际生产环境中,为确保系统流畅运行,建议使用 2.0 GHz 以上处理器、8 GB 以上内存和 100 GB 以上硬盘。软件兼容性:与大多数基于 Windows 的企业级应用兼容,但在安…...
项目组合管理PPM
项目组合管理(Project Portfolio Management, PPM)详述 一、定义与核心目标 定义 项目组合管理是通过系统化的方法,对组织的所有项目和项目集进行识别、选择、优先级排序、资源配置和动态监控,以确保其与战略目标一致,并最大化投资回报(ROI)的管理过程。 核心目标 战略…...
自建开源远程协助服务RustDesk —— 筑梦之路
开源项目 # 服务端https://github.com/rustdesk/rustdesk-server.git# 客户端https://github.com/rustdesk/rustdesk.git 搭建服务端 需要使用的端口、协议 hbbs - RustDesk ID 注册服务器 hbbr - RustDesk 中继服务器默认情况下,hbbs 监听 21115(tcp) , 21…...
【android bluetooth 协议分析 11】【AVDTP详解 2】【avdtp 初始化阶段主要回调关系梳理】
在车机中 a2dp 通常情况下作为 sink. 本篇来帮助各位 朋友梳理一下,这部分的初始化流程。 我们着重梳理 native 层的逻辑, framework - java 侧一般比较容易看明白, 暂时不做梳理。 如果需要笨叔梳理的可以在博客评论。 出专门的章节来梳理。…...
C++回顾 day3
宏定义的数据是在预处理发生了替换 const类型的数据是在编译阶段发生的替换 命名空间 namespace 空间名{int a;void func_print(){printf("func_print");}struct Stu{int x;char *y;};//或者其他命名空间 } Space::x 20; cout << Space::x;using Space::x;…...
机器学习算法-分类决策树
分类决策树算法-python实现 数据集 具体方法是:从根结点开始,对结点计算所有可能的特征的信息增益,选择信息增益最大的特征作为结点的特征,由该特征的不同取值建立子节点;再对子结点递归地调用以上方法,构…...
日语学习-日语知识点小记-构建基础-JLPT-N4阶段(9): 意向形
日语学习-日语知识点小记-构建基础-JLPT-N4阶段(9): 意向形 1、前言(1)情况说明(2)工程师的信仰 2、知识点(1)「~てしまう」=「~ちゃう…...
kotlin与MVVM结合使用总结(一)
一、Kotlin 与 MVVM 结合的核心优势 代码简洁性 数据类(data class)简化 Model 层定义,自动生成equals/hashCode/toString扩展函数简化 View 层逻辑(如点击事件扩展)lateinit/by lazy优化 ViewModel 属性初始化 异步处…...
达妙电机CAN通信及实验
项目进一步往下做的时候,要上实物了,需要用到达妙电机,虽然有说明书和例程,但是STM32控制电机的具体时间还是花了些时间,我的板子和例程的有些区别,中间很多地方都需要进行修改完善,而且还补充了…...
语音合成之四基于LLM的语音合成
基于LLM的语音合成 1.技术架构1.1 LlaSA1.2 CosyVoice (和 CosyVoice2)1.3 SparkTTS 2 特性对比2.1 零样本语音克隆2.2 多语种支持2.3 可控语音生成2.4 计算效率和模型大小 总结 当前,在大型语言模型(Large Language Models,LLMs)…...
Docker Python 官方镜像使用说明(TAG说明)
Docker Python 官方镜像使用说明(TAG说明) 本文将以python的3.12版本,详细讲解官方 Python 镜像 的TAGS含义 官方文档:https://github.com/tuonioooo/docker 🧭 一张图先看懂(最常见 Tag) py…...
Node.js 开发用户登录功能(使用mysql实现)
在 Web 开发中,用户登录功能是一个基础且重要的部分。、 一、环境搭建 在开始开发之前,我们需要搭建好相应的开发环境。以下是所需的工具和库: Node.js:作为 JavaScript 的运行环境,为我们的项目提供支持。mysql2&am…...
程序员学英文之Shipment Claim 运输和索赔
Time is precious , don’t waste your time, you should spend your time on something valuable . 时间很宝贵,不要浪费时间,你应该把时间用在有 价值的事情上。 Dia-1: Shipment by Voyage Charter 租船装运 1. May I know when your bo…...
python实战项目64:selenium采集软科中国大学排名数据
python实战项目64:selenium采集软科中国大学排名数据 一、项目需求二、流程分析三、完整代码一、项目需求 本项目的需求是使用selenium采集软科中国大学排名的数据。网站首页如下: 抓取此网页数据一般有两种方式,一种是直接发requests请求,我们这里采用的是使用selenium控…...
Linux服务器:在ufw防火墙设置这套规则sudo ufw allow from 172.0.0.0/8,为什么容器就可以访问宿主机的服务了?
在 Docker 环境中,容器默认使用 桥接网络(bridge),宿主机和容器之间的通信会受到防火墙(如 ufw)的限制。当你执行 sudo ufw allow from 172.0.0.0/8 后,容器可以访问宿主机上的服务,原因如下: 1. Docker 默认使用 172.x.x.x 网段 Docker 默认会创建一个 docker0 网桥…...
Google搜索技巧
谷歌搜索 1. 使用双引号 (" ") 精确匹配短语 ● 例子:"人工智能的定义" ● 作用:确保搜索结果中包含完全匹配的短语,而不是单独的单词。 2. 使用减号 (-) 排除特定词语 ● 例子:苹果 -水果 ● 作用&…...
Reactor编程模型介绍
Reactor 模型是一种基于事件驱动的编程模型,广泛应用于高并发网络服务器的设计中。它通过事件循环和回调机制,将事件的处理逻辑从主线程中解耦出来,从而实现高效的异步 I/O 操作。Reactor 模型的核心思想是利用一个或多个事件分发器(Reactor)来监听各种事件(如 I/O 事件、…...
C++笔记-stack_queue(含deque,priority_queue,仿函数的讲解)
一.stack和queue的基本使用 stack和queue就是我们之前所学的栈和队列,这两个和之前学的vector,list不太一样: 这是vector和list的,注意第一行中写的containers,代表这两个都是容器,但是: stac…...
意见反馈留言二维码制作
意见反馈对于工作整改具有重要作用,在工作中一味埋头苦干不如抬头多听听反馈声音。而传统的反馈内容投递后,因为繁琐性和时效性的枷锁,往往石沉大海,不知何时才能得到回应,这就导致反馈信息的延迟,一些时效…...
扣子智能体平台深度解读:功能剖析与全流程工作流详解
在上一篇文章中,我们已经带大家了解了“智能体”这一概念的内涵,并通过扣子智能体平台的各大模块做了初步介绍,同时用一个简单的示例演示了如何构建和部署第一个智能体。那篇文章打好了基础,让大家对智能体的基本组成与工作方式有…...
C语言五子棋项目
头文件与宏定义 #include <graphics.h> #include <conio.h> graphics.h:EasyX 图形库,提供图形绘制功能(画线、画圆、显示文字等)。 conio.h:提供控制台输入输出函数(这里只是为了兼容性&…...
建筑安全员 A 证与 C 证:差异决定职业方向
在建筑行业的职业发展道路上,安全员 A 证和 C 证就像两条不同的岔路,它们之间的差异,在很大程度上决定了从业者的职业方向。 从证书性质和用途来看,A 证是从业资格证书,更像是一把开启安全管理高层岗位的 “金钥匙”。…...
长连接、短连接与WebSocket的基本知识
目录 前言正文 前言 🤟 找工作,来万码优才:👉 #小程序://万码优才/r6rqmzDaXpYkJZF 爬虫神器,无代码爬取,就来:bright.cn Java基本知识: java框架 零基础从入门到精通的学习路线 附…...
MySQL常见问题解答
一、安装与配置问题 1. 安装失败(权限 / 依赖 / 端口冲突) 权限问题:以管理员身份运行安装程序(Windows)或使用sudo(Linux)。依赖缺失: Windows 需安装 Visual C++ Redistributable(如 2013 版)。Linux 通过包管理器安装依赖(如libaio、perl)。端口冲突: 检查 33…...
Codeforces Round 1019 (Div. 2)(ABCD)
A. Common Multiple 翻译: 给你一个整数数组 a1,a2,...,an。如果存在一个数组 y1,y2,...,ym,且 y 的元素是不同的(换句话说,对于所有 1≤i<j≤m 的数组,yi≠yj),并且对于所有 1≤i≤m 的数组…...
爬虫学习总结
通过前几次课,我们学习了爬虫的相关基础知识。 以下是我对爬虫学习做的一些总结: 一、认识爬虫:开启数据抓取之旅 1.1 什么是网络爬虫 网络爬虫就像是一个不知疲倦的 “数据搬运工”,它能按照预先设定的规则,自动…...
UE5的 Modify Curve 蓝图节点
In Unreal Engine’s Animation Blueprints, the Modify Curve node lets you drive and alter any named Animation Curve on your character at runtime. The Apply Mode setting on that node controls how the “new” value you feed in (via the added curve‐input pin)…...
鸿蒙中的并发线程间通信、线程间通信对象
目录 并发线程间通信1. 线程间通信对象1.1 普通对象1.2 ArrayBuufer对象1.3 SharedArrayBuffer对象1.4 Transferable对象(NativeBinding对象)1.5 Sendable对象简介异步锁ASON解析与生成共享容器共享模块Sendable对象冻结 2 线程间通信场景2.1 使用TaskPo…...
Elasticsearch内核探秘:从Shard分配到网络通信的深度实践指南
#作者:孙德新 文章目录 一、底层模块深入解析之shard allocation1、shard allocation的介绍2、cluster level shard allocation介绍3、disk-based shard allocation介绍4、shard allocation awareness5、shard allocation filtering6、node下线时的shard延迟分配7、…...
Vue3 模板语法
目录 一、插值语法 {{ }} 二、核心指令 三、动态属性绑定 四、事件修饰符 五、条件渲染 vs 列表渲染总结 六、最佳实践 示例 1:插值语法 & 基础绑定 示例 2:条件渲染 示例 3:列表渲染 示例 4:事件处理 示例 5&…...
第1节:Backtrader到底是个啥?能干嘛?
——“框架在手,天下我有;不是吹,Backtrader真香警告!” 🐣 一句话简介 Backtrader 是一个 专门为量化交易打造的 Python 回测框架,说白了,它就是一个量化策略“模拟器控制台评审团”ÿ…...
Java基础第21天-正则表达式
正则表达式是对字符串执行模式匹配的技术 如果想灵活的运用正则表达式,必须了解其中各种元字符的功能,元字符从功能上大致分为: 限定符选择匹配符分组组合和反向引用符特殊字符字符匹配符定位符 转义号\\:在我们使用正则表达式去检索某些特…...
【Pandas】pandas DataFrame mod
Pandas2.2 DataFrame Binary operator functions 方法描述DataFrame.add(other)用于执行 DataFrame 与另一个对象(如 DataFrame、Series 或标量)的逐元素加法操作DataFrame.add(other[, axis, level, fill_value])用于执行 DataFrame 与另一个对象&…...