<rss xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title>数据库 - tag - 沐木</title><link>https://oldletter.cn/tags/%E6%95%B0%E6%8D%AE%E5%BA%93/</link><description>数据库 - tag - 沐木</description><generator>Hugo -- gohugo.io</generator><language>zh-cn</language><lastBuildDate>Sat, 11 Jul 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://oldletter.cn/tags/%E6%95%B0%E6%8D%AE%E5%BA%93/" rel="self" type="application/rss+xml"/><item><title>信创实战：信创数据库全景图</title><link>https://oldletter.cn/posts/xinchuang-04-database-guide/</link><pubDate>Sun, 15 Jun 2025 00:00:00 +0000</pubDate><author>mumu</author><guid>https://oldletter.cn/posts/xinchuang-04-database-guide/</guid><description><![CDATA[<blockquote>
<p>信创进入深水区，数据库选型不再是&quot;能不能用&quot;的问题，而是&quot;怎么选、选了怎么落地&quot;的问题。本文从技术路线出发，梳理主流信创数据库的产品矩阵，给出面向架构师的选型决策框架。</p></blockquote>
<hr>
<h2 id="一引言信创进入深水区数据库选型是关键决策">一、引言：信创进入深水区，数据库选型是关键决策</h2>
<p>2025-2026 年，信创产业已从&quot;试点验证&quot;迈向&quot;规模化落地&quot;。在这一阶段，数据库作为基础软件的核心组件，其选型决策直接影响：</p>
<ul>
<li><strong>系统架构的天花板</strong>：选错了路线，后续迁移成本可能是天文数字；</li>
<li><strong>国产 CPU 的适配深度</strong>：不同数据库对飞腾、鲲鹏、海光、龙芯、申威的支持程度差异显著；</li>
<li><strong>业务连续性保障</strong>：安全可靠测评等级直接关系到能否进入关键行业采购目录；</li>
<li><strong>团队的技术栈投入</strong>：一条技术路线背后是一整套人才培养和运维体系。</li>
</ul>
<p>对架构师而言，理解国产数据库的技术路线分类，比记住某个产品的版本号更重要。路线决定了基因，基因决定了上限。</p>
<hr>
<h2 id="二核心认知国产数据库的四条技术路线">二、核心认知：国产数据库的四条技术路线</h2>
<p>国产数据库的发展路径，大致可以归结为四条技术路线。每条路线有不同的技术基因、生态位和适用场景。</p>
<h3 id="21-完全自研路线">2.1 完全自研路线</h3>
<p><strong>代表产品</strong>：达梦（DM）、崖山（YashanDB）、OceanBase、TiDB、虚谷</p>
<p><strong>技术特征</strong>：</p>
<ul>
<li>内核完全自研，不依赖任何开源数据库内核</li>
<li>拥有完整的存储引擎、查询优化器、事务管理器的自主知识产权</li>
<li>SQL 方言可能与主流数据库存在差异，但近年来普遍加强了兼容性</li>
</ul>
<p><strong>优势</strong>：</p>
<ul>
<li>知识产权清晰，不存在开源协议争议</li>
<li>内核可控，针对国产硬件的深度优化空间上限</li>
<li>安全可靠测评中&quot;自主可控&quot;维度得分更高</li>
<li>长期来看不受上游开源项目路线变更的影响</li>
</ul>
<p><strong>劣势</strong>：</p>
<ul>
<li>生态工具链需要从零建设或自建适配层</li>
<li>学习曲线相对陡峭，DBA 迁移成本较高</li>
<li>部分产品的社区活跃度和第三方文档不如开源路线丰富</li>
</ul>
<p><strong>适用场景</strong>：对自主可控要求极高的场景（军工、核心政务系统），以及需要深度定制内核的场景。</p>
<hr>
<h3 id="22-postgresql-二次开发路线">2.2 PostgreSQL 二次开发路线</h3>
<p><strong>代表产品</strong>：金仓（KingbaseES）、瀚高（HighGo DB）、大云海山（中国移动）</p>
<p><strong>技术特征</strong>：</p>
<ul>
<li>基于 PostgreSQL 内核进行深度二次开发</li>
<li>保留了 PostgreSQL 的 SQL 语法、扩展机制和工具链兼容性</li>
<li>在此基础上增加国产 CPU 适配、安全增强、高可用扩展等能力</li>
</ul>
<p><strong>优势</strong>：</p>
<ul>
<li>继承了 PostgreSQL 成熟的 SQL 标准支持和扩展生态</li>
<li>迁移成本相对较低，Oracle/PG DBA 可快速上手</li>
<li>社区工具链（pg_dump、pgAdmin 等）可直接复用</li>
<li>经过多年打磨，稳定性和兼容性已有大量生产验证</li>
</ul>
<p><strong>劣势</strong>：</p>
<ul>
<li>受 PostgreSQL 上游版本演进影响，大版本升级需要同步跟进</li>
<li>深度定制可能导致与上游 PG 的兼容性逐渐偏离</li>
<li>在极端性能场景下，二次开发层可能引入额外开销</li>
</ul>
<p><strong>适用场景</strong>：已有 PostgreSQL 或 Oracle 技术栈的团队，需要平滑迁移的场景；对 SQL 标准兼容性要求较高的 OLTP 业务。</p>]]></description></item><item><title>工程正确性（三）：迁移登记、Checksum 与回滚边界</title><link>https://oldletter.cn/posts/engineering-correctness-03-database-migrations/</link><pubDate>Sat, 11 Jul 2026 00:00:00 +0000</pubDate><author>mumu</author><guid>https://oldletter.cn/posts/engineering-correctness-03-database-migrations/</guid><description><![CDATA[<blockquote>
<p>系列导航：<a href="/posts/engineering-correctness-01-green-tests-can-be-wrong/" rel="">11</a> | <a href="/posts/engineering-correctness-02-crypto-interoperability/" rel="">12</a> | <a href="/posts/engineering-correctness-03-database-migrations/" rel="">13</a> | <a href="/posts/engineering-correctness-04-coordinate-precision/" rel="">14</a></p></blockquote>
<p>迁移成功不等于数据库已经可用。空库安装验证的是完整历史，线上升级还要考虑旧应用并存、DDL 锁、回填速度和权限。一次服务发布曾在代码和容器准备完成后，生产账号执行迁移却因缺少 <code>ALTER</code> 和 <code>INDEX</code> 权限失败。这个问题不在 SQL 内容，属于迁移前置条件没有进入发布检查。</p>
<h2 id="登记表是事实来源">登记表是事实来源</h2>
<p>迁移记录至少包含版本、文件名、checksum、执行序号、状态、执行人、耗时和错误摘要。已执行文件禁止原地修改，修正使用新版本。启动时发现文件 checksum 与登记值不一致，应停止自动迁移并报警，不能为了让部署继续而覆盖登记表。</p>
<div class="mermaid" id="id-2" data-mermaid-definition="Zmxvd2NoYXJ0IFRECiAgICBzdWJncmFwaCBSZWdpc3RlclvnmbvorrBdCiAgICAgICAgZGlyZWN0aW9uIExSCiAgICAgICAgTVvov4Hnp7vmlofku7ZdIC0tPiBIYXNoW&#43;iuoeeulyBjaGVja3N1bV0gLS0&#43;IFJlZ2lzdHJ5W&#43;i/geenu&#43;eZu&#43;iusOihqF0KICAgIGVuZAogICAgc3ViZ3JhcGggTWlncmF0ZVvlhbzlrrnov4Hnp7tdCiAgICAgICAgZGlyZWN0aW9uIExSCiAgICAgICAgRXhwYW5kW0V4cGFuZCDlhbzlrrnnu5PmnoRdIC0tPiBCYWNrZmlsbFvmuLjmoIflm57loatdIC0tPiBSZWNvbmNpbGVb5YWo6YeP5a&#43;56LSmXQogICAgZW5kCiAgICBzdWJncmFwaCBTaHJpbmtb5YiH5o2i5LiO5pS257ypXQogICAgICAgIGRpcmVjdGlvbiBMUgogICAgICAgIFN3aXRjaFvor7vlhpnliIfmjaJdIC0tPiBDb250cmFjdFtDb250cmFjdCDliKDpmaTml6fnu5PmnoRdCiAgICBlbmQKICAgIFJlZ2lzdHJ5IC0tPiBFeHBhbmQKICAgIFJlY29uY2lsZSAtLT4gU3dpdGNoCiAgICBSZWNvbmNpbGUgLS0&#43;fOi2hemZkHwgUGF1c2Vb5pqC5YGc5LiO6KGl5YG/XQ==">flowchart TD
    subgraph Register[登记]
        direction LR
        M[迁移文件] --&gt; Hash[计算 checksum] --&gt; Registry[迁移登记表]
    end
    subgraph Migrate[兼容迁移]
        direction LR
        Expand[Expand 兼容结构] --&gt; Backfill[游标回填] --&gt; Reconcile[全量对账]
    end
    subgraph Shrink[切换与收缩]
        direction LR
        Switch[读写切换] --&gt; Contract[Contract 删除旧结构]
    end
    Registry --&gt; Expand
    Reconcile --&gt; Switch
    Reconcile --&gt;|超限| Pause[暂停与补偿]</div><p>登记表自身也要受保护。应用账号只读，迁移执行器拥有写入权限。手工 SQL 如果改变了生产结构，要补成正式迁移或登记为已应用版本，不能让测试环境和线上环境依靠“历史操作”维持一致。</p>
