PostgreSQL的逻辑复制spill溢出案例和启停库逻辑

深入PostgreSQL逻辑复制内核:从WAL日志到pg_replslot,一次完整的数据流转剖析 本文深入解析PostgreSQL逻辑复制的核心机制,从WAL日志解析到复制槽管理,详细剖析了数据从写入到同步的全流程。重点介绍了输出插件(Output Plugin)的作用、复制槽(pg_replslot)的工作原理以及发布订阅模式的应用实践,帮助开发者掌握PostgreSQL高效数据同步的关键技术。 阅读详情

本文整理自 IvorySQL 2025 生态大会暨 PostgreSQL 高峰论坛的演讲分享,演讲嘉宾:刘智龙。

引言

在数据库运维过程中,停库与起库是绕不开的核心环节。然而,在复杂的生产环境中,这些操作并非总能顺利完成。以下结合实际案例,对 PostgreSQL 在停库和起库过程中可能遇到的典型问题进行技术剖析。

WALsender、archiver 如何优雅阻止停库

WALsender 阻止停库

在逻辑复制场景下,WALsender 进程会阻止数据库停库,此时仅保留 checkpointer 和 WALsender 等关键进程,控制文件状态显示为 in production,表明数据库仍处于运行中。

WALsender 阻止停库时,数据库的停库状态:

图片1.jpg

此时的控制文件:

图片2.jpg

在停库过程中,WALsender 进程卡在WalSndWaitStopping函数,导致 checkpointer 也被阻塞在该函数中,数据库因此停在“半停库”状态。若此时强行执行 kill-9,将造成数据库以非一致性方式停库。

图片3.jpg

怎么优雅的停库

在逻辑复制场景下,WALsender 进程可能阻止数据库停库。常见处理方案有两种:

方案一:关闭下游进程

图片4.jpg

  1. 执行 ALTER SUBSCRIPTION sub_lzl DISABLE;—需提前找到所有关联的下游 PG 库。
  2. 停止同步工具—同步工具可能无法及时维护。
方案二:发送 SIGTERM 给 WALsender

可直接向 WALsender 进程发送 SIGTERM 信号,使其正常退出。

running 状态:

select pg_terminate_backend($WALsender_pid)

「pg_terminate_backend() 本质上就是在发送 SIGTERM 给子进程」

停一半的状态:

kill -SIGTERM $WALsender_pid

同 kill -15 $WALsender_pid

同 kill $WALsender_pid

archiver 阻止停库

除了 WALsender 外,常见的还有 archiver 进程也可能阻止停库。reaper checkpointer 会发送 SIGUSR2 给 archiver 让其最后一次归档并退出:

图片5.jpg

PM 进程的退出依赖于归档进程:

图片6.jpg

在模拟归档场景时可以看到,停库状态与 WALsender 阻止停库的情况并不相同:此时存在 archiver 进程,但 checkpointer 进程并未出现,表现出不同的停库特征:

图片7.jpg

可能的原因:归档延迟较多,归档盘写入较慢。

不可能的原因:归档失败,NUM_ARCHIVE_RETRIES限制。

此时暴力停库是否有问题?

当只有 archiver 进程阻止停库时,checkpointer已完成停止操作,shutdown checkpoint 条目已写入 WAL,controldata 状态为 shut down,表明数据库已实现一致性停库。此时,即使 archiver 仍在运行,执行 kill-9 也不会影响数据库本身的完整性。

怎么优雅的停库

在数据库停库时,可以通过以下操作实现更安全可控的关闭流程:

  1. 锁定逻辑同步用户。
  2. 执行pg_terminate_backend($logical_WALsender);。
  3. 临时关闭归档(可选,将 archive_command 置空)。
  4. 手动执行 checkpoint。
  5. 执行 stop fast。
  6. 如果仅有 archiver 阻止停库,可以考虑暴力停库。

PostgreSQL 停库逻辑

停库的信号机制

PostgreSQL 的停库依赖操作系统的信号机制。在 Linux 中,进程间可以通过信号进行通信,系统也定义了多种信号来控制进程的行为。

PG 常用的信号包括:

图片8.jpg

pg_ctl 通过信号管理停库方式

图片9.jpg

