想象你接手了一家城里闻名的老馆子。大厨从采买到掌勺、记台账都亲力亲为,出品稳定、味道正宗,熟客络绎不绝。可一到饭点,门口排队的食客绕了三圈。你想扩张,却发现老厨房的过道已经堆满了加大号的锅灶,再添设备也换不来更多座位。 另一批创业者把目光转向了“中央厨房+连锁门店”模式:菜谱集中制定,原料统一配送,各家分店只需完成最后的烹饪。顾客点的还是熟悉的菜,厨房却早已分布在城市各处。 这正是传统关系型数据库与 NewSQL 的缩影。前者像老馆子的厨房——可靠、强大,但场地和人手就是天花板;后者像中央厨房——用分布式架构把数据铺到多台机器上,同时用 SQL 与事务让开发人员感觉不到变化。选型不是非此即彼,而是根据业务规模、一致性要求、团队实力与成本,找到属于自己的那张饭桌。本文以这个“餐饮帝国养成记”为线索,剖析两者的本质差异,并给出可落地的选型指南。

岗位关联

对 AI 工程师和数据库管理员而言,搞懂 NewSQL 与传统关系型数据库的选型对比,能在系统设计时精准预判容量、避免过度架构,从容应对海量数据场景。

目录
  1. 可视化演示
  2. 传统关系型数据库
  3. NewSQL核心技术
  4. 关键差异对比
  5. 选型决策框架
  6. 迁移融合策略
  7. 性能优化实践
  8. 典型应用场景
  9. AI 应用场景
  10. Python 演示
  11. 常见误区
  12. 面试题

可视化演示

本节配有交互动效(进入视口后自动加载,约 3KB)。

传统关系型数据库

老馆子的厨房里只有一位主厨。他熟知每道菜的火候,所有酱料都摆在自己的手边,高峰时即使同时出十道菜,节奏也不会乱。在数据库世界里,这种“一人全包”的模型就是传统关系型数据库:以 MySQL、PostgreSQL 为代表的单机架构,数据集中在一个节点上,通过行锁、多版本并发控制(MVCC)等机制来保证事务的 ACID 特性。

既然一个人忙不过来,最自然的想法就是给厨房扩容:换更大的灶台、买更大的冰箱、雇更多的人手。对应到数据库,就是增加 CPU、内存和更快的磁盘,这叫纵向扩展。但厨房面积终归有限,当餐厅高峰期的客流量超过厨师的上限,再好的厨艺也产不出更多菜品。单机数据库同样存在性能天花板,而且越往上走,硬件成本增长越离谱。

更扎心的是,规模扩大后收益并不会成比例上涨,因为厨房里仍然只有一位主厨在掌控全局。

S加速比=1(1−p)+pN\displaystyle S_{\text{加速比}} = \frac{1}{(1 - p) + \dfrac{p}{N}}

1. 串行部分开销:系统里总有一部分无法并行,它占时长的 \(1-p\)。

T串行=(1−p)×T原始T_{\text{串行}} = (1 - p) \times T_{\text{原始}}

2. 并行部分加速:剩下那部分耗时随着资源 \(N\) 增加而降低。

T并行=pN×T原始T_{\text{并行}} = \frac{p}{N} \times T_{\text{原始}}

3. 总耗时:新耗时等于“串行部分 + 并行部分”。

T新=T串行+T并行T_{\text{新}} = T_{\text{串行}} + T_{\text{并行}}

4. 加速比:原始耗时除以新耗时,得到提升倍数。

S=T原始T新=1(1−p)+pNS = \frac{T_{\text{原始}}}{T_{\text{新}}} = \frac{1}{(1 - p) + \frac{p}{N}}

老馆子也有说不完的好处:菜谱、培训、供应链都是现成的。传统关系型数据库的周边生态极其成熟——备份工具、监控平台、可视化运维面板,还有大量经验丰富的 DBA 工程师。对于中小体量的业务,它依然是开业成本最低、跑得最稳的选择。

