☰
Oracle DBA 转 OceanBase 第一步:忘掉多进程,理解单进程多线程架构
2026/9/28 9:25:10 网站建设 项目流程

“这次我们来看一个数据库架构认知更新的问题:Oracle DBA 转 OceanBase,首先要做的是把脑子里那套‘多进程’模型暂时放下。没错,Oracle 里的 PMON、SMON、DBWn、LGWR 这些后台进程你背得再熟,到了 OceanBase 里,如果还按这个思路去观察、去排查、去优化,第一步就会卡住。”

这句话不是我夸张。从实际转型经验来看,Oracle DBA 接触 OceanBase 后最强烈的感受往往是:ps -ef 看不到熟悉的进程列表,top 里只有一个 observer 进程,连告警日志的名字都不叫 alert_SID.log。这不是 OceanBase 缺功能,而是它的架构根本就不是“多进程”这条路线,而是一条“单进程、多线程、共享内存”的技术路线。所以,与其死记 OceanBase 的命令,不如先把架构认知切换过来。

这篇文章我会按如下顺序展开:

  • 对比 Oracle 多进程架构和 OceanBase 单进程架构的核心差异;
  • 说明为什么“忘掉多进程”是转型的第一步;
  • 从连接、日志、存储、优化器、高可用、性能排查、工具链几个维度给出对照表;
  • 最后给出一套 Oracle DBA 转 OceanBase 的落地学习路径。

如果你是正在做 Oracle 运维、准备转 OceanBase,或者刚接触 OceanBase 的 DBA,这篇文章可以直接收藏。

1. 核心差异速览

在展开细节之前,先给一张总体对比表。这张表覆盖了 Oracle DBA 最熟悉的几个维度,同一行左右对照,应该能让你快速定位自己的盲区。

对比维度Oracle 传统架构OceanBase 架构
进程模型多进程:PMON、SMON、DBWn、LGWR、CKPT、ARCn单进程 observer,内部多线程
线程模型每个后台任务一个或多个专用进程一个进程内多个线程池,按模块分工
共享内存SGA(共享池、Buffer Cache、Redo Log Buffer 等)observer 进程内的共享内存结构,BSEK/MemTable/Block Cache 等
存储引擎B+ 树为主,行存储LSM-Tree 架构,MemTable + SSTable
高可用方案RAC + Data Guard,依赖多种后台进程协作Paxos 协议多副本同步,日志流驱动
租户概念无原生多租户,一个实例一套数据字典多租户架构,租户内部逻辑隔离,兼容 MySQL 和 Oracle 两种模式
实例与数据库实例 = SGA + 后台进程,数据库 = 数据文件集合observer 进程即数据库服务,实例概念弱化,关注租户和资源单元
日志Redo Log + Archive Log,LGWR 负责写日志Clog(提交日志),由日志线程负责,多副本同步
连接方式sqlplus、listener.ora + tnsnames.oraobclient / mysql 客户端,直连 observer 的 SQL 端口
性能排查AWR、ASH、ADDM、等待事件、v$ viewsGV$OB_SQL_AUDIT、GV$OB_ACTIVE_SESSION_HISTORY、GV$OB_PLAN_CACHE
备份恢复RMAN,全量 + 归档增量物理备份 + 日志归档,支持恢复到指定时间点

这张表并不要求一条一条背,真正要记住的是最后一行上面那一行:架构模型不同,整个运维和优化方法论都要跟着变。当你习惯用 ps -ef 找 DBWn 时,OceanBase 根本不给你这个入口;当你习惯用 alert log 定位错误时,OceanBase 的 observer.log 同样能定位问题,但关键字、日志轮转方式、线程对应关系完全不同。所以,“忘掉多进程”不是情感上的忘,而是操作习惯上的重置。

2. 为什么“忘掉多进程”是转型第一课

2.1 Oracle 多进程模型的思维惯性

从接触 Oracle 的第一天起,DBA 就会被灌输一套后台进程体系:

  • PMON:负责进程监控和恢复;
  • SMON:负责实例恢复和临时空间清理;
  • DBWn:负责把脏块写入数据文件;
  • LGWR:负责把 Redo Log Buffer 写入联机日志;
  • CKPT:负责更新控制文件中的检查点信息;
  • ARCn:负责归档日志复制。

