知识卡片
分库主键选客户ID,让"以客户为中心"先在数据层面成立
内容
分布式数据库选型确定后,紧接着要决定的是分库主键——这个键决定了同一份业务数据会被路由到哪个数据单元。对于与客户直接接触的核心业务,分库主键建议选客户ID,让同一个客户产生的所有数据都落在同一个数据单元内。这个选择背后的直接动机是性能:跨数据单元、跨数据中心的频繁数据访问或服务调用,对分布式系统的性能是致命的,把同一客户的数据聚在一处能从根子上避免这种代价高昂的跨单元访问。但更深一层的动机是业务能力和数据结构必须对齐——企业想要真正具备”以客户为中心”的服务能力(比如一次性看到客户的全部订单、保单、历史记录),前提是客户的数据在物理层面就是聚合在一起、而不是散落在按其他维度(如产品线、渠道)切分的各个数据单元里;如果分库主键选错,业务层面喊”以客户为中心”就会因为底层数据结构不支持而始终停留在口号阶段。当然客户ID不是唯一选择,具体业务场景也可以选机构代码、用户ID等其他业务属性作为分库主键,核心判断标准是:这个业务领域里,哪个维度的实体最需要被作为一个整体被聚合读取和处理,就用它做分库主键。
参考来源
- 位置:第24章《分布式架构的关键设计》"24.2 如何设计数据库分库主键"(源文件:_epub-src/OEBPS/Text/chapter7-2-2.xhtml)
- 结论依据:原文说明"与客户接触的关键业务,建议以客户ID作为分库主键。这样可以确保同一个客户的数据分布在同一个数据单元内,避免出现跨数据单元的频繁数据访问……将客户的所有数据放在同一个数据单元,也更容易为客户提供一致性服务。而对企业来说,要具备'以客户为中心'的业务能力,要先在数据上做到'以客户为中心'",直接支撑本卡片结论。
- 原始内容:与客户接触的关键业务,建议以客户ID作为分库主键。这样可以确保同一个客户的数据分布在同一个数据单元内,避免出现跨数据单元的频繁数据访问。跨数据中心的频繁服务调用或跨数据单元的查询,会对系统性能造成致命的影响……而对企业来说,要具备"以客户为中心"的业务能力,要先在数据上做到"以客户为中心"。