NoSQL出现的主要原因:
数据库集群水平扩展
数据分布:
1 复制 :将同一份数据拷贝到多个节点,a 主从式 b 对等式
2 分片 : 将不同数据存放在不同节点中
两者可选其中之一,也可同时使用
单一服务器:
可接受单点故障时使用
分片:
什么是分片:What
将数据的各个部分存放于不同服务器:
1 写:哪个数据应该写在哪个服务器可以通过:取模等算法确定
2 读:读数据时也要根据该算法确定数据在哪个服务器上,请求该服务器
为什么用分片:Why
分片优势
1 提升读取、写入效率
2 单节点故障,其他节点依旧可用,异地多活(如果有节点存全量数据 则故障节点自动摘除指向全量节点即可)
分片劣势
降低错误恢复能力:将一台机器拆分出多个分片。多个机器比一个机器故障概率高。
如何使用分片更加合理: How
1 理想情况:每个用户只需要与一台服务器通信
为了实现理想情况,需要同时访问的数据都在同一个节点上。怎么存放数据来保证用户只需从一个节点获取数据?
答案:使用面相聚合的数据库,把经常需要同时访问的数据放在一起。
比如外卖系统,运单按城市维度分片(写),调度时按城市维度调度(读) 只请求一个分片节点即可
2 负载均衡
把聚合数据均匀地分布在各个节点中,不同节点间处理的负载量相等。
3 分片策略
用户代码逻辑实现:应用程序代码与数据存储逻辑耦合。如需增加分片需要1 修改代码 2 迁移数据
中间件自动分片:中间件自己负责吧数据分布到各分片上,减少应用程序代码修改的开销。