排查问题时,Oracle DBA 的天然反应是:

  1. 先看实例是否存活;
  2. 再看后台进程是否有异常退出(ps -ef | grep ora_);
  3. 然后看 alert log 里是否有 ORA-00600、ORA-01555 之类的错误;
  4. 最后通过 AWR 报告分析等待事件。

这套思路在 Oracle 世界里非常可靠,因为进程边界清晰,每个后台任务都有明确职责,谁出问题查谁。但转到 OceanBase 后,这套排查链路立刻失效。

2.2 OceanBase 单进程多线程模型

OceanBase 的数据库服务由一个名为observer的进程承载。注意,这不是“某个进程”,而是“唯一进程”。在大多数部署形态下,一台机器只启动一个 observer 进程,它就是这台机器上的全部数据库服务。

observer 内部按模块拆成了多个线程组,比如:

  • SQL 执行相关线程;
  • 事务提交相关线程;
  • 日志同步相关线程(Clog);
  • MemTable 转储/合并相关线程;
  • 网络 I/O 线程;
  • 定时任务线程。

你可以理解成:Oracle 用一个“部门”来处理一个任务,OceanBase 用一个“人”跑来跑去切换上下文。线程和进程最大的区别是共享地址空间,所以 observer 的诊断和调优思路就不是“杀进程、查进程、看进程”,而是:

  1. 看 observer 进程是否健康;
  2. 看线程状态和后台任务是否有卡住;
  3. 看日志中是否有 WARN/ERROR 关键字;
  4. 看内部视图(GV$OB_*)中的指标变化。

如果你还拿着“多进程”的思维去看 OceanBase,top 里只有一个 observer 进程,你可能会以为数据库挂了,或者以为它没在干活,实际上它线程忙得不行。这就是为什么转 OceanBase 的第一课就是“忘掉多进程”。

2.3 思维转变的三个核心点

切到 OceanBase 后,DBA 需要完成三个认知更新:

  1. 从“进程”到“线程”的观察方式:不要再去 ps 里找进程,而是用top -H看线程,或者用 OceanBase 的运维命令看内部模块状态。
  2. 从“后台进程”到“后台任务”的定位方式:Oracle 出问题先查进程,OceanBase 出问题先查日志和视图,进程只有一个,不好“单独处理”。
  3. 从“SGA+后台进程”到“内存线程池+租户资源”的资源分配方式:Oracle DBA 调 SGA 大小,OceanBase DBA 调租户内存、CPU 配额和日志盘空间,视角完全不同。

如果你能把这三点想明白,后面学 OceanBase 的一切命令都会顺很多。

3. 架构认知迁移:从 SGA+进程 到 单进程内存与线程

3.1 Oracle 实例组成回顾

Oracle 的实例由两大部分组成:SGA(系统全局区)和一组后台进程。

SGA 里最核心的是:

  • Shared Pool:缓存 SQL、执行计划、数据字典;
  • Buffer Cache:缓存数据块;
  • Redo Log Buffer:缓存 Redo 记录;
  • Large Pool、Java Pool、Streams Pool:按功能划分的内存区域。

后台进程负责把内存和磁盘衔接起来,DBWn 负责刷脏,LGWR 负责写日志。这种设计的好处是职责分离,坏处是进程多了以后上下文切换开销大、调试复杂度高。

3.2 OceanBase 的内存与线程组织

OceanBase 的 observer 同样需要缓存、日志、SQL 处理等能力,但组织方式不同。

内存层面,observer 内部分为多个内存区域:

  • MemTable:新写入数据先进入内存中的 MemTable,达到阈值后转储成 SSTable;
  • Block Cache:类似 Oracle 的 Buffer Cache,缓存磁盘块;
  • Plan Cache:类似 Oracle 的 Shared Pool 中的库缓存,缓存执行计划;
  • 其他系统级内存结构。

线程层面,observer 内部按功能模块划分线程池,比如 SQL 线程、事务线程、Clog 线程、转储线程等。每个线程池处理一类任务,这和 Oracle 的进程分工有相似之处,但边界是“代码逻辑”而不是“操作系统进程”。

所以,你依然可以找到类似 DBWn 的“刷脏”逻辑,只是它不叫 DBWn,而是转储和合并机制;你依然可以找到类似 LGWR 的日志写入逻辑,只是它不叫 LGWR,而是 Clog 写入线程。功能上有对应关系,但实现和运维入口完全不同。

