全部学科
Python全栈
python
NodeJS全栈
nodejs
小程序首页
📝 1 篇文章 20 道配套习题

分库分表与多租户专题

专题说明

本专题深入讲解GORM在分库分表、多租户架构中的实战应用,涵盖动态数据源、分片策略、租户隔离等企业级分布式数据库方案。

学习目标

  1. 掌握分库分表的核心概念与GORM实现方案
  2. 学会多租户架构下的数据隔离策略
  3. 理解动态数据源切换与分片路由机制

学习内容

本专题涵盖以下知识点:

  • 分库分表策略(水平/垂直拆分)
  • 多租户架构(Schema隔离/字段隔离)
  • 动态数据源管理
  • 分片键设计与路由算法
  • 跨库查询与分布式事务

学习建议

  1. 先理解单库架构的局限性,再学习分库分表的必要性
  2. 重点掌握租户隔离的三种实现方式及其适用场景
  3. 结合实际业务数据量评估分片策略

📝 发现内容有误?点击此处直接编辑

📝 配套习题(20 题)

1
单选题

在 GORM 中,如何实现按时间分表(如按月分表)?

A

使用 Table 方法动态切换表名

B

使用分区表功能

C

使用多数据源

D

GORM 不支持分表

2
多选题

以下哪些场景适合使用分表策略?

A

日志数据按月份存储

B

订单数据按年份归档

C

用户数据按地区分布

D

单表数据量超过千万级

3
填空题

分表后查询需要____________或使用________确定目标分表,避免全表扫描。

4
单选题

GORM 如何实现分库路由(根据业务规则路由到不同数据库)?

A

使用 Resolver 配置多数据源

B

使用 Table 方法

C

使用 Raw 方法

D

GORM 不支持分库

5
多选题

以下哪些场景适合使用分库策略?

A

多租户数据隔离

B

读写分离

C

不同业务模块独立存储

D

单表性能优化

6
单选题

GORM 实现多租户数据隔离的最佳方式是?

A

每个租户一个数据库

B

所有租户共用表,使用 tenant_id 过滤

C

使用不同的表前缀

D

以上都可以

7
多选题

使用 tenant_id 实现多租户隔离时,应该如何处理?

A

在钩子中自动设置 tenant_id

B

在所有查询中自动添加 tenant_id 条件

C

使用 GORM 的 Scope 功能

D

手动在每个 SQL 中添加

8
单选题

跨库事务的主要挑战是什么?

A

无法保证 ACID 特性

B

需要使用分布式事务协议

C

性能开销大

D

以上都是

9
多选题

以下哪些是实现跨库事务的常见方案?

A

两阶段提交(2PC)

B

TCC 补偿事务

C

本地消息表

D

Saga 模式

10
填空题

跨库事务通常放弃强一致性,改用__________,通过________________保证数据最终一致。

11
单选题

GORM本身不内置分库分表功能,在实际项目中实现分库路由配置,以下哪种方案最合理?

A

使用GORM的多数据库连接,在应用层根据分库键手动选择对应的DB实例

B

修改GORM源码,在Callback中自动路由到不同的数据库

C

使用ShardingSphere等数据库中间件,对应用透明地实现分库路由

D

为每个分库创建独立的GORM模型,通过不同的tag指定数据库

12
多选题

在GORM应用中配置分库路由时,关于分库键(Sharding Key)的选择,以下哪些原则是正确的?

A

分库键应该是查询中最常用的过滤条件,如用户ID、租户ID

B

分库键的值分布应该均匀,避免数据倾斜

C

分库键一旦选定就不能更改,因此应该选择业务稳定不会变更的字段

D

应该选择更新频繁的字段作为分库键,确保数据分布均衡

13
判断题

可以通过实现GORM的Resolver接口,在Resolve方法中根据分库键动态返回不同的*gorm.DB实例,从而实现应用层分库路由。

A

B

14
填空题

在GORM分库路由配置中, 通常使用________________的方式将分库键映射到具体的分库,对于时间序列数据适合使用_________的分区策略,对于用户数据适合使用__________算法便于扩容。

15
单选题

使用GORM操作分库数据时,以下哪种查询方式的性能最差?

A

根据分库键精确查询,路由到单个分库执行

B

不带分库键的全表查询,需要广播到所有分库并聚合结果

C

根据分库键范围查询,可能涉及多个分库但数量有限

D

在应用层缓存分库映射,减少路由计算开销

16
多选题

在GORM实现分库路由时,关于连接池管理,以下哪些做法是正确的?

A

为每个分库创建独立的连接池,通过分库键路由到对应的连接池

B

所有分库共享同一个连接池,由数据库中间件负责路由

C

动态创建和销毁分库连接池,根据流量自动扩缩容

D

连接池的MaxIdleConns和MaxOpenConns应该根据分库数量和业务负载综合配置

17
单选题

在GORM分库架构中,关于主键ID的生成策略,以下哪种方案最适合?

A

使用数据库自增主键,每个分库独立维护自己的ID序列

B

使用UUID作为主键,完全避免ID冲突

C

使用分布式ID生成器(如Snowflake),确保全局唯一

D

使用应用层计数器,集中管理ID分配

18
多选题

GORM分库架构需要扩容(增加分库数量)时,以下哪些数据迁移策略是合理的?

A

停机迁移:停止服务,重新分布数据到新的分库结构,完成后恢复服务

B

双写迁移:新旧分库同时写入,逐步迁移历史数据,完成后切换读路由

C

在线迁移:通过后台任务逐步迁移数据,迁移期间路由到新库

D

只迁移热点数据,冷数据保留在原分库不迁移

19
填空题

分库路由配置中应该实现________,当某个分库不可用时,可以通过________返回________________,并记录____________触发告警。

20
单选题

在GORM分库路由的测试中,以下哪种测试策略最有效?

A

只测试路由逻辑,不测试实际的分库数据库

B

为每个分库创建测试数据库,在集成测试中验证路由和CRUD操作

C

使用Mock数据库模拟分库行为,避免真实的数据库依赖

D

只在生产环境验证分库路由,测试环境无法模拟

← 上一个专题 关联关系管理专题
下一个专题 → 安全与数据保护专题

📝 发现内容有误?点击此处直接编辑

想查看更多习题和详细解析?
小程序提供完整的题库和详细解析

长按或扫描二维码,立即体验

扫码体验小程序
马上就来
使用微信扫描二维码
立即体验完整题库