NewSQL核心技术

换个思路:与其死守一个厨房,不如建设中央厨房加连锁门店。菜谱由总部统一制定,各家分店只负责烹饪和上菜,这就是 NewSQL 的核心理念。它在分布式集群上重新实现了 SQL 接口,让开发者继续使用熟悉的“菜谱”,却把数据拆分到多个存储节点上,做到水平扩展。

NewSQL 的技术底座颇有讲究。底层通常是分布式存储引擎,把数据按范围或哈希切成若干分片,分布在多台机器上;上层保留 SQL 解析、优化与执行引擎,让业务方像使用普通关系型数据库一样提交查询。为了在多个副本之间形成统一意见,NewSQL 引入共识算法(如 Raft 或 Paxos),保证写操作在多数节点上落盘后才返回成功。

共识算法的核心动作是“少数服从多数”:一个写请求不需要所有副本都确认,只需多数派确认即可提交。

M=⌊n2⌋+1\displaystyle M = \left\lfloor \frac{n}{2} \right\rfloor + 1

1. 总副本数:每个分片会有多个副本,常见三副本或五副本。

n=3 或 5n = 3\ \text{或}\ 5

2. 半数向下取整:先取总副本数的一半,向下取整。

⌊n2⌋=1 (n=3)\left\lfloor \frac{n}{2} \right\rfloor = 1\ (n=3)

3. 多数派:半数加一就是多数派。

M=1+1=2 (n=3)M = 1 + 1 = 2\ (n=3)

对食客来说,他们只是走进一家熟悉的餐厅,根本感知不到厨房分布在几个城市。同理,NewSQL 让业务团队继续写 SQL,底层的分片迁移、故障恢复、节点扩容都在数据库内部完成。于是,当业务像连锁店一样快速开疆拓土时,数据库只需要加节点就能轻松跟上。

关键差异对比

现在把老馆子和中央厨房摆在同一张餐桌上对比。第一道差异是扩展方式:老馆子要再接客只能加桌子、扩大厨房,属于纵向扩展;中央厨房则可以不断签约新门店、新建配送站,属于水平扩展。对传统数据库而言,水平扩展并不是不能做,而是要做分库分表、数据搬迁,还要面对跨分片事务的“协调地狱”。

第二道差异体现在事务与一致性上。老主厨在同一口锅里操作,自然容易保证每道菜“要么上齐、要么退菜”的事务性;中央厨房跨门店、跨冷链协作,就需要复杂的分布式事务协议来保证一致。NewSQL 通过共识算法与两阶段提交等手段实现强一致,但代价是事务延迟比单机更高。传统数据库单机事务延迟低,但跨节点复制时容易遇到主从延迟和弱一致窗口。

第三道差异是运维复杂度。管好一家老馆子,老板一个人盯着后厨和收银台就够了;管好一个连锁体系,则需要供应链管理、冷链运输和巡检团队。NewSQL 同样如此,它引入了更多节点、网络分区和故障场景,运维门槛明显高于单机数据库。最后是可用性层面,多副本让 NewSQL 在局部故障时更容易做到不中断服务。

Asystem=1−(1−Anode)k\displaystyle A_{\text{system}} = 1 - (1 - A_{\text{node}})^{k}

1. 单点可用性:一个节点正常服务的时间占比记为 A。

Anode=正常服务时间总时间A_{\text{node}} = \frac{\text{正常服务时间}}{\text{总时间}}

2. 单点故障率:它故障的概率是 \(1-A\)。

F=1−AnodeF = 1 - A_{\text{node}}

3. 多副本全故障:k 组副本同时故障的概率。

Fk=(1−Anode)kF_{k} = (1 - A_{\text{node}})^{k}

4. 系统可用性:用 1 减去全故障概率。

Asystem=1−FkA_{\text{system}} = 1 - F_{k}

总结来说,传统数据库是“单点极致”——事务快、运维简单,但扩展和可用性依赖外部方案;NewSQL 是“整体协同”——扩展性好、故障自愈强,但事务延迟和运维成本随之上升。选谁,取决于你的餐厅到底要开多大。

