<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>数据专栏 on 追风笔记</title><link>https://f91dba72.wangpeng.pages.dev/data/</link><description>Recent content in 数据专栏 on 追风笔记</description><generator>Hugo</generator><language>zh</language><lastBuildDate>Sat, 08 Aug 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://f91dba72.wangpeng.pages.dev/data/index.xml" rel="self" type="application/rss+xml"/><item><title>数据治理：从资产目录到口径统一</title><link>https://f91dba72.wangpeng.pages.dev/columns/data/data-governance/</link><pubDate>Sat, 08 Aug 2026 00:00:00 +0000</pubDate><guid>https://f91dba72.wangpeng.pages.dev/columns/data/data-governance/</guid><description>&lt;p&gt;很多银行的数据治理项目，最后都沦为「补元数据、填责任表、交汇报 PPT」。运动一过，元数据过期、口径继续打架、下游照样不敢用这份数据。治理之所以失效，是因为它被当成了一份额外的「填表工作」，而不是数据生产流水线本身的属性。真正有效的治理，是让目录、血缘、口径和质量规则&lt;strong&gt;内建到系统里&lt;/strong&gt;，而不是靠人肉维护。&lt;/p&gt;&#10;&lt;h2 id="治理为什么总做成运动"&gt;治理为什么总做成运动&#10;&lt;/h2&gt;&#10;&lt;p&gt;根本原因是把「治理」和「生产」割裂了。业务系统吐数据，治理团队在下游追着补标签、对口径。一旦人员变动或项目结项，治理成果立刻失真。&lt;/p&gt;&#10;&lt;blockquote&gt;&#10;&lt;p&gt;治理的目标不是「漂亮的报告」，而是让下游系统敢用这份数据。如果一份数据没人敢用来做决策，它就算被打了满分标签，也还是负债。&lt;/p&gt;&#10;&lt;/blockquote&gt;&#10;&lt;p&gt;要扭转这个局面，得从三件最实在的事入手：盘清家底（资产目录）、追清来路（元数据血缘）、对齐说法（口径统一）。&lt;/p&gt;&#10;&lt;h2 id="资产目录先盘清家底"&gt;资产目录：先盘清家底&#10;&lt;/h2&gt;&#10;&lt;p&gt;资产目录回答的是「我们到底有哪些数据、归谁管、能不能用」。它不是 Excel 清单，而是带权属和分级的结构化注册表。&lt;/p&gt;&#10;&lt;div class="td-table-scroll td-table-scroll--static"&gt;&#10;&lt;table&gt;&#10; &lt;thead&gt;&#10; &lt;tr&gt;&#10; &lt;th scope="col"&gt;资产类型&lt;/th&gt;&#10; &lt;th scope="col"&gt;例子&lt;/th&gt;&#10; &lt;th scope="col"&gt;治理关注点&lt;/th&gt;&#10; &lt;/tr&gt;&#10; &lt;/thead&gt;&#10; &lt;tbody&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;贴源表&lt;/td&gt;&#10; &lt;td&gt;核心系统流水&lt;/td&gt;&#10; &lt;td&gt;来源系统、更新频率&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;派生表&lt;/td&gt;&#10; &lt;td&gt;客户宽表&lt;/td&gt;&#10; &lt;td&gt;加工逻辑、依赖&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;指标&lt;/td&gt;&#10; &lt;td&gt;月活、不良率&lt;/td&gt;&#10; &lt;td&gt;口径定义、负责人&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;文件/接口&lt;/td&gt;&#10; &lt;td&gt;监管报送文件&lt;/td&gt;&#10; &lt;td&gt;敏感度、共享范围&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;p&gt;目录必须和真实的元数据打通，否则就会出现「目录里说有、库里早就删了」的尴尬。一个可行的做法是：目录条目由采集任务自动生成，人工只补充业务语义，而不是反过来手工录入。&lt;/p&gt;&#10;&lt;h2 id="元数据与血缘字段从哪来到哪去"&gt;元数据与血缘：字段从哪来、到哪去&#10;&lt;/h2&gt;&#10;&lt;p&gt;元数据解决「这个字段是什么」，血缘解决「它怎么变来的、又被谁用了」。两者合起来，才能做影响分析和溯源。&lt;/p&gt;&#10;&lt;h3 id="血缘怎么采"&gt;血缘怎么采&#10;&lt;/h3&gt;&#10;&lt;p&gt;血缘最好自动采集，而不是靠文档口述。主流方式有两种：&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;strong&gt;静态解析&lt;/strong&gt;：扫描 SQL、ETL 脚本、Spark/DAG 定义，提取表与字段级的输入输出关系。&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;运行时采集&lt;/strong&gt;：在任务执行时记录实际读写的上下游，准确率最高但侵入性较强。&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h3 id="影响分析"&gt;影响分析&#10;&lt;/h3&gt;&#10;&lt;p&gt;有了血缘，一次核心系统字段口径变更，能立刻列出受影响的下游报表和指标。没有血缘，这类变更只能靠「老员工记忆」，风险极高。&lt;/p&gt;&#10;&lt;blockquote&gt;&#10;&lt;p&gt;血缘的价值不在炫技，而在于把「改一个字段要通知谁」从玄学变成可查询的图。它是治理能规模化的前提。&lt;/p&gt;&#10;&lt;/blockquote&gt;&#10;&lt;h2 id="指标口径统一最难的最后一公里"&gt;指标口径统一：最难的最后一公里&#10;&lt;/h2&gt;&#10;&lt;p&gt;银行里「不良率」「活跃客户」「存款日均」这类指标，不同部门算出来常常不一样。根因不是谁算错，而是&lt;strong&gt;口径没有单一可信来源&lt;/strong&gt;。&lt;/p&gt;&#10;&lt;h3 id="口径冲突的例子"&gt;口径冲突的例子&#10;&lt;/h3&gt;&#10;&lt;p&gt;「月活客户」可能被定义为：&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;渠道侧：当月登录 App 即算活跃；&lt;/li&gt;&#10;&lt;li&gt;零售侧：当月有动账交易才算活跃；&lt;/li&gt;&#10;&lt;li&gt;监管侧：按监管文件口径，且需去重。&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;三个数字放在一起对比，结论自然矛盾。更糟的是，没人说得清哪个是「官方版本」。&lt;/p&gt;&#10;&lt;h3 id="指标字典与单一来源"&gt;指标字典与单一来源&#10;&lt;/h3&gt;&#10;&lt;p&gt;解决思路是建立指标字典：每个指标一条定义，包含口径 SQL、维度、过滤条件、负责人和生效时间。下游统一从字典取数，禁止各自重写逻辑。&lt;/p&gt;&#10;&lt;div class="td-code td-code--untitled" id="td-code-e85092e4-fence-0" data-td-code data-td-code-auto-id&#10; data-td-language="sql" data-td-line-count="7"&gt;&#10; &lt;div class="td-code__viewport" id="td-code-e85092e4-fence-0-viewport" data-td-code-viewport&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-sql" data-lang="sql"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;-- 指标字典中「存款日均」的口径定义（单一来源）&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;SELECT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;cust_id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;SUM&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;balance&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;COUNT&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;DISTINCT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;cal_date&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;AS&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;avg_daily_balance&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;FROM&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;dwd_account_daily&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;WHERE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;cal_date&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;BETWEEN&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="k"&gt;start&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;AND&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="k"&gt;end&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;AND&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;balance_type&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;SAVING&amp;#39;&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;GROUP&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;BY&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;cust_id&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;p&gt;口径变更要走版本管理，旧口径保留可追溯，新口径标注生效日，避免历史报表被悄悄改义。&lt;/p&gt;</description></item><item><title>消息队列选型：Kafka vs Pulsar vs RabbitMQ</title><link>https://f91dba72.wangpeng.pages.dev/columns/data/message-queue/</link><pubDate>Sat, 28 Feb 2026 00:00:00 +0000</pubDate><guid>https://f91dba72.wangpeng.pages.dev/columns/data/message-queue/</guid><description>&lt;p&gt;消息队列是分布式系统的神经系统，但 Kafka、Pulsar、RabbitMQ 三者的设计哲学差异极大。选错不是「换个客户端」的事，而是架构重做。下面从几个工程最关心的维度拆开看。&lt;/p&gt;&#10;&lt;h2 id="模型差异是根本"&gt;模型差异是根本&#10;&lt;/h2&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;strong&gt;RabbitMQ&lt;/strong&gt;：经典消息代理，面向「消息」和「队列」，支持丰富路由（直连、主题、头部、扇出）。适合任务分发、低延迟小消息。&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;Kafka&lt;/strong&gt;：日志型、分区有序、拉取消费，面向「流」和「事件溯源」。适合高吞吐、可重放。&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;Pulsar&lt;/strong&gt;：计算存储分离，分层架构，原生多租户和跨地域复制。适合既要 Kafka 的流、又要 RabbitMQ 的队列语义的统一平台。&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;div class="td-code td-code--untitled" id="td-code-e7471357-fence-0" data-td-code data-td-code-auto-id&#10; data-td-language="bash" data-td-line-count="4"&gt;&#10; &lt;div class="td-code__viewport" id="td-code-e7471357-fence-0-viewport" data-td-code-viewport&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Kafka 顺序消费依赖分区&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;bin/kafka-console-consumer.sh &lt;span class="se"&gt;\&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; --topic orders --bootstrap-server b1:9092 &lt;span class="se"&gt;\&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; --partition &lt;span class="m"&gt;0&lt;/span&gt; --offset earliest&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;h2 id="关键维度对比"&gt;关键维度对比&#10;&lt;/h2&gt;&#10;&lt;div class="td-table-scroll td-table-scroll--static"&gt;&#10;&lt;table&gt;&#10; &lt;thead&gt;&#10; &lt;tr&gt;&#10; &lt;th scope="col"&gt;维度&lt;/th&gt;&#10; &lt;th scope="col"&gt;Kafka&lt;/th&gt;&#10; &lt;th scope="col"&gt;Pulsar&lt;/th&gt;&#10; &lt;th scope="col"&gt;RabbitMQ&lt;/th&gt;&#10; &lt;/tr&gt;&#10; &lt;/thead&gt;&#10; &lt;tbody&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;吞吐&lt;/td&gt;&#10; &lt;td&gt;极高&lt;/td&gt;&#10; &lt;td&gt;极高&lt;/td&gt;&#10; &lt;td&gt;中等&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;消息模型&lt;/td&gt;&#10; &lt;td&gt;流/日志&lt;/td&gt;&#10; &lt;td&gt;流+队列&lt;/td&gt;&#10; &lt;td&gt;队列&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;顺序性&lt;/td&gt;&#10; &lt;td&gt;分区内有序&lt;/td&gt;&#10; &lt;td&gt;分区/Key 有序&lt;/td&gt;&#10; &lt;td&gt;队列有序&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;运维复杂度&lt;/td&gt;&#10; &lt;td&gt;中&lt;/td&gt;&#10; &lt;td&gt;高（含 BookKeeper）&lt;/td&gt;&#10; &lt;td&gt;低&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;消费模型&lt;/td&gt;&#10; &lt;td&gt;拉取、可重放&lt;/td&gt;&#10; &lt;td&gt;拉取、可重放&lt;/td&gt;&#10; &lt;td&gt;推送&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;h2 id="选型思路"&gt;选型思路&#10;&lt;/h2&gt;&#10;&lt;ol&gt;&#10;&lt;li&gt;&lt;strong&gt;事件流、日志、可重放&lt;/strong&gt; → Kafka 稳。审计、CDC、行为埋点这类场景它的重放能力几乎是刚需。&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;统一消息平台、多租户、跨地域&lt;/strong&gt; → Pulsar 更合适，但团队要扛得住运维。&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;任务队列、复杂路由、低延迟&lt;/strong&gt; → RabbitMQ 更直接。&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;div class="td-code td-code--untitled" id="td-code-e7471357-fence-1" data-td-code data-td-code-auto-id&#10; data-td-language="java" data-td-line-count="4"&gt;&#10; &lt;div class="td-code__viewport" id="td-code-e7471357-fence-1-viewport" data-td-code-viewport&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-java" data-lang="java"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// 用消息头做复杂路由（RabbitMQ 风格）&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;channel&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;basicPublish&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;orders.topic&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;order.created.vip&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// routingKey&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;props&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;body&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;blockquote&gt;&#10;&lt;p&gt;别用 RabbitMQ 扛日均百亿事件流，也别用 Kafka 做需要复杂路由的任务分发——用对的工具，比用最强的工具重要。&lt;/p&gt;</description></item><item><title>分库分表策略与热点治理</title><link>https://f91dba72.wangpeng.pages.dev/columns/data/sharding-strategy/</link><pubDate>Mon, 30 Mar 2026 00:00:00 +0000</pubDate><guid>https://f91dba72.wangpeng.pages.dev/columns/data/sharding-strategy/</guid><description>&lt;p&gt;当单表涨到几亿行、单库连接打满，分库分表就从「可选项」变成「生存项」。但分片一旦定错键，后期重构的代价接近重写。所以策略要在一开始就想清楚。&lt;/p&gt;&#10;&lt;h2 id="分片键是第一步也是最重要的一步"&gt;分片键是第一步，也是最重要的一步&#10;&lt;/h2&gt;&#10;&lt;p&gt;分片键决定数据怎么散、请求怎么走。选错键，要么数据倾斜，要么跨分片查询泛滥。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;strong&gt;选高频等值查询字段&lt;/strong&gt;：比如账户号、客户号，保证大多数请求落单分片。&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;避免低基数或单调递增&lt;/strong&gt;：性别这种分片键会制造大分片；自增 ID 做键会集中在最新分片，形成写入热点。&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;兼顾关联查询&lt;/strong&gt;：同一客户的账户、交易最好同片，减少跨片 JOIN。&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;div class="td-code td-code--untitled" id="td-code-c3928bd6-fence-0" data-td-code data-td-code-auto-id&#10; data-td-language="sql" data-td-line-count="3"&gt;&#10; &lt;div class="td-code__viewport" id="td-code-c3928bd6-fence-0-viewport" data-td-code-viewport&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-sql" data-lang="sql"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;-- 按客户号哈希分 1024 片&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;SELECT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;FROM&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;trans_$&lt;/span&gt;&lt;span class="err"&gt;{&lt;/span&gt;&lt;span class="n"&gt;hash&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;cust_id&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;%&lt;/span&gt;&lt;span class="mi"&gt;1024&lt;/span&gt;&lt;span class="err"&gt;}&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;WHERE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;cust_id&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;?&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;AND&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;trans_date&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;?&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;h2 id="扩容预分片优于临时拆"&gt;扩容：预分片优于临时拆&#10;&lt;/h2&gt;&#10;&lt;p&gt;一开始就按「未来三年规模」定足够多的逻辑分片（如 1024、4096），物理上先少后多。扩容只是把逻辑分片映射到新物理库，&lt;strong&gt;数据迁移量远小于重新分片&lt;/strong&gt;。&lt;/p&gt;&#10;&lt;div class="td-table-scroll td-table-scroll--static"&gt;&#10;&lt;table&gt;&#10; &lt;thead&gt;&#10; &lt;tr&gt;&#10; &lt;th scope="col"&gt;策略&lt;/th&gt;&#10; &lt;th scope="col"&gt;优点&lt;/th&gt;&#10; &lt;th scope="col"&gt;缺点&lt;/th&gt;&#10; &lt;/tr&gt;&#10; &lt;/thead&gt;&#10; &lt;tbody&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;预分片&lt;/td&gt;&#10; &lt;td&gt;扩容平滑&lt;/td&gt;&#10; &lt;td&gt;初期略冗余&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;范围分片&lt;/td&gt;&#10; &lt;td&gt;易理解&lt;/td&gt;&#10; &lt;td&gt;易热点&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;tr&gt;&#10; &lt;td&gt;哈希分片&lt;/td&gt;&#10; &lt;td&gt;均衡&lt;/td&gt;&#10; &lt;td&gt;范围查询跨片&lt;/td&gt;&#10; &lt;/tr&gt;&#10; &lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;div class="td-code td-code--untitled" id="td-code-c3928bd6-fence-1" data-td-code data-td-code-auto-id&#10; data-td-language="java" data-td-line-count="3"&gt;&#10; &lt;div class="td-code__viewport" id="td-code-c3928bd6-fence-1-viewport" data-td-code-viewport&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-java" data-lang="java"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// 逻辑分片到物理库的映射可配置&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;String&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;logic&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;trans_&amp;#34;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;hash&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;custId&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;%&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;1024&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;String&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;phys&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;routeTable&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;lookup&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;logic&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;//&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;映射到具体物理库&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;h2 id="热点治理"&gt;热点治理&#10;&lt;/h2&gt;&#10;&lt;p&gt;即使哈希均匀，业务上仍会有「明星账户」「大商户」成为单点热点。&lt;/p&gt;</description></item></channel></rss>