pg_ctl 通过发送不同的信号来控制PostgreSQL的停库方式。其中,kill -9(SIGKILL)与 pg_ctl stop -m immediate是不同的:

  • pg_ctl 不支持直接发送 SIGKILL。虽然可以手动向 PM 进程发送 SIGKILL ,但这种方式不推荐,因为 PM 在收到 SIGKILL 时不会对子进程、共享内存或信号做任何清理工作。
  • SIGQUIT 停库更安全。当 PM 收到 SIGQUIT 时,会触发兜底逻辑,对子进程发送 SIGKILL,并做必要清理,从而基本保证数据库能完整停下来。
PM 注册的信号

接收到该信号后,会调用两个关键函数:pmdie 和 reaper,分别用于处理关闭逻辑与子进程回收。

图片10.jpg

子进程注册的信号(以 checkpointer 为例)

每个子进程都会注册信号,整体逻辑类似,仅根据职责略有差异。以 checkpointer 为例,它不屏蔽 SIGTERM,实际停止时使用 SIGUSR2 发出请求后再退出。

图片11.jpg

reaper 函数

reaper 是进程回收函数,子进程退出后会发送 pm SIGCHLD 信号,pm 通过 reaper 函数清理进程。 如 backend、startup、checkpointer 等进程都有自己的清理流程。

以 checkpointer 进程退出,reaper 回收为例:退出时会先判断归档进程是否存在,并向归档进程和 WALsender 发送 SIGUSR2,最后调用 PostmasterStateMachine() 完成状态转换。

图片12.jpg

pmdie 函数

pmdie 函数用于处理不同的 postmaster signals,包括子进程给 pm 发送的 SIGCHILD 和 pg_ctl 发送的停库信号。pm 信号处理主体逻辑是根据 signal 转换 pmState 状态机状态,并进入状态机 PostmasterStateMachine 处理。

图片13.jpg

PostmasterStateMachine 函数

PostmasterStateMachine 函数是处理 pm 退出的主体函数,主要是处理 pm 在不同停库状态下做什么。比如一般进程退出、WALsender、归档进程退出、异常退出等等状态。

正常停库时,除 checkpointer、archiver、stats 和 syslogger 外的子进程会收到 SIGTERM 并退出,然后向 checkpointer 发送 SIGUSR2 ,进入 SHUTDOWN 状态。

SHUTDOWN_2 状态在 checkpointer 退出时设置,等待 WALsender 和 archiver 完全退出,保证数据库一致性停库。

图片14.jpg

checkpointer 和 WALsender 的退出

checkpointer 进程在 pm 退出时会被唤醒做最后一次 shutdown checkpoint 等工作,但是创建 shutdown checkpoint 需要等 WALsender 全部进入退出状态。

图片15.jpg

WalSndWaitStopping会等待 WALsender 退出,如果不退出是死循环等待。

图片16.jpg

停库逻辑

图片17.jpg

Spill 阻止起库和加速起库

Spill 阻止起库

现象:数据库启动缓慢,startup 进程在读取 Spill 文件,文件名在变化。查看 Spill 文件也很慢,ls-l 最后跑出来 1000 万个文件 Spill 文件。

  • 数据库虽然在启动,但整个过程非常耗时。
  • 1000 万个 Spill 文件严重影响 Linux 系统性能,任何操作都很费劲。

问题关注点:

  1. 1000 万 Spill 文件是如何产生的?
  2. 当数据库起库受阻时,应采取什么措施?

Spill 怎么来的,怎么定位到 WAL 文件

Spill 文件主要由 WALsender 在事务溢出时生成。当定位到 Spill 文件后,可以写入 ReorderBuffer 存放在 replslot 目录下。

这些文件名中包含事务的相关信息,例如 xid。通过读取文件名中的 xid,就能追溯到对应事务的来源。

图片18.jpg

在定位某个 Spill 文件对应的 WAL 位置时,如果单纯依赖 xid 去过滤,面对上千万个事务显然效率极低。更可行的办法是结合 LSN 信息来定位。

图片19.jpg

Spill 怎么来的

Spill 文件生成规则如下:

  • 同一个事务 id,如果跨 WAL 就会产生多个 Spill。如:一个不含子事务的大事务跨越 3 个 WAL,就会对应 3 个 Spill 文件。
  • 不同的事务 id 对应不同的 Spill。如:1000w 个子事务对应 1000w 个 Spill。

例如:Spill 文件名结构xid-407989064-lsn-42D1E-20000000.Spill。

图片20.jpg

Spill 溢出逻辑的版本差异:

  • PG12 及以前是固定 4096 条 changes 后触发 Spill。
  • PG13 新增logical_decoding_work_mem参数,可通过调整内存大小来降低 Spill 发生概率。
  • PG14 及以后支持流式复制(Streaming),但仍需满足特定条件才能触发,因此并非完全避免 Spill。
  • PG17 新增debug_logical_replication_streaming参数以强制触发流式传输。