选型决策框架

你已经知道两家模式的差异,接下来要回答最实际的问题:我的业务该选哪条路?先评估业务规模。如果每天的客流量固定、翻台率稳定,单机数据库就像一家老馆子,一口锅足以应付。只有当数据量或并发请求逼近单机上限,且增长趋势肉眼可见时,中央厨房式的新架构才真正开始体现优势。

第二个维度是强一致性要求。涉及账户余额、库存扣减、订单状态这类敏感数据,用户无法接受“支付成功但余额没扣”的间隔。传统数据库单机天然强一致;NewSQL 通过多数派协议在分布式下实现强一致,但需要正确的路由配置。如果业务可以容忍最终一致性,传统数据库加上主从读写分离已经足够。

第三个维度是团队技术储备。经营中央厨房需要冷链物流、质量管理专才;运维 NewSQL 也需要懂网络、存储、分布式协议的工程师。如果团队只熟悉单机数据库,贸然迁移可能陷入故障排查的泥潭。最后是成本敏感度,搭建中央厨房初期投入远高于一家小店,但当规模扩大到一定程度,平均成本反而会下降。

TCO=Cserver×N+Cops×N×T+Cmigration\displaystyle TCO = C_{\text{server}} \times N + C_{\text{ops}} \times N \times T + C_{\text{migration}}

1. 硬件成本:节点越多,硬件采购成本越高。

Chard=Cserver×NC_{\text{hard}} = C_{\text{server}} \times N

2. 运维成本:每个节点每年都要消耗人力与设施费用。

Cops_total=Cops×N×TC_{\text{ops\_total}} = C_{\text{ops}} \times N \times T

3. 迁移成本:包含数据搬迁、停机损失和旧系统下线。

Cmigration=Ctools+CdowntimeC_{\text{migration}} = C_{\text{tools}} + C_{\text{downtime}}

4. 总拥有成本:三者相加就是长期总花费。

TCO=Chard+Cops_total+CmigrationTCO = C_{\text{hard}} + C_{\text{ops\_total}} + C_{\text{migration}}

选型决策其实是一个多维打分:规模、一致性、团队、成本,任何一项过弱都可能决定结果。就像选址开餐厅,客流量再大,如果找不到厨师团队,也只能暂缓连锁计划。

迁移融合策略

老馆子决定引进中央厨房体系时,最担心的并不是新模式不好,而是改造期间影响营业。数据迁移同样如此,最稳妥的办法不是“关店装修”,而是“边营业边改造”。第一步是数据平滑迁移:先做一次全量快照搬到新库,再利用变更日志持续同步增量数据,让新旧库逐步逼近一致。

第二步是双写过渡。在切换窗口期内,业务同时对旧库和新库写入,系统以旧库为准,新库持续追平数据。观察一段时间后,把读流量逐步切到新库,确认稳定后再停掉对旧库的写入。这就像老店先开一个窗口卖新品,顾客接受后再慢慢替换整本菜单。

第三步和第四步是分片策略与读写分离的设计。NewSQL 的分片键选得好不好,直接决定事务能否在单分片内完成;选错了,业务会频繁触发跨分片事务,延迟飙升。读写分离则让查询走只读副本,减轻主写入节点的压力,与双写过渡相结合,形成一条平滑的左移路线。

Tmigration=DtotalB×U×P+Tverify\displaystyle T_{\text{migration}} = \frac{D_{\text{total}}}{B \times U \times P} + T_{\text{verify}}

1. 数据总量:迁移量由表行数、平均行大小和副本数共同决定。

Dtotal=行数×平均行大小×副本数D_{\text{total}} = \text{行数} \times \text{平均行大小} \times \text{副本数}

2. 有效迁移带宽:实际带宽乘上利用率和并行度。

Beff=B×U×PB_{\text{eff}} = B \times U \times P

3. 搬迁时间:总量除以有效带宽。

