数据库一致性
(
d
atabase consistency)
由一组值定义,数据库系统中的所有数据点都必须与这些值保持一致,才能正确读取和接受
数据
。如果任何不符合先决条件值的数据进入数据库,将导致数据集出现一致性错误。数据库一致性通过建立规则来实现。任何写入数据库的数据事务都只能按照数据库开发人员制定的规则
,
包括
特定约束、触发器、变量、级联等来更改受影响的数据。
例如,假设您 某地区的交通 安全研究所工作。您的任务是创建一个新驾照数据库。在过去的十年中, 该地区 的人口激增,因此需要为所有申领驾照的人提供新的字母和数字格式。在您的数据库中, 该地区驾照 的新设定值如下: 1 个字母 + 7 个数字 , 现在每个条目都必须遵循这一规则。如果输入 "C08846024" ,则返回错误。为什么?因为输入的值是 1 个字母 +8 个数字,这实质上是一种不一致的数据形式。
一致性还意味着,一个表中任何一个特定对象的任何数据更改都需要在该对象所在的所有其他表中进行更改 。继续以 驾照 为例,如果新驾驶员的家庭地址发生变化,则必须在所有存在该地址的表中体现该更新。如果一个表中的地址是旧的,而其他所有表中的地址都是新的,这 也是 数据不一致的典型例子。
注意:数据库一致性并不保证在任何给定事务中引入的数据是正确的 , 它只保证在系统中写入和读取的数据符合所有有资格进入数据库的数据的先决条件。 更简单地说,在上面的示例中,您可以输入符合 1 个字母 + 7 个数字规则的数据事务,但这并不能保证数据与实际的 驾照 相对应。数据库一致性并不考虑数据所代表的内容,只考虑其格式。
为什么数据库一致性很重要?
一致的数据使数据库能够像运转良好的机器一样运行。已建立的规则 / 值可将不一致的数据排除在主数据库和副本之外,从而保持其操作顺利:
l 准确性
l 增加数据库空间
l 更快、更高效的数据检索
数据库一致性对所有输入数据进行管理 。因此,尽管数据库在接受新数据时会发生变化 , 但它至少会根据一开始制定的验证规则一致地发生变化。 如今, 全球每天都有数十亿美元的决策是根据数据库的一致性做出的 。当实时信息成为现代数字业务的 基础时 ,制定验证规则以确保数据集没有错误信息就显得至关重要 。 因为 数据错误 增加延迟, 损害 实时体验。
数据库一致性示例
现实世界中有哪些数据库一致性操作的例子?我们已经在上文的 驾照数据库 场景中探讨了一个例子。 现在我们转向 银行业 看看。
假设您正在将资金从一个账户转入另一个账户。您刚刚将 1200 0 元 转入一个已有 300 0 元的账户 中 。 假设正确 刷新 后 , 账户 余额 会显示 为 1500 0 元。 但是 ,新余额现在显示为 0 元 , 说明最新 的操作并没有反映在您的余额中。这种技术上的疏忽是 数据库弱一致性 的一个典型例子。诸如此类的问题可能会损害 银行 声誉并造成巨大损失。对于 任何行业的数据库 开发人员和消费者 来说 ,数据库系统的 强一致性 正变得越来越不可或缺。
强一致性 vs 弱一致性
强一致性 : 主节点、副本及其所有相应节点中的所有数据都符合验证规则 ,并且在任何给定时间内都是相同的。有了强数据库一致性,无论 从 哪个客户端访问数据 — 客户 将始终看到遵循数据库既定规则的更新 版本 数据。
弱一致性 : 无法保证主节点、副本节点或节点中的数据在任何时刻都是相同的 。 某个 客户可以访问数据,并看到通过验证规则的信息,但可能不是最近更新的数据,从而导致一致性错误。
Redis Enterprise ( Redis 企业版数据库) 的 Active-Active 地理分布 允许多个主数据库,使您能够 灵活 地处理越来越大的 工作 负载。所谓 " Active-Active " , 是指数据库的每个实例都可以接受对任何键的读写操作 。每个数据库实例,无论距离多远,都是网络上的一个对等节点。这意味着,当对任何实例进行写操作时,该节点会自动向网络上的所有其他实例发送消息,说明缓存中的哪些内容发生了更改,并确保所有实例保留一致的缓存数据集。
Redis Enterprise 独特的 Active-Active 地理分布 采用了复杂的算法,旨在处理可能导致缓存不一致的潜在写入冲突。这些算法基于 无冲突复制数据类型( CRDT ) ,确保来自多个副本的写入数据能够以有效保持一致性的方式进行合并。
虹科 是 Redis 企业版数据库中国区战略合作伙伴。 Redis 企业版软件( Redis Enterprise )是企业级的数据库软件,也是一款实时数据平台,为全球超过 8500 家知名企业提供实时数据服务。具有线性可扩展性、高可用性、持久性、备份和恢复、地理分布、分层内存访问、多租户、安全性等 8 大核心功能、拥有 RediSearch 、 RedisJSON 等 7 大【 Redis 企业版特有模块】,可以任何规模在云、本地和混合部署中运行现代应用程序,提供无服务器、多模型的数据库解决方案。 Redis 企业版的核心优势是采用 Redis on flash 分层存储技术即【内存 + 闪存 + 磁盘】的存储方式,其 Active-Active 地理分布式架构允许跨地理位置同时进行数据读写操作、拥有亚毫秒延迟和极高吞吐量。
一致性级别
一致性级别是另一组先决条件值,它决定了有多少个副本或节点必须响应新的允许数据,然后才被确认为有效事务。这种操作可以根据每笔事务进行更改。例如,程序员可以规定,在确认数据一致性之前,只有两个节点需要读取新输入的数据。一旦数据跨过了这个界限,它就会被认为是一致的数据。
隔离级别
隔离级别是 数据库 ACID (原子性、一致性、隔离性、持久性)属性 的一部分。 ACID 是 SQL 数据库一致性的基本概念,也是某些数据库为优化数据库一致性而遵循的基本概念。隔离( Isolation )是 ACID 属性之一,它将某些数据块与特定数据库网络中的所有信息隔离开来,使其不会被其他用户事务修改。隔离被用来减少并发事务中产生的无关数据的读写。
有四种类型的隔离级别:
( 1 ) 未提交读取 :低级别。如果前一个事务对该行进行了未提交更新,则停止该行的更新。
( 2 ) 已提交读取 :不允许 " 脏读 " 。如果事务已经更新,但尚未提交,则会阻止任何读取或写入。
( 3 ) 可重复读取 :该级别使正在读取的数据行不会被访问和更新。
( 4 ) 可序列化 :最高隔离级别,可序列化通常锁定整个表,而不是特定的数据行。
复制过程中的一致性
Redis 企业版软件能够将数据复制到另一个数据库实例,以获得高可用性,并将内存中的数据持久化到磁盘上,以获得持久性。使用 WAIT 命令,可以控制复制和持久化数据库的一致性和持久性保证。
向数据库发布的任何更新通常按以下流程执行 :
( 1 ) 应用程序发出写操作
( 2 ) 代理与系统中包含给定键的正确主(也称为 “ master ” ) " 分片 " 通信
( 3 ) 分片写入数据并向代理发送回执
( 4 ) 代理将回执发送给应用程序
( 5 ) 主分片向副本发送写入信息
( 6 ) 副本将写入确认发回给主服务器
( 7 ) 写入副本的内容被持久化到磁盘上
( 8 ) 副本内部确认写入

