全部学科
Python全栈
python
NodeJS全栈
nodejs

分库分表与多租户专题测试

20 题 50 分钟 难度:★★★

考察知识点

  • 水平分片与垂直分片
  • 分库分表路由策略
  • 多租户架构(共享表/隔离表)
  • 跨分片查询与聚合
💡 参考答案在文末
判断题
1

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

A

B

单选题
2

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

A

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

B

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

C

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

D

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

3

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

A

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

B

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

C

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

D

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

4

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

A

使用 Resolver 配置多数据源

B

使用 Table 方法

C

使用 Raw 方法

D

GORM 不支持分库

5

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

A

使用 Table 方法动态切换表名

B

使用分区表功能

C

使用多数据源

D

GORM 不支持分表

6

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

A

每个租户一个数据库

B

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

C

使用不同的表前缀

D

以上都可以

7

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

A

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

B

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

C

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

D

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

8

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

A

无法保证 ACID 特性

B

需要使用分布式事务协议

C

性能开销大

D

以上都是

9

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

A

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

B

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

C

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

D

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

多选题
10

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

A

在钩子中自动设置 tenant_id

B

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

C

使用 GORM 的 Scope 功能

D

手动在每个 SQL 中添加

11

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

A

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

B

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

C

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

D

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

12

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

A

多租户数据隔离

B

读写分离

C

不同业务模块独立存储

D

单表性能优化

13

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

A

日志数据按月份存储

B

订单数据按年份归档

C

用户数据按地区分布

D

单表数据量超过千万级

14

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

A

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

B

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

C

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

D

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

15

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

A

两阶段提交(2PC)

B

TCC 补偿事务

C

本地消息表

D

Saga 模式

16

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

A

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

B

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

C

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

D

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

填空题
17

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

18

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

19

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

20

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

参考答案
1.正确 2.C 3.B 4.A 5.A 6.D 7.B 8.D 9.C 10.A;B;C 11.A;B;C 12.A;B;C 13.A;B;D 14.A;D 15.A;B;C;D 16.A;B;C 17.哈希取模;范围划分;按月/按年 18.遍历所有分表;路由规则 19.容错机制;降级策略;默认值或缓存数据 20.最终一致性;补偿机制;重试机制
想在手机上练习这套试卷?
使用微信卷王开发者小程序,打开首页顶部扫码功能识别二维码
← 上一套试卷 关联关系管理专题测试
下一套试卷 → 安全与数据保护专题测试
扫码体验小程序
加载中
想在手机上刷题学习?
使用微信卷王开发者小程序,打开首页顶部扫码功能识别二维码