Tcopy=DtotalBeffT_{\text{copy}} = \frac{D_{\text{total}}}{B_{\text{eff}}}

4. 总时长:搬迁完成后还要留出校验对账时间。

Tmigration=Tcopy+TverifyT_{\text{migration}} = T_{\text{copy}} + T_{\text{verify}}

迁移不是一场“删库跑路”的冒险,而是一次精心策划的厨房改造。只要规划好全量、增量、双写和分片,就能把业务风险降到最低,最终让旧系统体面退休。

性能优化实践

不管是老馆子还是中央厨房,后厨效率都靠管理细节。数据库同样如此。首先看连接池调优:连接池相当于后厨的备菜窗口,窗口太少,请求都在门口排队;窗口太多,服务人员互相挤占,事务等待反而加剧。把连接数调整到略高于并发峰值,是最常见的性能提升手段。

其次是索引设计。就像菜谱目录按“川菜、粤菜”分类,索引让查询直接定位到目标行,而不是扫描整张菜谱。为高频查询字段建立合适的二级索引,能显著降低延迟。但索引不是越多越好,因为每次写入都要同步维护索引,过量的索引会拖慢写入速度。

批量写入是另一个高效技巧。把多条 INSERT 合并成一条批量语句,相当于后厨一次性备好十桌的菜,而不是一桌一桌地等。网络往返次数急剧下降,吞吐量随之提升。最后是查询路由:把只读请求分散到多个副本节点上,避免所有流量压向同一个主节点,这与连锁餐厅让多家分店同时出餐是一个道理。

L=λ×W\displaystyle L = \lambda \times W

1. 并发数:系统中同时排队或执行的请求数量叫并发数。

L=λ×WL = \lambda \times W

2. 到达率:每秒进入数据库的请求数量。

λ=请求总数秒\lambda = \frac{\text{请求总数}}{\text{秒}}

3. 平均等待时间:一个请求从进入到完成的耗时。

W=LλW = \frac{L}{\lambda}

这组优化动作环环相扣:连接池控制并发,索引降低扫描成本,批量写入减少网络往返,读路由均衡负载。每一项看起来都不起眼,但叠加起来,就像连锁厨房把每道工序优化到极致,整体效率自然就拉开了差距。

典型应用场景

不同菜系适配不同客群,数据库选型也讲究“按需上菜”。第一类场景是海量互联网业务,比如用户中心、社交关系这类数据量大、查询模式多样的应用。用户量从百万涨到亿级后,单机数据库早已不堪重负,NewSQL 的自动分片和在线扩容能力,让它成为这类业务的主力选手。

第二类场景是电商订单与库存系统。订单状态流转频繁,库存扣减必须恰好一次,传统单库在高峰大促时常常遇到锁竞争。NewSQL 支持跨节点事务,同时允许按用户 ID 或店铺 ID 进行分片,很好地化解了大促峰值写入的压力。

第三类场景是金融核心交易。银行转账、支付清算对强一致和审计有极致要求。虽然单机数据库也能保证强一致,但一旦业务增长到需要跨地域多活,NewSQL 的多副本强一致和多数派机制就展现出独特价值。最后还有时序数据场景:IoT 传感器、监控指标这类数据写入频繁、保留周期长,专门的时间序列数据库有压缩优势;但当业务还要把时序数据与设备元数据做 SQL 关联分析时,NewSQL 也能胜任。

Sstorage=Rwrite×Bavg×Dretain×Rreplica\displaystyle S_{\text{storage}} = R_{\text{write}} \times B_{\text{avg}} \times D_{\text{retain}} \times R_{\text{replica}}

1. 写入速率:每秒写入的请求条数。

Rwrite=总写入 条数秒R_{\text{write}} = \frac{\text{总写入}\ \text{条数}}{\text{秒}}

2. 平均记录大小:每条数据平均占用的字节数。

Bavg=数据总大小记录条数B_{\text{avg}} = \frac{\text{数据总大小}}{\text{记录条数}}

