DBMS 中的一致性2024 年 8 月 28 日 | 阅读 6 分钟 引言数据库系统中的一致性是指任何给定的数据库事务只能以允许的方式更改受影响的数据。为了使数据库保持一致,写入数据库的数据必须符合所有规定的规则,包括约束、级联、触发器或任何组合。 一致性还意味着对一个表中的单个对象所做的任何更改都必须反映在该对象出现的所有其他表中。继续以驾驶执照为例,如果新驾驶员的家庭住址发生变化,则此更改必须显示在以前存在旧地址的所有表中。当一个表包含旧地址而其他表包含更新后的地址时,就会发生数据不一致。 一致性不能以应用程序员可能期望的所有方式(这是应用程序级代码的责任)确保事务的正确性。相反,一致性确保编程错误不会违反已建立的数据库约束。 DBMS 中一致性的重要性一致的数据是使数据库像时钟一样运行的原因。已建立的规则/值将不一致的数据排除在主数据库和副本之外,从而使其进程顺利运行。
数据库一致性管理着所有进入的数据。因此,当新数据添加时,数据库会发生变化,但这种变化是一致的,并且符合最初指定的验证规则。在当今的环境中,全球每天都根据数据库的明显一致性做出数十亿美元的决策。 当实时信息成为现代数字组织的新常态时,至关重要的是要建立验证方法,以使数据集不包含错误数据,因为这会增加延迟并使实时体验不那么真实。 强一致性与弱一致性
ACID 和 BASE 数据库一致性之间有什么区别?提供强一致性的关系数据库通常提供“ACID 保证”。ACID 是一个缩写,代表高度一致数据库的基本特征。 提供强一致性的关系数据库通常提供“ACID 保证”。ACID 是一个缩写,代表高度一致数据库的基本特征。
ACID 合规性是一个复杂且备受讨论的话题。本质上,它表示一个简单的承诺,即 READ 将提供最近成功 WRITE 的结果。虽然这看起来是一个简单的保证,但在具有多个集群(每个集群有多个节点)的全球分布式数据库结构中实现起来非常困难。 因此,符合 ACID 的数据库通常成本过高且难以扩展。 由于 SQL 数据库都在不同程度上符合 ACID,因此它们都具有相同的缺点。应该指出的是,某些 RDBMS 系统允许削弱 ACID 保证以减轻这些缺点。创建持久的分布式 SQL 数据库部署可能极其复杂且成本高昂。 因此,ACID 兼容数据库通常用于需要准确记录的金融交易。 与提供 ACID 保证的 SQL 不同,NoSQL 数据库提供 BASE 保证。 基本可用性 (Basic Availability):即使系统部分宕机,数据在大部分时间仍然可用。 软状态 (Soft state):副本不总是准确的。 最终一致性 (Eventual Consistency):数据会在某个时间点变得一致,但具体时间未知。
ACID 和 BASE 数据库一致性之间有什么区别?CAP 定理捕捉了数据库一致性的另一种解释。CAP 定理最初由 Eric Brewer 提出,它断言分布式数据存储不能同时提供以下三个要求中的两个以上 一致性 (Consistency):所有相同的查询都收到相同的响应。 可用性 (Availability):即使系统部分宕机,请求也能得到响应。 分区容错性 (Partition Tolerance):即使某些节点宕机,操作仍能继续运行。 根据 CAP 定理,任何数据存储都伴随着权衡。关系型和非关系型数据存储之间的主要区别在于可用性和一致性之间的权衡。(分区容错性有时被认为是实现妥协(允许最终一致性和提高可伸缩性)的必要条件) ScyllaDB 提供数据库一致性解决方案吗?ScyllaDB 与大多数非关系型数据库一样,采用“最终一致性”方法。最终一致性服务于不断增长的现代工作负载,这些工作负载主要依赖于可用性,而较少依赖于强大的D一致性保证。例如,对于隔离的数据中心来说,在由中断引起的分区期间继续接受读写通常更好。 ScyllaDB 的一致性是可调的;用户可以指定其事务应该有多一致。以下是两个这样的例子 一致性级别一致性级别是另一组预设变量,它们指定在事务被认为是有效之前,有多少副本或节点必须响应新的允许数据。此操作可以按事务进行修改。例如,程序员可以指定在识别数据一致性之前,只需要两个节点读取新输入的数据。一旦超过该阈值,就被认为是一致数据。
另外,虽然 ScyllaDB 优先考虑可用性而不是一致性,但它还提供了一个用于增强一致性的 API,该 API 利用轻量级事务 (LWT)。LWT 允许数据库管理员根据各种工作负载的需求调整数据库一致性行为。 轻量级事务由一个条件语句组成,该语句允许原子“比较和设置”操作。在执行事务之前,此类操作会检查条件是否为真。如果条件不满足,则不执行事务。(这就是为什么 LWT 经常被称为“条件语句”) LWT 不使用锁,而是使用 Raft 共识机制来确保集群中的所有节点都同意已提交的更改。因此,ScyllaDB 可以为同时需要高可用性、可预测的低延迟和弹性的应用程序提供足够的一致性。 下一主题DBMS 中的依赖关系 |
我们请求您订阅我们的新闻通讯以获取最新更新。