• springboot


    1)使用场景
    对于Mysql主从复制实现读写分离来说,可以解决读的扩展性问题。但是写的话,面对庞大的数据量还是集中在Master上,并且Master挂载的slave不可能无限制多,因为slave依赖于Master的能力和负载的限制。因此需要对Master进行扩展来实现海量数据的需要。

    2)分表
    对于访问极为频繁,数据量又极大的表来说,最直接做的就是减少数据量的总条数,以便减少数据查询所需要的时间,可以对大数据表进行分表。
    分表策略:用id来进行分表是最为常见的策略,因为大部分查询都要带上id,又不影响查询又能使得数据均衡的分布在各个表中。假设有一个订单表有1000w条数据,将该表分成16个表,将id%16进行存储,如果id不是数字可以先hash取值。拆分的记录根据取余的值进行存储,App应用根据取余的值进行表的访问。

    3)分库
    分表能解决数据量过大造成的查询效率低下的问题,但是无法有效提示数据的并发访问能力。将数据库拆分,提高数据库的写入能力就是所谓的分库。
    与分表类似,分库策略可以通过对某一个字段如id进行取余操作,来对数据访问进行路由。如id=19,分成3个库,19%3=1,这时候就路由到第一个库。

    4)sharding-jdbc 实现分库分表

    sharding-jdbc 最先是当当网开源代码,后来被Apache集成。
    sharding-jdbc能帮我们实现什么:
    1,保证事务一致性(跨库)
    2,支持分页查询(跨库)
    3,只要重配数据源,其他代码不需要改动

    pom.xml 模块,引入jar 

     1 <dependency>
     2    <groupId>io.shardingjdbc</groupId>
     3    <artifactId>sharding-jdbc-core</artifactId>
     4    <version>2.0.3</version>
     5 </dependency>
     6 <dependency>
     7    <groupId>com.alibaba</groupId>
     8    <artifactId>druid</artifactId>
     9    <version>1.1.3</version>
    10 </dependency>
    11 <dependency>
    12    <groupId>commons-dbcp</groupId>
    13    <artifactId>commons-dbcp</artifactId>
    14    <version>1.4</version>
    15 </dependency>

    demo链接:
    链接:https://pan.baidu.com/s/1DPArC6hz3PmnSmSKc9KhmQ
    提取码:ads6

  • 相关阅读:
    周记 2016.3.29
    Java ActiveMQ 讲解(一)理解JMS 和 ActiveMQ基本使用(转)
    聊聊架构01
    乐观锁和悲观所
    数据库锁(转)
    ActiveMQ消息的可靠性机制(转)
    DOM
    JavaScript
    CSS之background
    CSS之overflow
  • 原文地址:https://www.cnblogs.com/xiexy/p/10483579.html
Copyright © 2020-2023  润新知