3.3 存储引擎差异:B+ 树 vs LSM-Tree

Oracle 传统存储引擎以 B+ 树为主,数据更新直接修改数据块,脏块由 DBWn 异步写盘。

OceanBase 采用 LSM-Tree 架构:

  • 写入先到 MemTable,顺序写内存;
  • MemTable 达到内存阈值后转储成 SSTable;
  • SSTable 达到数量和版本阈值后会做合并(major merge);
  • 读取时按“MemTable + SSTable”多层结构查找,同时配合 Bloom Filter 加速判断。

这个差异直接影响 DBA 的运维习惯:

  • Oracle 里你担心日志切换频繁、检查点滞后、脏块过多;
  • OceanBase 里你更关心 MemTable 内存阈值、转储频率、合并耗时、SSTable 数量。

如果你把 Oracle 的“脏块太多”思路直接套过来,看到 OceanBase 内存占用高就想去调低缓存,可能会影响合并和写入性能。这也是架构认知迁移的核心价值。

4. 运维操作对照:从 Oracle 命令到 OceanBase 命令

这部分对 Oracle DBA 最实用。我按日常运维高频操作做了一张对照表,方便你从“Oracle 习惯”迁移到“OceanBase 习惯”。

4.1 连接与实例管理

操作OracleOceanBase
启动数据库sqlplus / as sysdba 后 startup通过 observer 进程启动,一般用 obd / systemd 或运维平台拉起
停止数据库shutdown immediate / abort停止 observer 进程,或在集群中通过运维命令 stop
连接实例sqlplus scott/tiger@ORCLobclient -h127.0.0.1 -P2881 -uroot@sys -p -A
查看版本select * from v$version;select version(); 或 show variables like 'version%';
查看实例名select instance_name from v$instance;租户模式,无传统“实例名”概念,关注 cluster/tenant

这里最大的坑是:sqlplus和obclient虽然都是命令行客户端,但内部连接协议不同。Oracle DBA 习惯在 sqlplus 里敲desc、set linesize,这些在 obclient 里不完全适用。obclient 是基于 MySQL 协议扩展的,很多交互方式更像 mysql 客户端。

4.2 日志查看

操作OracleOceanBase
告警日志alert_ .logobserver.log,一般在日志目录下按天轮转
查看当前日志位置查看 diagnostic_dest 参数show variables like 'log_disk_size'; 或根据部署目录查找
错误日志关键字ORA-xxxxxERROR、WARN,以及对应错误码,如 OB-xxxxxxx
集群级日志无rootservice 的日志,多 observer 各自有日志目录

Oracle DBA 习惯是“出问题先 tail alert log”,OceanBase 里同样适用,但要学会从 observer.log 里过滤关键字。日志量比 Oracle 告警日志大很多,建议用 grep、awk 或日志平台做过滤。

4.3 表空间与租户

Oracle 逻辑对象是表空间、段、区、块,DBA 要管理数据文件大小、自动扩展、归档目录。

OceanBase 的核心逻辑对象是租户。租户是一个资源集合,内部再分数据库、表等对象。DBA 要做的是:

  • 创建租户时规划 CPU、内存、日志盘空间;
  • 租户内再创建数据库和表;
  • 调整租户资源用ALTER TENANT语法。

这对 Oracle DBA 是一个比较大的认知变化。Oracle 里“表空间不够”可以加数据文件,OceanBase 里“租户内存不够”要调整租户资源池或者说扩容。你不能用ALTER TABLESPACE ADD DATAFILE的思路去解决。

4.4 备份恢复

Oracle DBA 用 RMAN:

rman target / BACKUP DATABASE PLUS ARCHIVELOG; RESTORE DATABASE; RECOVER DATABASE;

OceanBase 的备份恢复支持物理备份和日志归档,一般在 OCP 或命令行中操作,核心步骤是:

  1. 配置备份目的端(OSS、NFS 或对象存储);
  2. 发起全量备份或增量备份;
  3. 开启日志归档;
  4. 恢复时指定备份集和时间点。

Oracle DBA 最容易忽略的一点是:OceanBase 的备份和恢复需要考虑租户级别,而不是“整个实例”级别。备份任务通常围绕租户展开,恢复时也要指定目标租户。

5. SQL 与开发习惯的迁移

