本帖最后由 谷粒姐姐 于 2018-2-26 16:42 编辑
什么是数据库分片 简单来说,就是指通过某种特定的条件,将我们存放在同一个数据库中的数据分散存放到多个数据库上面,以达到分散单台设备负载的效果。 数据的切分(Sharding)根据其切分规则的类型,可以分为两种切分模式。 1.一种是按照不同的表来切分到不同的数据库(主机)之上,这种切可以称之为数据的垂直切分 2.另外一种则是根据表中的数据的逻辑关系,将同一个表中的数据按照某种条件拆分到多台数据库上面,这种切分称之为数据的水平切分。 如何实现数据库分片 当数据库分片后,数据由一个数据库分散到多个数据库中。此时系统要查询时需要切换不同的数据库进行查询,那么系统如何知道要查询的数据在哪个数据库中?当添加一条记录时要向哪个数据库中插入呢?这些问题处理起来都是非常的麻烦。 这种情况下可以使用一个数据库中间件mycat来解决相关的问题。 什么是Mycat? 简单的说,MyCAT就是:一个新颖的数据库中间件产品,支持mysql集群,提供高可用性数据分片集群。你可以像使用mysql一样使用mycat。对于开发人员来说根本感觉不到mycat的存在。 Mycat读写分离数据库读写分离对于大型系统或者访问量很高的互联网应用来说,是必不可少的一个重要功能。对于MySQL来说,标准的读写分离是主从模式,一个写节点Master后面跟着多个读节点,读节点的数量取决于系统的压力,通常是1-3个读节点的配置 单点登录系统 主要解决的是Session共享的问题。 1、使用redis管理Session。 1)key:token 2)value:用户信息 3)可以需要设置有效期。 4)需要把token保存到cookie中。 购物车 1、未登录:使用cookie保存购物车数据 2、登录后:把购物车数据保存到redis。 2、购物车合并,应该以服务端的购物车为准。 电商活动倒计时方案:1、确定一个基准时间。可以使用一个sql语句从数据库中取出一个当前时间。SELECT NOW(); 2、活动开始的时间是固定的。 3、使用活动开始时间-基准时间可以计算出一个秒为单位的数值。 4、在redis中设置一个key(活动开始标识)。设置key的过期时间为第三步计算出来的时间。 5、展示页面的时候取出key的有效时间。Ttl命令。使用js倒计时。 6、一旦活动开始的key失效,说明活动开始。 7、需要在活动的逻辑中,先判断活动是否开始。 秒杀方案:8、把商品的数量放到redis中。 9、秒杀时使用decr命令对商品数量减一。如果不是负数说明抢到。 10、一旦返回数值变为0说明商品已售完。 由于宜立方商城是基于SOA的架构,表现层和服务层是不同的工程。所以要实现商品列表查询需要两个系统之间进行通信。 如何实现远程通信? 1、Webservice:效率不高基于soap协议。项目中不推荐使用。 2、使用restful形式的服务:http+json。很多项目中应用。如果服务太多,服务之间调用关系混乱,需要治疗服务。 3、使用dubbo。使用rpc协议进行远程调用,直接使用socket通信。传输效率高,并且可以统计出系统之间的调用关系、调用次数。 什么是dubboDUBBO是一个分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案 Dubbo就是资源调度和治理中心的管理工具。
|