00:00
大家好,我是nightkiller,在前面的视频当中分享了多维度架构之日志,最近我在知乎上有一篇关于分库分表的回答火了,今天我就来分享一下多维度架构之分库分表。分库分表是架构的必经之路,很多系在设计之初就没有考虑过后期的分库分表,甚至开发团队没有架构师和DBA,同时开发团队也比较年轻,对于数据库的架构定义非常随意,满足当前需求即可,上线即可导致后面无穷无尽的优化。数据库结构的定力等同于建筑里面的地基,如果地基没有打好,后面的优化都是徒劳的。
01:00
最终不得不重构数据库结构。数据的切分策略有两种方式,分别是水平横向切分和垂直纵向切分。采用的技术手段大概有四种方式,分别是通过类比啊、范围、哈希值、冷热数据等等。类别是指把不同类别的数据放在不同的表中,范围是指序列的起始位置和终止位置,或或者是时间和日期的区间,哈希值的方法是指经过哈希运算以后,将数据放入哈希槽内。冷热数据是指当前频繁访问的数据为热数据,不常访问的数据为历史数据,是冷数据。关于水平切分跟垂直切分,网上一直有两种说法,有些人认为基于行的操作是垂直切分。
02:01
剧烈的操作是水平切身,而我刚刚想反,我认为这是观察角度的问题,所以不要在这上面纠结,只要你理解就可。一旦我们使用了分库分表这种技术,后面很多技术就受到了影响,技术上就要妥协。那么分库分表会带来哪些问题呢?首先遇到的问题就是索引问题,因为被分表,所以索引是不连续的,即使使用数据库自带的分区表,很多索引技术也是受到限制的,例如复合索引跟唯一索引无法使用。第二个问题就是查询变得复杂了,在此之前一条SQL语句就可以完成查询,现在必须做复杂的连接操作,还有合并结果集。不仅如此,就连counter操作跟排序也受到了影响。如果是分库,还会影响到主键跟外键,逐键无法使用。
03:01
你不得不在程序中产生唯一ID,例如UID或石化算法等。同时受到影响的还有实物处理,此时你不得不引入分布式事物来解决事物的问题。所以分库分表我们必须慎重考虑。你在网上可以看到很多关于丰富寻找的技术文章。但是几乎都是从技术角度出发,例如如何解决数据存储的压力,提高查询性能。在企业的招聘面试中,我发现很多架构师对分库评表也准确的在做数据库中心建的理解及应用上,本质上还是从技术思维角度去缩小结果记忆。奥立的讲,一些尺寸较大的表独立成新表,以降低单个表的容量尺寸。多维度架构思想是如何分表的呢?由于我既负责产品,也负责架构相关的工作,长期工作中总结出一套分户分表的策略。我的分库分表策略是从UI角度出发,从业务流角度出发。下面我会用例子给大家演示如何从UI和业务流程角度去分库分表。JUI的数据库分库分表我们这里举一个用户登录的例子,用户登录通常分成两个步骤,第一个步骤是输入用户名、密码,提交验证是否通过,第二个界面通常是显示用户的资料。目前主流的产品设计中,通常用户登录界面只有用户名和密码,所以这个登录的业务逻辑通常只访问user表,只提用户名的密码,只有在登录成功之后才会继续提取用户的基本信。
04:52
所以我把表设计成这样,Number这个表通常是用来存储用户名、密码的,状态这个字段是用来判断用户是否被冻结,Profile file表是用来存储用户基本资料的,通常只有登录成功之后才会访问两张表,通过外键一对一约束,保证没有脏数据。再举一个例子,例如即时通信软件,每个用户之间的数据是隔离的,不产生交集。这种情况我们就可以将用户的数据分配到指定数据库,此后用户产生的所有数据都在该数据库。
05:31
你也可以理解为基于数据库的用户隔离。我们应该避免的是用户的数据分散到其他数据数据。例如NEO跟net k这两个用户,它的开头字母是N,会被分配到N的数据库当中,而杰瑞跟jimm基于策略会被分配到另一个数据库当中,一旦用户登录,便被锁定到指定的数据库当中。接下来的所有操作用户产生的数据。
06:00
都将存储在这个数据库当中,因为用户数据没有跨库,所以不影响索引外键触发器存储过程事物处理的正常使用。下面我们再举一个例子,商品信息表的数据量非常大,我们可以基于品类进行分库分表。产品的UI设计当中,通常只有主页才聚合所有的商品信息,进入分类页面以后,数据会逐渐的成豆斗状,不断的缩小,结果集用户的操作被逐渐引导到我们希望呈现的页面,特定的页面只会访问特定的数据库跟特定的表,这就是从业务流程角度进行分库分表,数据库是服务于业务逻辑的。最后谈一谈分区表,分区表是数据库提供的一种方案,这种方案可以大大提高数据的存储跟查询性能,优点是表的名称不变。
07:01
缺点是什么呢?前提你必须有自己的独立机房去部署独立的数据库服务器,在云主机上,这种技术是受到限制的。最后我们来做个总结吧,数据库的分库分表并不是简单的切割,而是要从业务逻辑角度出发,从产品经理的视角,你需要展示什么样的数据,什么样的数据能更好的服务于UI,或者说我们设计什么样的UI才能更好的展现数据?多维度架构的核心就是跨界。用跨界知识来解决架构中存在的问题,多维度架构之分不分表今天就讲到这里,有什么问题可以在评论区留言,我会根据评论区的留言反馈决定下一期视频的主题是什么。喜欢我的视频请关注点赞转发,谢谢观看。
我来说两句