使用 WAIT 命令,应用程序可以要求仅在复制或持久性在副本上确认后等待确认。
使用 WAIT 命令的写操作流程如下所示:
( 1 ) 应用程序发出写操作
( 2 ) 代理与系统中包含给定 key 的正确主 " 分片 " 通信
( 3 ) 复制将更新传递给副本分片
( 4 ) 复制将更新持久化到磁盘(假设选择了每次写入都自动更新)
( 5-8 ) 通过步骤 5 至 8 ,确认从副本一直发回代理
通过此流程,应用程序只有在复制到副本和持久化存储实现耐久性后,才能从写入中获得确认。

使用 WAIT 命令,应用程序可以保证即使在节点故障或节点重新启动的情况下,也会记录已确认的写入。
数据库一致性常见问题解答 ( QA )
A : 如果数据在同一时间出现在所有相应的节点中,无论用户在哪里访问数据,数据都是一致的。
Q : 数据一致性与数据库一致性是一回事吗?
A : 数据一致性是指数据在整个网络中以及在使用该数据的众多应用程序之间尽可能保持一致的过程。数据库一致性要求对进入网络的数据制定验证规则,以使其在公式上与表中的所有其他数据保持一致。
Q : 什么是最终一致性?
A : 通过最终一致性,经过更新的数据最终将反映在存储该数据的所有节点中。最终,通过最终一致性,无论任何客户端在网络中访问数据,所有节点都将生成相同的数据。
Q : 关系数据库中的单个表包括?
A : 关系数据库中的所有数据都存储在表中,表由行和列组成。数据点被组织在这些行和列中。行通常被称为 " 记录 " ,代表数据类别,而列或 " 字段 " 则代表 " 实例 " 。在数据库中可以找到表格,其基于主题的设计有助于防止数据冗余。
Q : 关系数据库由 哪些部分 组成?
A : 关系数据库由表组成
Q : ACID 模型与 BASE 模型相比有何不同?
A : ACID 和 BASE (基本可用、软状态、最终一致)模型之间的主要区别在于, ACID 致力于优化数据库一致性,而 BASE 则加强高可用性。 ACID 可保持事务一致性,因此如果您采用 BASE 模型,请确保一致性仍是重中之重,并得到彻底解决。
Q : Redis 数据库是否一致?
A : 当 Redis 用作缓存时,一致性问题可能发生在 Redis 实例(主 / 副本)之间,以及 Redis 缓存和作为主数据库的 Redis 之间。在这种情况下,如果两者之间的数据不匹配,数据就会不一致。对于开源 Redis 来说,一致性较弱,但 Redis Enterprise 的 Active-Active Geo-Distribution 提供了较强的最终一致性。