如何加速起库

库起不来怎么办?

数据库启动时的核心进程是 startup 进程,无论如何都会在起库时拉起。

当遇到非一致性停库时,startup 需要执行更多逻辑,其一便是 sync data 目录:根据控制文件状态触发对整个 data 目录的持久化操作,以确保在数据库重新运行前,所有数据文件处于一致状态。

图片21.jpg

因为控制文件状态显示为非正常停库,系统会进入 if 分支并调用 SyncDataDirectory() 执行 fsync 持久化操作,以确保在数据库重新运行前,data 目录已被完整持久化。

startup 除了执行 fsync data 外,还会处理与 Spill 相关的逻辑,其中关键一步是启动 ReorderBuffer。由于 Spill 文件对应的事务尚未完成,startup 会清理所有 replslot 目录下的 Spill 文件,确保复制槽状态恢复正常。

图片22.jpg

起库逻辑小结:
  • PostgreSQL 在启动时会拉起一个专门的辅助进程 startup,不同于常见的子进程(如 WALwriter、checkpointer 等),它是起库过程中必定存在的核心进程,负责多项关键操作。
  • StartupXLOG 在起库时必然会被调用,无论数据库是否一致性停库。
  • 只有非正常停库状态下,才会触发 SyncDataDirectory。
  • SyncDataDirectory 会 fsync 持久化所有 data 文件,并查看所有 data 文件的 stat 信息。
  • fsync 用于保证库启动前数据文件一致性,stat 则用于验证文件的完整性和可读性(在 startup 进程启动前只验证过 datadir 目录可读性)。
  • 无论停库状态如何,StartupReorderBuffer 都会被调用,用于清理所有复制槽中的 Spill 文件。
思考如何去加速起库?

1000w 个 Spill 删除起来肯定是很慢的,直接 mv 目录的话就非常快。但是直接 mv 需要注意 mv 后的名称和 state 文件,以及需要知道 mv 到底跳过了哪一个源码步骤。

由于是异常停库,startup 进程会执行SyncDataDirectoryfsync和 stat 所有 data 文件,这一点是比较难绕过的。SyncDataDirectory 做完以后,才开始处理复制槽。处理复制槽时会调用StartupReorderBuffer()->ReorderBufferCleanupSerializedTXNs全量清理 Spill 文件。

在进入清理前,会调用ReplicationSlotValidateName校验复制槽名称的有效性,我们可以在ReplicationSlotValidateName上做文章,以骗过 startup 进程跳过ReorderBufferCleanupSerializedTXNs的过程。

当 Spill 文件数量达到千万级时,直接逐个删除会极其缓慢,而通过 mv 整个目录的方式则非常迅速。但此操作需注意:

  • 目录改名后需保持与 state 文件 的一致性。
  • 必须清楚 mv 跳过了源码中的哪些步骤,避免后续逻辑异常。

由于是异常停库,startup 进程会强制执行 SyncDataDirectory,对所有 data 文件进行 fsync 和 stat,这一环节无法绕过。SyncDataDirectory完成后,startup 才会处理复制槽,并调用:StartupReorderBuffer()->ReorderBufferCleanupSerializedTXNs
以全量清理 Spill 文件。

在进入清理流程前,会先调用ReplicationSlotValidateName校验复制槽名称的有效性。

因此,可以在该校验逻辑上“做文章”,让 startup 进程跳过ReorderBufferCleanupSerializedTXNs,从而避免耗时的 Spill 文件全量清理。

复制槽校验与清理
ReplicationSlotValidateName(const char *name, int elevel)
{...
		if (!((*cp >= 'a' && *cp <= 'z')
			  || (*cp >= '0' && *cp <= '9')
			  || (*cp == '_')))
...
}
  • 有效 slot name 只包含 a-z;0-9;_。rename 时建议加个点.。
  • 建议slotname.bak,slotname.20241215等。
  • 不建议slotnamebackup,slotname20241215,slotname_bak等等。
  • 不建议.tmp 后缀,slotname 有.tmp 后缀有特殊含义。

最后 rename 后,要创建目录和拷贝 state,不然启动的 slot 会表现的很反常(比如重复的 slotname、自动生产一个 slotname、删不到 slot、下游起不来链路等等)。

cd pg_replslot

