大数据架构--- 数据库分片

         # 数据库分片(Sharding)

📖大数据

前言:

大数据时代,各种框架、技术栈层出不穷,基于数据的应用开发。传统的系统在业务需求不断增大的情况下,最终都需要扩容来满足流量的高速增长。首先离不开数据,在大量数据的情形下,传统的关系型数据库很难满足高并发的CRUD,分片数据库也应运而生。

什么是数据库分片

数据库分片也叫水平分片,将整体存储在单个数据库中的数据,通过某种策略分摊到多个表结构或者相同的数据库中的数据,以这种方式每个数据库中的数据就会相对减少,从而可以实现数据库的水平扩展,在理论上这样的数据就会实现无限横向扩展。

主从数据库:

在开发初期,单个数据库的最大缺点就是由于某些原因挂掉,就是导致整个系统出现宕机的情况,为了保持数据的高可用性,通常会在添加一个数据库形成主从关系(Master-Slave),所有的读写操作都在主数据库完成,主数据和从数据库之间进行同步,在主数据库遇到问题时,从数据库负责容灾。对性能并没有什么实质性的提升。

读写分离:

遇到第一次数据库性能问题时,最先想到的方法就是应该读写分离,从而提高系统的性能,将所有的写操作都放在主数据库上,从而减少主数据的压力,而且大多数情况下,对数据库往往是读多写少,所以在设计数据库时可以设置一主多从的方案进一步减少数据库的操作压力。

缓存

读写分离是通过多个读库,从而分摊数据库的读压力,而缓存则是通过将查询结构化进行缓存,从而减少了查询对数据库的查询操作,

数据库分片策略比较

在定义中有提到过将数据按照某种策略进行分片,根据应用的场景不统,我们需要选用不统的分片策略,常见的分片策略:

  1. 基于Id的区间分片,例如将Id为1-2w的数据存在A数据库,2w-4w的数据存在B数据库。此种方法需要预估单库能承受的数据量,如果预估的不准确容易造成性能的不够用或者浪费。
  2. 基于Id的Hash分片,此方法类似于HashMap,通多hash计算,将具有相同Hash值的数据放到同一个数据库中,例如id%2=0 放到A数据库,id%2=1 放到B数据库,缺点在于当在现有的数据库的基础上添加新的数据库,会导致计算Hash 方法的变化,例如,在原有A、B数据库的基础上添加新的数据库C,此时计算Hash的方法就会由原来的id%2变化为id%3,从而需要对原有的数据进行迁移。
  3. 冷热分离 或者 基于时间的分片,基于越新的数据操作的几率越大,老数据不会被操作。例如可以将2020年的1-6月的数据存储到A库中,7-12月的数据存储到B库中,这种方法适合微博等以时间线功能为主的软件。此方法在查询时需要额外提供数据的创建时间。
  4. 基于检索表分片,类似与图书馆藏书,我只需要通过书名就可以精确的找到该书在具体的哪一层。通过建立一张检索表保存id与数据库节点的对应关系,为了提供性能,往往将检索表放置在缓存数据库中。

总结

猜测(由于刚看一点大数据相关的内容,此部分后面会进行修改):在大数据项目中,由于数据仓库等的应用,分片技术应该不断的被取缔

参考:

1. http://sicenjus.com

​ 2. 《大数据系统架构》

posted @ 2020-03-29 02:56  今夕何夕兮  阅读(705)  评论(0编辑  收藏  举报