3. 保留天数:数据需要存储的时间长度,乘上一天的秒数。

Dretain=天数×86400D_{\text{retain}} = \text{天数} \times 86400

4. 副本因子:为了高可用保留的副本数量。

Sstorage=Rwrite×Bavg×Dretain×RreplicaS_{\text{storage}} = R_{\text{write}} \times B_{\text{avg}} \times D_{\text{retain}} \times R_{\text{replica}}

场景决定选型:小店菜品少、客流稳,单机数据库像一位贴心主厨,足够温暖可靠;连锁巨头需求多、扩张快,NewSQL 则像一套现代化的中央厨房体系,支撑你开向更多城市。

AI 应用场景

互联网海量用户中心

阶段:数据存储与 AI 特征服务底座

解决的问题:传统单机数据库在用户量增长后 QPS 和存储双告警,分库分表中间件虽能缓解压力,却无法优雅处理跨分片 JOIN 和分布式事务。NewSQL 以水平扩展和透明分片,同时保留 SQL 查询能力,让 AI 特征表、用户画像数据在一套系统内统一管理。

具体案例:一个日活超过 5000 万的社交应用,原用户关系链存储在 MySQL 分库中,每次跨库查询都要在应用层手工聚合。迁移到 TiDB 后,只需增加节点即可扩容,AI 推荐系统读取特征数据的延迟下降 40%。

金融核心交易系统

阶段:事务型 AI 反欺诈特征存储

解决的问题:金融交易要求极强的 ACID 保证,同时又要承载日益增长的流水规模。NewSQL 在分布式扩展的同时保留 SQL 事务语义,为反欺诈模型的特征计算提供一致且可追溯的数据源。

具体案例:某支付公司的清结算流水表原本运行在单实例 PostgreSQL 上,夜间清算高峰 CPU 长时间打满。换用 CockroachDB 后,清算任务从 6 小时压缩到 40 分钟,且新增节点无需停服。

IoT 与日志分析平台

阶段:时序数据清洗与多表关联分析

解决的问题:IoT 场景每秒有大量指标写入,传统时序数据库擅长压缩存储但不擅长与业务元数据做关联查询。NewSQL 既能承载海量写入,又能支持多个维度的 SQL 分析,让 AI 故障预测模型直接读取统一数据源。

具体案例:某智能工厂产线传感器每 5 秒上报一次数据,早期落到 MySQL 集群后磁盘频繁写满。改用 TiDB 存储指标数据并保留设备元数据,故障定位时间缩短一半,训练数据的离线抽取也不再影响在线写入。

Python 演示

python38 行
import math class CapacityPlanner:    def __init__(self, qps, read_ratio, retention_days=30):        self.qps = qps        self.read_ratio = read_ratio        self.retention_days = retention_days     def write_tps(self):        # 只有写入请求需要消耗事务能力        return self.qps * (1 - self.read_ratio)     def trad_tps(self, nodes):        # 模拟传统数据库集群能处理的 TPS        return 120 * nodes * math.exp(-0.5 * nodes)     def newsql_tps(self, nodes):        # 模拟 NewSQL 集群接近线性的扩展能力        return 55 * nodes + 10     def recommend(self):        w = self.write_tps()        if w <= self.trad_tps(1):            return "传统关系型数据库(单机即可满足)"        if w <= max(self.trad_tps(n) for n in range(2, 5)):            return "传统关系型数据库(小规模主从即可)"        ask_nodes = math.ceil((w - 10) / 55)        return "NewSQL(CockroachDB 或 TiDB,预计需要 {} 个节点)".format(max(1, ask_nodes))     def estimate_storage(self, avg_bytes):        w = self.write_tps()        total = w * avg_bytes * self.retention_days * 86400        return total / 1024**3  # 换算为 GB if __name__ == "__main__":    planner = CapacityPlanner(qps=5000, read_ratio=0.8, retention_days=30)    print(planner.recommend())    print("预计存储: {:.1f} GB".format(planner.estimate_storage(512)))
目的:这是一个数据库选型容量规划器,输入业务 QPS、读写比例与数据保留天数,输出该用传统关系型数据库还是 NewSQL,并估算存储规模。
  1. def trad_tps(self, nodes):模拟传统数据库横向扩展时事务能力先升后降的曲线
  2. def newsql_tps(self, nodes):模拟 NewSQL 接近线性的事务扩展能力
  3. if w <= self.trad_tps(1):写请求还不到单机能力上限,直接选传统数据库最经济
  4. ask_nodes = math.ceil((w - 10) / 55)根据 NewSQL 单节点能力反推需要的节点数
  5. total = w * avg_bytes * self.retention_days * 86400写入速率乘平均大小再乘保留秒数,得到总存储字节