mv slotname slotname.bak

mkdir slotname

cp slotname.bak/state slotname/

伪造 2000w 个 Spill 测试起库时间:

图片23.jpg

总结

数据库的停库与起库是运维中的关键环节,也是最容易遇到挑战的地方。通过本次分享,我们看到,无论是 WALsender、archiver 的阻止,还是大量 Spill 文件带来的起库延迟,都有对应的分析与解决思路。理解 PostgreSQL 的信号机制、启动流程以及复制槽管理,不仅能够帮助我们优雅停库、快速起库,也能在异常状态下保持数据一致性和系统稳定性。在实际运维中,将理论与操作结合,才能真正做到既安全又高效。

AWS DMS生产级数据库迁移实战:全量+增量、CDC与切流避坑指南 数据库迁移是云原生架构演进的核心环节,其本质是在保障业务连续性的前提下实现数据一致性同步。AWS DMS作为托管式数据迁移服务,通过全量加载(Full Load)与变更数据捕获(CDC)双阶段协同,构建低延迟、高可观测的分布式数据管道。其技术价值在于无需修改应用代码即可支撑跨引擎、跨版本、跨云的异构迁移,广泛应用于上云迁移、灾备建设及实时数仓同步等场景。然而真实落地中,复制实例选型失当、源库CDC权限缺失、表映射规则误配等细节极易引发延迟飙升、数据截断或切流失败。本文聚焦DMS在Oracle/MySQL/S 阅读详情

相关推荐

H2O AutoML:生产级自动化机器学习流水线实战指南

自动化机器学习(AutoML)是将数据科学流程标准化、工程化的核心技术,其本质是通过智能超参搜索、模型集成与内存优化架构,在时间约束下稳定产出高泛化能力模型。H2O AutoML以分布式内存计算、多语言统一内核和POJO/MOJO生产部署能力为支撑,突破传统Python库的单机瓶颈与跨语言开销,真正实现从探索式建模到金融级上线的一体化闭环。它适用于需快速交付可解释模型的业务分析师、构建企业AI中台的平台架构师,以及希望聚焦‘数据—特征—模型—价值’主干逻辑的学习者。本文深入解析其工业级设计原理与落地避坑实践

weixin_30470643的博客 524

PG起库逻辑和spill导致起库慢问题分析

spill文件过多和起库慢分析

liuzhilong的博客 1046

CTE实战指南:提升SQL可读性与执行计划优化的分层技巧

公用表表达式(CTE)是一种声明式SQL逻辑分层机制,其核心原理在于将复杂查询解耦为命名、可复用的中间结果集,而非物理存储或缓存。它通过WITH子句实现语法显式化,在保持标准SQL兼容性的同时,显著改善SQL可读性、调试效率与执行计划可控性。相比子查询,CTE支持递归建模、窗口函数协同与多层流水线编排;相比临时表,它无需额外权限与I/O开销,适合业务分析师、后端开发及数据工程师高频使用。典型应用场景包括组织架构树遍历、风控多条件分步过滤、TOP-N占比计算等。本文聚焦CTE在真实生产环境中的性能表现、执行计

weixin_30628801的博客 380

月满华诞 · 码向未来:代码寄明月,指尖庆华诞(关于PG启库逻辑和spill导致起库慢问题分析)

文章摘要: 《月满华诞·码向未来》以中秋国庆双节为背景,探讨科技与文化的融合。同时,文章深入分析了PostgreSQL启库缓慢问题,指出复制槽溢出导致大量spill文件是主因。通过测试验证,提出了加速启库方案:通过重命名slot目录跳过文件清理流程,可将启库时间从32分钟缩短至4分钟。此外,文章还对比了不同版本PG的spill文件处理逻辑差异,为数据库运维提供了实用优化建议。

Auspicious航的博客 1017

DataGrip 2026.1深度解析:AI Agent与查询契约重构

SQL开发工具正从语法辅助迈向意图理解与语义治理。其核心原理在于融合数据库元数据、历史查询行为与实时会话上下文,构建本地化推理能力;技术价值体现为降低SQL编写认知负荷、提升执行计划可解释性、实现查询逻辑的版本化管控;典型应用场景覆盖DBA性能调优、后端开发者高频JOIN/WHERE构建、数据团队报表协作与CI/CD集成;本文基于DataGrip 2026.1实测,深入拆解AI Agent三层上下文机制与Query File结构化契约设计,揭示IDE如何将数据库交互升维为数据工程实践。

