分布式数据库的CPA

来源于尚硅谷谷周阳

C:Consistency (强一致性)
P:Partition tolerance(分区容忍性)
A:Availability ( 可用性)

ConsistencyAvailabilityPartition tolerance
Every read receives the most recent write or an error (每次都读取到最新数据Every request receives a (non-error) response – without guarantee that it contains the most recent write(可以收到响应,不保证包含最新数据The system continues to operate despite an arbitrary number of messages being dropped (or delayed) by the network between nodes(分布式

CPA 的3进2

CAP理论就是说在分布式存储系统中,最多只能实现上面的两点。

而由于当前的网络硬件肯定会出现延迟丢包等问题,所以只能满足两点。
分区容忍性是我们必须需要实现的,因为要实现分布式。

所以我们只能在一致性可用性之间进行权衡,没有NoSQL系统能同时保证这三点。

C:强一致性 A:高可用性 P:分布式容忍性

CA 传统Oracle数据库

AP 大多数网站架构的选择(分布式、高可用性)

CP Redis、Mongodb(分布式、强一致性)

注意:分布式架构的时候必须做出取舍。一致性和可用性之间取一个平衡。大多数web应用,其实并不需要强一致性。
因此牺牲C换取P,这是目前分布式数据库产品的方向

一致性与可用性的决择

对于web2.0网站来说,关系数据库的很多主要特性却往往无用武之地

数据库事务一致性需求
  很多web实时系统并不要求严格的数据库事务,对读一致性的要求很低, 有些场合对写一致性要求并不高。允许实现最终一致性。

数据库的写实时性和读实时性需求
  对关系数据库来说,插入一条数据之后立刻查询,是肯定可以读出来这条数据的,但是对于很多web应用来说,并不要求这么高的实时性,比方说发一条消息之 后,过几秒乃至十几秒之后,我的订阅者才看到这条动态是完全可以接受的。

对复杂的SQL查询,特别是多表关联查询的需求
  任何大数据量的web系统,都非常忌讳多个大表的关联查询,以及复杂的数据分析类型的报表查询,特别是SNS类型的网站,从需求以及产品设计角 度,就避免了这种情况的产生。往往更多的只是单表的主键查询,以及单表的简单条件分页查询,SQL的功能被极大的弱化了。

CAP理论的核心是:

一个分布式系统不可能同时很好的满足一致性,可用性和分区容错性这三个需求,最多只能同时较好的满足两个。

因此,根据 CAP 原理将 NoSQL 数据库分成了满足 CA 原则、满足 CP 原则和满足 AP 原则三 大类:
CA - 单点集群,满足一致性,可用性的系统,通常在可扩展性上不太强大。
CP - 满足一致性,分区容忍性的系统,通常性能不是特别高。
AP - 满足可用性,分区容忍性的系统,通常可能对一致性要求低一些。

经典CPA图

在这里插入图片描述
在这里插入图片描述

BASE

BASE就是为了解决关系数据库强一致性引起的问题而引起的可用性降低而提出的解决方案。

BASE其实是下面三个术语的缩写:
基本可用(Basically Available)
软状态(Soft state)
最终一致(Eventually consistent)

它的思想是通过让系统放松对某一时刻数据一致性的要求来换取系统整体伸缩性和性能上改观
为什么这么说呢,缘由就在于大型系统往往由于地域分布和极高性能的要求,不可能采用分布式事务来完成这些指标,要想获得这些指标,我们必须采用另外一种方式来完成,这里BASE就是解决这个问题的办法

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java分布式数据库是一种能够实现数据存储和访问在多个节点上的数据库系统。它可以在多个服务器上进行水平扩展,提供更好的性能和可扩展性。 Java分布式数据库具有以下特点: 1. 数据分布:Java分布式数据库将数据分布在多个节点上,每个节点负责一部分数据存储和查询操作。这样可以提高数据的并行处理能力,提高系统整体的吞吐量。 2. 数据复制:Java分布式数据库可以将数据复制到多个节点上,提供数据冗余和容灾功能。即使一个节点发生故障,系统仍然能够正常工作,提高了系统的可用性。 3. 数据一致性:Java分布式数据库通过使用分布式事务和一致性协议来保证数据的一致性。当数据发生更新时,分布式数据库会自动同步数据到其他节点,确保数据的一致性。 4. 分布式查询:Java分布式数据库可以将查询操作分发到多个节点上并行执行,提高查询的性能。同时,它还能够自动合并和返回查询结果,使得对用户来说具有透明性。 5. 负载均衡:Java分布式数据库可以根据节点的负载情况自动进行负载均衡,确保每个节点的负载均衡,提高系统的整体性能。 总的来说,Java分布式数据库通过数据分布、数据复制、数据一致性分布式查询和负载均衡等功能,实现了数据在多个节点间的高效和可靠存储和访问。这对于大规模数据存储和高并发访问的应用场景非常有用。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值