5.1 兼容模式带来的舒适区

OceanBase 提供 MySQL 和 Oracle 两种兼容模式。你在 Oracle 模式下,很多熟悉的语法可以继续用,比如:

  • dual表;
  • ROWNUM或rownum <= N分页;
  • connect by ... start with的递归查询(搜索词里有 connect by start with);
  • trunc(sysdate)日期处理;
  • not exists反连接写法;
  • MERGE INTO合并写法。

所以 Oracle DBA 刚切换到 OceanBase Oracle 模式时,SQL 层面不会太痛苦。这也是很多人愿意转 OceanBase 的原因:语法兼容能省掉大量改造工作。

5.2 分页和递归查询要注意实现差异

虽然语法兼容,但仍需验证执行计划。比如:

  • Oracle 中connect by依赖层次查询,OceanBase Oracle 模式支持该语法,但底层实现和递归深度限制可能不同;
  • Oracle 中ROWNUM可以在排序场景下工作,但 OceanBase 的执行计划优化逻辑不同,复杂分页可能要走执行计划对比;
  • not exists在 Oracle 里经常被优化成反连接,在 OceanBase 里的优化逻辑不一定完全一样,需要看执行计划确认。

建议 Oracle DBA 不要把“Oracle 里这样写没问题”当成“OceanBase 里一定没问题”。迁移前,把核心 SQL 拿出来跑一遍,对比执行计划和耗时,这比任何规则都准。

5.3 存储过程和 PL/SQL 兼容性

Oracle 的存储过程很强大,DBA 日常也会写大量 PL/SQL。OceanBase Oracle 模式支持存储过程、函数、包等,但要注意:

  • PL/SQL 里的某些高级特性不一定完全兼容,比如部分系统包、正则表达式细节、自定义类型行为;
  • 批量任务里如果大量依赖存储过程,迁移前要做一次语法兼容性评估;
  • OceanBase 更鼓励用标准 SQL 和事务逻辑解决问题,而不是把大量业务逻辑塞进存储过程。

如果项目里有上百个存储过程,务必先做一个静态扫描,把不兼容的语法点先列出来。

6. 性能排查与故障处理对照

Oracle DBA 熟悉的性能排查链路是:

  1. 看 load_profile;
  2. 看 top events;
  3. 看 SQL 排序;
  4. 看执行计划;
  5. 下钻等待事件。

OceanBase 路径类似,但视角不同。

6.1 Oracle 维度

  • AWR 报告:一键生成系统报告;
  • ASH:活动会话历史;
  • V$SQL / V$SQLAREA:SQL 性能指标;
  • 等待事件:比如 db file sequential read、log file sync 等。

6.2 OceanBase 维度

  • GV$OB_SQL_AUDIT:查看 SQL 执行审计信息,类似 V$SQL;
  • GV$OB_ACTIVE_SESSION_HISTORY:查看活跃会话历史,类似 ASH;
  • GV$OB_PLAN_CACHE:查看执行计划缓存;
  • GV$OB_SYS_TIME_MODEL:查看系统时间模型;
  • 租户内视图:information_schema和oceanbase库下的大量内部视图。

排查慢 SQL 时,一个常见做法是查询 SQL_AUDIT:

SELECT tenant_id, svr_ip, svr_port, sql_id, elapsed_time, execute_time, queue_time, wait_time_ms, query_sql FROM GV$OB_SQL_AUDIT WHERE elapsed_time > 1000000 ORDER BY elapsed_time DESC LIMIT 50;

注意:如果你从 Oracle 来,这里不能写ORA-那套,要用 MySQL/OceanBase 的语法习惯。比如LIMIT 50而不是ROWNUM <= 50,或者你用了 Oracle 模式,但也要确认该视图的字段名是 OceanBase 定义的,不是 Oracle 的 V$SQL。

6.3 等待事件思路转变

Oracle 的等待事件非常成熟,dba 可以通过 enq、buffer busy waits、log file sync 等很快定位问题。

OceanBase 里也有类似概念,比如观察 SQL audit 中的 queue_time(排队等待时间)、wait_time_ms(其他等待时间)等字段。但 OceanBase 集群模式下,还要关注网络、副本同步、Clog 写入等分布式相关的指标。

也就是说,排查范围从“单机内部资源竞争”扩展到了“节点间通信和日志同步”,这也是 Oracle DBA 容易忽略的地方。

