多租户系统通过每单表的个tenant_Id字段区分不同的租户信息,同一租户的数据能否实现co-location?

【TiDB 版本】
4.0

【问题描述】

背景

多租户系统通过每单表的tenant_Id字段区分不同的租户信息, 不同的租户信息之间没有关联.
由于租户比较多, 之前是根据tenant_Id分库+分表+分区方式来处理, 运维比较麻烦.

问题

尝试部署Tidb测试, 由于存在许多多表关联的查询, 发现性能比MySQL差几个数量级. 查询时大量的开销在网络IO上, 网卡使用率达90%以上.

原来分库分表因为同一个租户的数据都在同一个MySQL实例, 所以没有这些网络IO的开销.

现在的疑问是, 能否把同一个tenant_id的数据都保存到一起(如同一个tikv实例下)或者有没有更好的方案解决这个问题呢? 类似cockroachdb的interleave table


多谢各位, 祝新年快乐.

TiDB 并不是分库分表方式扩展数据的,所以没有类似于分片键的概念将同一个 tenant_id 的数据保存到一起
https://book.tidb.io/session1/chapter2/tidb-storage.html

你们这个集群是跨机房部署的吗?
关于多表关联查询性能不如 MySQL 的情况,可以开个 SQL 优化的帖子,提供下表结构、SQL 、执行计划等信息看下是否还有优化的空间。

非常感谢!

没有跨机房, 目前是同一个机架部署.
因为是遗留系统, 原先大量关联查询的SQL都没优化, 尝试过用优化后的SQL测试确实可以解决, 不过这部分工作量不小.

目前只能新系统先上Tidb再看看.

嗯嗯,TiDB 与 MySQL 兼容的话更多是协议以及语法的兼容。所以从 MySQL 迁移到 TiDB 的话可能还是会存在一些改造工作的,毕竟单机数据库与分布式数据的执行引擎以及优化器设计上是存在一些不同的。