关于java web系统设计的一些点的思考总结

28 篇文章 1 订阅
8 篇文章 0 订阅

1.怎样提高数据库的读写能力?

 以Mysql,MongoDB为例,思想还是分流

  1. 提高读能力:主从复制,读写分离。集群中所有数据库数据是相同的,读请求被分流到集群中的任何一个数据库,这样自然增加了读能力。但是增加从数据库并不能增加写能力,反而在一定程度上降低了主数据的写能力,因为写操作都是在主数据库中进行的,每增加一个从数据库,从数据库要从主数据库同步数据,这样会占用主数据IO,从而降低主数据库写IO操作性能。
  2. 提高写能力:主从集群不能提高写能力,那么可以通过分片集群的方式分流写操作,从而提高写能力,例如mysql的分库分表,MongoDB也可以分库分表。

分库分表为了缓解数据库读写的压力,我们常说的分库分表具体怎么解释?分为两种,一种是垂直分库分表(垂直分库,水平分表) 按业务分库,按数据量分表(单表数据量),一种是水平分库分表:分表到不同数据库,而不是在一个数据库中分表。

  1.  分库:比如一个单体应用,有很多表,这些表都放在同一个数据库中,那么我们所有的读写压力都放到这一个数据库中,单数据库可能承受不了,那么我们可以考虑分库,例如按照订单、库存、支付、用户中心等不同业务,将不同业务的表放到不同的数据库中,达到缓解读写压力的目的。就跟我们微服务分项目类似。最终把一个大的库拆分为多个库。
  2. 分表:是指单表的数据量达到了上限(比如2000万),虽然理论上没有上限,但是达到一定数据量后,对单表的读写会变得很慢,这个时候就要考虑分表了。mysql是单表的容量,整体的容量是无限的。分表之后这些表一般还是在同一个数据库中(当然数据库压力大的时候,也可以放到其它数据库中)。一般涉及到分表的情况,都是数据量很大,增量也很大,但是查询很简单的情况,例如运单表,我查询的时候只查一个运单号就行了。
  3. MogoDB、mysql等的分片一般指分表,当然也可以分库
  4. 分库分表需要指定分库、分表键,可以使用单字段,也可以使用组合字段

水平分库分表的做法,把单张表的数据按照一定的规则分布到多个数据库。

2.数据库基础知识

1.索引覆盖与回表查询

文章:MySQL(Innodb)索引的原理_知难行难1985的博客-CSDN博客

Mysql数据库,且使用的搜索引擎为innodb引擎,建立了聚簇索引(例如主键索引)和非聚簇索引,通过聚簇索引可以查出来一条数据。通过非聚簇索引查询,找到的数据只有部分字段(索引字段和主键索引的id),如果要查找完整信息,需要先根据主键索引的id查询到对应的聚簇索引的值,然后在聚簇索引中查询到完整的信息。
索引覆盖:如果通过非聚簇索引所要查询的字段,完全包含在非聚簇索引自身,就不会再去聚簇索引中查询,而是直接可以返回结果。

回表查询:如果非聚簇索引中的信息不完整,则会通过聚簇索引去获取数据信息,这种情况就被称为回表查询。

2.MongoDB

MongoDB比较吃内存,因为要把索引等数据加载到内存中 

3.大数据量存储与查找

1.ES

如果数据量非常大,而且查询条件非常复杂,几乎无法做索引的情况下,不管用mysql还是MongoDB去存储数据,查找的时候都会非常慢,只能用ES来做,例如天眼查、淘宝、京东查找商品等:

4.MQ的使用

电商系统中,大量的订单都是先进入MQ,然后很多系统去消费它。还有库存、积分、运单等的处理都是异步的。 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值