关于数据库和分库分表
基础应用:
-
“为什么要对MySQL进行分库分表?你们是按照什么维度分的?(例如:用户ID)”
深入原理:
-
“分库分表之后,你们是怎么处理全局唯一ID的?(Snowflake算法等)”
-
“分库分表后的查询(比如非分片键查询)怎么处理?”
一、基础应用
1.“为什么要对MySQL进行分库分表?你们是按照什么维度分的?(例如:用户ID)”
因为现在的业务发展和用户量增加,单个数据库实例无法承受大量并发请求和数据存储压力。
因此需要分库分表来提升系统性能和可扩展性。
使用用户ID来分,对用户ID进行哈希,将不同用户的数据分散到不同的数据库实例中,
二、深入原理
1.“分库分表之后,你们是怎么处理全局唯一ID的?(Snowflake算法等)”
简单来说,我们使用的是Snowflake算法来生成全局唯一ID。
就是给每个服务分配一个不同的机器ID,比如用户服务是1,视频服务是2这样。然后通过时间戳、机器ID和序列号组合起来生成一个64位的ID。这样即保证了全局唯一,又避免了不同服务之间的ID冲突。
而且这个ID还是递增的,对数据库性能友好。我们就是在用户注册或者发布视频的时候,用这个算法自动生成ID的。
2.“分库分表后的查询(比如非分片键查询)怎么处理?”
我们主要采用了全局索引表方式处理。
比如用户登录时,用户可能通过用户名或邮箱登录,但我们是按用户ID分片的。这时候我们会先查全局索引表找到用户ID,再通过用户ID去对应的分片查询用户详细信息。