weixin_33896726的博客 311

零成本搭建MLflow模型追踪系统:Databricks+S3实战指南

模型追踪是MLOps的基础能力,其核心在于统一记录实验参数、指标、模型与数据版本,保障AI研发的可复现性与协作效率。基于开源MLflow协议,结合Databricks Community Edition提供的免费Spark计算环境和AWS S3高可靠对象存储,可构建完全自主可控的轻量级追踪服务。该方案规避厂商锁定,支持SQLite快速启动与PostgreSQL平滑升级,天然适配模型注册、生产部署及跨团队审计等关键场景。尤其适合预算有限但需建立规范流程的初创团队与个人研究者——无需付费云服务,今天即可完成端到

diegouyi3472的博客 295

PostgreSQL数据库之什么是逻辑复制

逻辑复制不同于流复制(物理复制)基于实例级别主从库物理结构上就是一样,逻辑复制可以基于表级别选择性复制。逻辑复制(Logical Replication)在官方文档里专指”复制-订阅“模式,其实有许多工具可以基于逻辑解析做异构数据库间数据同步。

Auspicious航的博客 904

Databricks SQL实战指南:构建可扩展的湖仓分析工作流

SQL作为数据处理的基础语言,其在现代数据平台中的角色已从简单查询演进为可编排、可观测、可治理的数据操作单元。理解Scalable SQL Workloads的核心,需把握查询引擎优化、元数据统一管控与弹性资源调度三者协同原理;技术价值体现在TB到PB级数据平滑扩展、百人并发下延迟稳定、权限与血缘全程可溯;典型应用场景覆盖零售用户行为分析、金融风控特征计算及IoT时序诊断等高要求工程实践;本文聚焦Databricks SQL这一Lakehouse原生SQL服务,深入解析Photon加速引擎、Serverle

weixin_30423977的博客 352

Spark 3.5.0 Shell 实战:3种数据源读取与5个核心算子性能对比

本文详细对比了Spark 3.5.0 Shell中三种数据源(本地文件系统、HDFS、JDBC)的读取性能,并分析了五种核心算子(Map、Filter、reduceByKey、groupBy、Join)的效率差异。通过实战测试数据与优化建议,帮助开发者提升Spark Shell交互式数据分析的效率,特别适合使用Scala和PySpark的数据工程师。

weixin_34335458的博客 294

Redshift性能优化实战:DISTSTYLE、SORTKEY与WLM调优指南

Amazon Redshift并非传统关系型数据库,而是一款专为大规模并行分析设计的列式数据仓库引擎。其核心性能逻辑围绕数据分布(DISTSTYLE)、物理排序(SORTKEY)和工作负载管理(WLM)三大机制展开——数据分布不均直接导致计算节点空转,缺失合理SORTKEY将触发全表扫描,WLM配置失当则引发查询排队与资源争抢。这些底层原理决定了Redshift在TB级以上数据场景中具备显著优势,但在小规模或误配环境下反而劣于PostgreSQL。本文聚焦真实生产环境中的硬核调优实践,涵盖RA3节点选型、C

weixin_34253126的博客 413

Spark分布式计算实战:从物理限制到生产调优

分布式计算是突破单机算力瓶颈(内存墙、CPU墙、IO墙)的工程必然选择,其核心在于任务分片、容错调度与结果聚合。Apache Spark凭借内存优先架构、DAG执行引擎和DataFrame统一API,在迭代计算、交互分析与批流一体场景中展现出显著技术优势。它并非万能工具,而是在数据规模超单机内存3倍、需多轮处理或团队具备基础运维能力时的高性价比方案。本文结合真实生产案例,解析Spark如何应对数据倾斜、Shuffle开销与资源错配等典型问题,并提供本地Standalone环境搭建、Web UI诊断及边界决策

893

Snowflake QUALIFY:窗口函数后置过滤的高效实践

QUALIFY 是 Snowflake 针对窗口函数结果进行后置过滤的核心语法,填补了传统 SQL 执行链中‘窗口结果筛选’的空白。其原理基于标准 SQL 执行顺序,在 SELECT 计算窗口值之后、ORDER BY 之前介入,天然支持 ROW_NUMBER、RANK、AVG 等窗口函数输出的直接布尔判断。相比 CTE 或子查询,QUALIFY 显著提升可读性、降低维护成本,并在多数场景下减少物化开销、优化查询性能。它广泛应用于 Top-N 分析、去重留一、组内对比(如高于均值)、滚动计算与分位数筛选等典型