7. 环境准备与学习工具

如果你打算上手实践,不一定要先搭一套复杂集群。可以从单机学习环境开始。下面给出一套常见的学习准备清单。

7.1 硬件与操作系统

  • 普通 x86 服务器或一台配置还行的 PC;
  • 内存建议至少 8G 到 16G,OceanBase 对内存管理比较重,太小容易在合并时内存吃紧;
  • 磁盘至少预留 50G 以上,日志盘、数据盘最好分开;
  • 操作系统推荐 CentOS 7+、Ubuntu 20.04+ 或国产主流 Linux,具体以官方支持列表为准。

7.2 软件依赖

  • 建议装好 Java 环境用于 OBD、OCP 等工具(部分组件依赖 JDK);
  • 安装 OBClient 或 MySQL 客户端用于连接;
  • 可选安装 ODP(OceanBase Database Proxy,Sharding 路由和协议代理)用于统一访问入口;
  • 安装 OBD 作为本地集群管理工具,可以一键部署、启动、查看状态。

7.3 使用 OBD 快速启动一个最小集群

OBD 是 OceanBase 配套的部署工具,适合本地学习。常见的命令模板如下(实际命令以你安装的 OBD 版本为准):

# 初始化 OBD 环境(示例,具体命令看文档) obd cluster create mytest -c /path/to/your/config.yaml # 启动集群 obd cluster start mytest # 查看集群状态 obd cluster display mytest

集群配置文件需要指定 observer 的 IP、数据目录、日志目录、内存大小等。这里不贴具体完整配置,因为版本不同配置差异很大,建议从官方示例开始改。

7.4 通过 obclient 连接

# 连接 sys 租户(示例) obclient -h127.0.0.1 -P2881 -uroot@sys -p -A # 创建普通租户后连接业务租户 obclient -h127.0.0.1 -P2881 -uroot@test_tenant -p -A

Oracle DBA 看到这个连接方式可能会想起 MySQL:-u用户名@租户名、-P端口、-A。确实,OceanBase Shell 命令更接近 MySQL 生态,而不是 SQL*Plus。

7.5 常用开发工具

热词里有 Datagrip 和 IDEA 连接 OceanBase 的搜索,说明很多开发者和 DBA 已经把它当成日常开发工具。使用方式:

  • Datagrip:新建数据源,选择 MySQL 或 OceanBase 驱动,填主机、端口、用户名、密码,即可连接;
  • IDEA Database 工具:同理,通过 MySQL 驱动连接;
  • 命令行:obclient;
  • 数据迁移工具:OMS 或 DataX,用于把 Oracle/MySQL 数据迁移到 OceanBase。

Oracle DBA 不用重新学太多客户端工具,把 Datagrip 配好就能开始玩。

8. 常见问题与排查方法

以下是我认为 Oracle DBA 转 OceanBase 时最容易遇到的几类问题。

问题现象可能原因排查方式解决方案
连接不上数据库端口错误、rs 状态异常、租户不存在检查监听端口、查看 observer 日志、查看集群状态确认地址端口,检查集群状态,创建或选择正确租户
只有 observer 进程,数据库看起来像“挂”了架构误解,单进程多线程模型用 obd cluster display 看集群状态,用 obclient 尝试连接执行 SQL不要用 ps 判断数据库存活性,用状态命令
查看视图时字段名和 Oracle 不同兼容模式不同、视图层级不同确认当前租户模式,查对应 OceanBase 内部视图定义多使用 GV$OB_ 开头的视图,暂时忘记 V$ 前缀
SQL 在 Oracle 快,在 OceanBase 慢统计信息不新、执行计划选择不同、SQL 写法不匹配查看 GV$OB_SQL_AUDIT,抓执行计划更新统计信息,改写 SQL,加索引,必要时绑定执行计划
存储过程迁移报错PL/SQL 兼容性差异逐条编译,定位不兼容语法做兼容性改造,或该逻辑改用标准 SQL
合并(major merge)期间性能波动LSM-Tree 合并特性看合并时间窗口、锁范围设置合并窗口,错峰执行,调大内存阈值
备份恢复任务失败备份目的端权限不足、租户资源不足看备份任务日志检查归档和备份目的端配置,调整备份策略
日志量太大,不知道从哪看observer.log 日志量大按关键字提取,按时间过滤数据库使用日志采集和分析平台,做日志轮转