常见误区

误区刚接触 NewSQL 的开发者觉得它既支持 SQL 又能水平扩展,于是任何新系统都直接选 NewSQL,认为传统关系型数据库已经过时。

正解选型要看场景。数据量远未触及单机天花板、请求量不大、团队不熟悉分布式系统时,传统关系型数据库更简单、更省钱、更容易运维。用小面馆比喻:客流只有二十人的面馆,请一个中央厨房团队反而亏本。

为何常见:NewSQL 的宣传重点集中在“分布式+SQL”的优势上,容易让新手忽略规模前提,仿佛“大就是好”。

误区认为 NewSQL 就是把 MySQL 分库分表,再包一层代理查询,本质和 ShardingSphere 之类的中间件没有区别。

正解中间件方案把跨分片事务和 JOIN 留给应用层处理,分片规则要自己维护;NewSQL 的底层自带分布式存储和共识算法,数据在哪、怎么同步、如何恢复都由数据库自身管理。可以理解为中央厨房不仅配送食材,还自带冷链和质检体系。

为何常见:从外部看,两者都提供“可扩展的 SQL 入口”,不深入底层很难察觉架构差异。

误区提到 MySQL 就想到单机,认为一台宕机业务就会全挂,传统数据库与高可用无缘。

正解传统数据库可以通过主从复制、半同步复制和故障切换工具实现高可用,只是写入仍然集中在主节点,扩展写能力有限。老主厨虽然只有一个,但可以配备备用厨师,做到“歇人不歇灶”。

为何常见:很多开发者只见过单机部署的默认形态,把默认形态当成了全部能力。

误区业务刚迁移到 CockroachDB 或 TiDB,开发就觉得所有读都天然强一致,不需要关注路由和隔离级别。

正解NewSQL 的强一致通常作用于共识写入路径。如果查询走的是只读副本,或隔离级别设置不当,仍然可能读到旧版本数据;分布式事务延迟也比单机高。中央厨房虽然流程标准,但也要确认配送的是哪一批货。

为何常见:数据库“支持强一致”被误解为“所有操作默认强一致”,忽略了配置和使用方式的影响。

面试题

Q1. 传统关系型数据库最主要的扩展方式是什么?

单选题 · easy

  • A.增加 CPU 和内存← 正确答案
  • B.增加更多分片节点
  • C.改用 NoSQL 数据库
  • D.增加前端负载均衡器

答案:A。传统关系型数据库以纵向扩展为主,通过提升单机硬件性能来扩容。分片节点属于水平扩展,这是 NewSQL 的主场。改用 NoSQL 不是扩展方式,负载均衡解决的是流量分发而非数据容量问题。

Q2. 下列哪个是 NewSQL 的典型代表?

单选题 · easy

  • A.Redis
  • B.MongoDB
  • C.TiDB← 正确答案
  • D.HBase

答案:C。TiDB 是典型的 NewSQL 数据库,支持 SQL 和分布式事务。Redis 是缓存数据库,MongoDB 是文档型 NoSQL,HBase 是列式 NoSQL,它们都不以 SQL 和 ACID 事务为核心。

Q3. NewSQL 保留传统关系型数据库的哪种核心体验?