weixin_30256901的博客 339

多维聚合数据操作:从GROUP BY到GROUPING SETS的工程实践

多维聚合是OLAP分析的核心能力,本质是将业务维度组合(如部门×产品×时间)映射为高效执行的计算指令。其技术原理远超SQL语法层面,涉及集合代数建模、内存结构优化与NULL语义治理。关键价值在于平衡实时性与性能——通过ROLLUP表达层次关系、CUBE覆盖正交组合、GROUPING SETS实现精准控制,避免维度爆炸与结果歧义。典型应用场景包括BI报表下钻、用户行为归因、财务多维分析及IoT时序切片。本文聚焦真实生产环境中的空值处理、稀疏性应对与跨引擎适配,结合ClickHouse、Doris等主流引擎的执

weixin_30363509的博客 519

学习大数据开发

本文介绍了Hadoop的两大核心组件HDFS和YARN。HDFS采用主从架构,包含NameNode(主节点,存储元数据)、DataNode(从节点,存储实际数据块)以及高可用环境下的StandbyNameNode。重点解析了HDFS HA架构的工作机制,包括JournalNode集群、ZKFC故障转移流程等。YARN作为资源调度框架,包含ResourceManager、NodeManager、ApplicationMaster和Container四大组件,实现了资源管理与任务调度的解耦。文章通过架构图和工作

qq_41151774的博客 396

超越Pandas:现代数据工程的高性能工具链实战

在数据规模跃升与生产SLA收紧的双重压力下,传统Pandas单机处理模式正面临内存溢出、协作低效与可观测性缺失等系统性瓶颈。其底层命令式、内存驻留、强状态的编程范式,已难以适配分布式、磁盘优先、声明式与无状态的现代数据工程需求。Polars以LazyFrame和流式计算重构大表处理效率,DuckDB凭借零拷贝集成与SQL原生能力实现轻量ETL编排,二者协同突破性能与可维护性边界;结合Great Expectations的数据质量契约化与dbt Core的逻辑版本化,共同构建起可验证、可追踪、可灰度的端到端数

weixin_30252709的博客 309

数据采集系统设计实战:从架构选型到高可用部署

数据采集是构建数据驱动型业务的基石,它负责将分散、异构的原始数据转化为可供分析的结构化数据流。其核心原理在于通过Agent或Serverless等模式,从日志、数据库、API等多类数据源中实时或批量抽取数据,并借助消息队列进行缓冲与传输,确保数据的可靠性与顺序性。这一过程的技术价值在于为后续的数据存储、分析与应用提供了高质量、稳定的“数据原料”,是数据仓库、实时计算和业务智能系统得以高效运转的前提。在应用场景上,无论是用户行为分析、系统监控告警,还是物联网时序数据处理,都离不开一个健壮的采集系统。本文将聚焦

weixin_30402343的博客 341

《Hive性能调优实战》核心内容详细解读

调优一般性过程框架第一步:性能监控与问题识别├── 收集性能指标(执行时间、资源使用、数据量)├── 识别性能瓶颈(YARN日志、EXPLAIN分析)└── 确定优化目标(延迟、吞吐量、资源)第二步:分析与方案制定├── 定位瓶颈原因(SQL问题?配置问题?架构问题?├── 评估可能方案(SQL改写、参数调整、存储优化)└── 选择实施方案(考虑投入产出比)第三步:实施与验证├── 执行优化措施├── 验证性能改善└── 监控稳定性核心目的:系统梳理Hive知识体系,形成完整的知识框架。

hopsky的博客 281

【信息科学与工程学】计算机科学与自动化 第二百三十三篇 凤凰架构01

编号类型领域系统软件/硬件或系统集成方案及系统架构模块子模块函数名称/算法名称算法的数学分析及计算机体系架构及数据结构与算法详细设计及参数列表及数值范围设计关联知识1共识算法分布式基石状态机复制架构:Proposer/Acceptor/Learner 多节点角色模型,基于操作转移(Operation Transfer)分布式共识PaxosPaxos 协议(Prepare/Promise/Accept/Accepted 两阶段)数学基础:多数派(Quorum)投票,基于鸽巢原理保证 W+R>N 时读写集合必有

weixin_49199313的博客 267
上一篇: 聚焦六大功能:PostgreSQL 18 新特性深度解析
下一篇: PostgreSQL 18 异步 I/O(AIO)调优指南
IvorySQL
博客等级 码龄5年 745粉丝 566原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值