这张表不用背,遇到问题再回来看。核心思路就是:从进程视角切到线程/任务视角,从单机资源视角切到集群多副本视角,从 Oracle 私有视图切到 OceanBase 系统视图。

9. Oracle DBA 转 OceanBase 的最佳实践

9.1 先做认知切换,再学命令

不要一上来就背 OceanBase 语法。先把“多进程 vs 单进程多线程”的架构差异吃透,知道日志在哪、视图在哪、租户怎么划分,再上手敲命令会快很多。

9.2 用最小环境养成操作手感

本地装一个单机 OceanBase,创建两三个租户,分别用 MySQL 模式和 Oracle 模式连接,跑一遍建表、插入、查询、备份恢复、性能排查。这个流程走完,你对 OceanBase 的第一层陌生感就去掉了。

9.3 从熟悉的 Oracle SQL 开始迁移

把你手头最常用的 Oracle SQL 整理一波,放到 OceanBase Oracle 模式里跑一遍:

  • 分页 SQL;
  • connect by 递归;
  • trunc(sysdate) 日期条件;
  • not exists 反连接;
  • merge into 合并;

看看哪些可以直接跑,哪些要改。这个对比自己做过一遍,比看十篇兼容性文档都实在。

9.4 善用 OCP 和系统视图

如果条件允许,用 OCP(OceanBase 管控平台)看集群拓扑、租户资源、合并状态、慢 SQL,效率很高。

如果只用命令行,重点掌握这几个视图:

  • GV$OB_SQL_AUDIT:SQL 审计和慢 SQL 排查;
  • GV$OB_SERVER_SCHEMA_INFO:查看 schema 信息;
  • GV$OB_MEMSTORE:查看租户内存使用;
  • GV$OB_SSTABLE:查看 SSTable 数量;
  • GV$OB_UNITS:查看资源单元分布。

9.5 迁移项目先做兼容性评估

如果是从真实 Oracle 库迁到 OceanBase,不要直接搬存储过程、包、定时任务。先做一轮兼容性检查,再制定分批迁移计划。数据迁移建议用官方工具或成熟的数据同步工具,迁移后要在测试环境完整跑一遍核心业务链路。

9.6 安全和合规边界

数据库掌握着业务核心数据,无论做测试还是生产迁移,都要注意:

  • 在授权环境内操作,不随意把生产数据拷贝到个人测试环境;
  • 涉及个人信息和敏感数据时,先脱敏再测试;
  • 备份恢复要验证可恢复性,不要只做备份不演练;
  • 对外分享案例和问题时,隐藏真实库名、账号、业务数据细节。

技术转型的前提是守住数据和系统安全底线,这一点比学任何架构都重要。

10. 总结与下一步

Oracle DBA 转 OceanBase,本质不是换一套命令,而是换一套架构思维。Oracle 用多进程把任务拆给不同后台进程,OceanBase 用单进程多线程统一调度;Oracle 用 B+ 树加 Redo 做数据持久化,OceanBase 用 LSM-Tree 加 Clog 做存储和同步;Oracle 的排查链路从 V$ 和 AWR 开始,OceanBase 的排查链路从 GV$OB_ 系列视图和 observer 日志开始。

如果你正在转型,照这个顺序推进:

  1. 先看架构文档,理解 observer 单进程模型;
  2. 部署一个单机环境,亲手创建租户,连接 obclient;
  3. 把自己常用的 Oracle SQL 拿出来跑一遍,做兼容性对比;
  4. 练习用 GV$OB_SQL_AUDIT 查慢 SQL;
  5. 模拟一次备份恢复,验证你的恢复步骤;
  6. 再把一个真实小业务迁移到 OceanBase 测试环境跑全链路。

不要一上来就追求“所有命令都会”,先恢复“遇到问题知道去哪找答案”的能力。OceanBase 的文档、系统视图、日志体系都已经很完善,你真正需要更新的是那套已经被 Oracle 训练了多年的排查习惯。

这篇文章就写到这里。建议先别急着看很多 OceanBase 命令,先跑一个单机环境,亲手操作一遍,你会比死记文档快很多。等你有了一定手感,再回头看这篇文章的对照表,会发现当初纠结的“多进程问题”,其实只是架构切换的一个起点。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询