<h2 id="expandbackfillcontract">Expand、Backfill、Contract</h2>
<p>Expand 先添加可空字段、兼容索引或快照表，旧应用继续可用。应用升级后双写旧字段和新字段，后台使用稳定主键游标分批回填历史数据。对账完成后切换读路径，观察窗口结束，所有旧实例和离线任务退出，才进入 Contract。</p>
<p>回填条件带上新字段为空、源版本未变化等保护，防止覆盖在线写入。每批记录起止主键、扫描数、更新数、跳过数、失败数和校验摘要。暂停后从已提交游标继续，批次重试具备幂等条件，不能依赖 offset 扫描变化中的数据。</p>
<p>对账不只比较行数。字段拆分检查空值、范围、唯一性和重组结果，表迁移检查关联完整性，编码转换检查不可映射值。允许差异和处理结果写进发布记录，抽样人工核对只作为补充。</p>
<h2 id="回滚按阶段定义">回滚按阶段定义</h2>
<p>增加字段通常可以通过应用开关回退，读切换也可以切回旧路径。已经删除列或完成不可逆数据修正时，回滚依赖备份、归档表或补偿迁移，不能承诺“一键恢复”。发布单在执行前写清每个阶段的恢复动作、数据保留时间和负责人。</p>]]></description></item></channel></rss>