单选题 · easy

  • A.NoSQL 数据模型
  • B.SQL 与 ACID 事务← 正确答案
  • C.Redis 缓存语义
  • D.列式存储压缩

答案:B。NewSQL 的使命就是“分布式架构 + 熟悉体验”,核心是继续提供 SQL 查询与 ACID 事务。NoSQL 模型、缓存语义和列式压缩都不是它强调的保留能力。

Q4. 在 Raft 共识协议中,3 副本集群需要几个副本确认即可提交写入?

单选题 · mid

  • A.只需 1 个
  • B.至少 2 个← 正确答案
  • C.必须 3 个
  • D.无需确认

答案:B。多数派公式 \(M = \lfloor n/2 \rfloor + 1\),3 副本时 \(M = 2\)。多数派机制既能容忍单副本故障,又能避免脑裂,是分布式一致性的核心。

Q5. 在迁移到 NewSQL 的过程中,降低业务中断最稳妥的方案是?

单选题 · mid

  • A.全量停机导数据
  • B.双写并逐步切换← 正确答案
  • C.删库重建再导入
  • D.夜间批量跑脚本

答案:B。双写过渡让新旧库同时写入,流量可以小步切换,发现问题随时回退,是风险最低的迁移方式。全量停机、删库重建和夜间批跑都会造成较长时间不可用或不可逆风险。

Q6. 批量写入提升性能的主要原因是?

单选题 · mid

  • A.降低了网络往返次数← 正确答案
  • B.强制了主键唯一约束
  • C.增加了数据库锁粒度
  • D.自动生成了 SQL 语句

答案:A。批量写入把多条插入合并成一次请求,显著减少网络往返。它不涉及主键约束、锁粒度调整,也不会自动生成 SQL。

Q7. 下列哪些业务特点更适合选择 NewSQL?

多选题 · mid

  • A.单机 QPS 逼近上限← 正确答案
  • B.需要跨节点事务强一致← 正确答案
  • C.小团队缺乏运维能力
  • D.写入量随业务持续猛增← 正确答案

答案:ABD。单机打满、需要分布式强一致、写入量快速上涨,都指向水平扩展与强一致的 NewSQL 优势区。团队缺乏运维能力反而是减分项,NewSQL 的运维复杂度高于单机数据库。

Q8. 5 副本集群中,Raft 多数派仲裁需要几个副本?

单选题 · hard

  • A.2 个
  • B.3 个← 正确答案
  • C.4 个
  • D.5 个

答案:B。根据多数派公式,5 副本时 \(M = \lfloor 5/2 \rfloor + 1 = 3\)。它允许最多 2 个副本故障而不影响写入提交,是“多数派冗余”思想的体现。

Q9. 关于传统关系型数据库的分布式扩展,以下哪些说法是错误的?

多选题 · hard

  • A.主从复制可线性扩展写入能力← 正确答案
  • B.全局强一致只能存在于单机
  • C.传统数据库无法水平扩展← 正确答案
  • D.传统数据库无法多副本高可用← 正确答案

答案:ACD。主从复制主要扩展读,写入仍集中在主节点,不能说线性扩展写入;传统数据库可以通过分库分表等方案实现有限水平扩展,也可以通过主从复制实现高可用。因此 A、C、D 都是错误说法,B 是相对正确的描述。

Q10. 某系统需要 3 台数据库服务器,单台硬件成本 10 万元,每年运维成本为硬件成本的 20%,若只计 5 年且运维占比不变,总拥有成本 TCO 是多少?

单选题 · extreme

  • A.30 万元
  • B.60 万元← 正确答案
  • C.90 万元
  • D.75 万元

答案:B。硬件成本 \(3 \times 10 = 30\) 万元;年运维成本 \(30 \times 20\% = 6\) 万元;5 年维运 \(6 \times 5 = 30\) 万元;总 TCO \(30 + 30 = 60\) 万元。这是 TCO 公式 \(C_{\text{server}} \times N + C_{\text{ops}} \times N \times T\) 的直接应用。