我举个例子:如何设计用户表? 可能会有问题的设计: 所有数据都丢在一张表。很明显随着数据量的增大,这里会成为 Block 系统的点 良好的设计:按照 userId or phone number 进行分库分表,然后数据聚合到 ES 或者其他系统方便进行模糊查询,最后将数据同步到 Hive 中,可以进行大数据分析。(问题:常见的分库分表算法有哪些?如何防止数据倾斜?如何保证数据一致性?如何保证数据安全?如何保证系统平滑的扩容、缩容?) 根据业务的设计:主要访问来自于 C 端还是 B 端。未来是否需要支持单点登录、第三方登录。根据业务的不同,你又可以去做针对性的优化,比如数据库的反范式,多级缓存的设计 。 最后,这只适用于面试。实际情况是:一个系统可能连 1w 个用户都没有,并发也都是个位数。