隔离级别
| 方案 | 隔离性 | 代价 |
|---|---|---|
| 每租户独立库 | 强,备份与恢复可按租户做 | 连接池、监控与升级操作成倍增加 |
| 独立集合/索引 | 中,按租户精细管理 | 集合/索引数量随租户增长 |
| 共享 + tenantId | 靠过滤条件与权限兜底 | 需要统一入口强制注入并防热点租户 |
共享结构(MongoDB 示例)
共享结构(MongoDB 示例)
// 查询必须带 tenantId,索引以 tenantId 为前缀
db.orders.find({ tenantId: "t42", status: "open" }).sort({ createdAt: -1 })
db.orders.createIndex({ tenantId: 1, createdAt: -1 })
// 视图兜底:把租户过滤固化成视图供上层使用
// db.createView("orders_t42", "orders", [{ $match: { tenantId: "t42" } }])搜索引擎侧常用 routing 参数把同租户文档路由到同一分片组,减少查询扇出;租户间规模差异大时给大租户单独开索引或独立集群。