视频

了解更多
数据库一致性由数据库系统中所有数据点必须与其一致才能正确读取和接受的一组值定义。如果不满足预定义值的数据进入数据库,则会产生数据集的一致性错误。通过建立规则实现数据库一致性。写入数据库的任何数据事务只改变受影响的数据,正如数据库开发人员定义的规则集中的具体约束、触发器、变量、级联等所定义的那样。
例如,假设你受雇于国家交通安全研究所 (NTSI)。你已被委派创建新的加利福尼亚驾照数据库。在过去十年里,加利福尼亚人口激增,为所有首次获得驾照的人创造了需要一种新的字母和数字格式的需求。您的团队已确定数据库中加利福尼亚驾驶执照的新设置值为:1 字母 + 7 数字。现在的每一项都必须从此规则。读取为“C08846024”的项将返回错误。为什么?因为输入的值是 1 字母 + 8 数字,本质上是一种不一致的数据。
一致性还意味着对一个表中某一特定对象进行的任何数据更改都需要在该对象存在的其他所有表中更改。继续以驾驶执照为例,如果新手驾驶员的家庭住址发生变化,则该更新必须反映在包含该先前地址的所有表中。如果一个表有旧地址,所有其他表都有新地址,这将是数据不一致的一个典型示例。
注意:数据库一致性不保证在给定事务中引入的数据是正确的。它只保证在系统中写入和读取的数据满足进入该数据库的资格数据的所有前提。简单来说,按上面的示例来说,你可以输入一条满足 1 字母 + 7 数字规则的数据事务,但这不保证这些数据对应实际驾驶执照。数据库一致性只考虑数据的格式,而不考虑它代表什么。
一致的数据能让数据库像一台运转良好的机器一样工作。保持不一致的数据远离主数据库和副本的已建立规则/值使数据库的运行平稳且具有
数据库一致性对所有传入的数据进行规范。所以,即使数据库接收了新数据后发生了改变,但它至少是按照一开始确立的验证规则进行一致且合规的改变。在当今世界,每天都有价值数十亿美元的决策围绕着感知到的数据库一致性而展开。当实时信息成为现代数字业务的新常态,至关重要的是要制定验证规则,确保数据集不包含不准确的信息,这样可以降低延迟,最终保证实时体验的“实时”效果。
在现实生活中,数据库一致性操作的示例有哪些?我们已经在上面的 NTSI 场景中探索一个示例。让我们转向银行业。
假设你正在从一个账户向另一个账户转账。你刚刚向一个已有 300 美元的账户转入了 1200 美元。你刷新了页面,坚信自己会看到 1500 美元的余额。然而,这次操作并未反映在你的余额中。事实上,你的余额显示为 0 美元。这个技术漏洞就是弱一致性的一个典型示例,并且可能导致你浪费时间与银行代表一起解决问题。此类问题会损害品牌的声誉,并造成大量经济损失。对于开发人员和消费者而言,数据库系统中的强一致性正变得越来越不可妥协。
强一致性意味着主要副本及其所有相应节点中的所有数据都符合验证规则,且在任何给定时间都相同。通过强大的数据库一致性,无论哪个客户端正在访问数据,他们都可以始终看到最新的、遵循为数据库建立的规则更新的数据。
弱一致性有点像众所周知的“狂野西部”。无法保证主要副本、副本或节点中的数据在任何给定时间都是相同的。印度的一个客户端可以访问数据并看到通过了验证规则的信息,但可能不是最新更新的数据,从而导致一致性错误。他们很可能根据不再相关的信息采取行动,即使在某一时刻该信息可能是相关的。
一致性级别是另一组预先条件的值,规定必须有多少副本或节点响应新的允许数据,才能将其视为有效事务。此操作可以针对每个事务进行更改。所以,例如,程序员可以规定只有两个节点需要读取新输入数据,它才会确认数据一致性。一旦它达到该基准,它将被视为一致性数据。
隔离级别是数据库 ACID(原子性、一致性、隔离性、持久性)性能的一部分。ACID 是 SQL 数据库数据库一致性的基础概念,也是某些数据库为优化数据库一致性而遵循的规则。隔离是 ACID 的一项性能,用于将某些数据信息分隔到特定数据库网络中的所有信息之外,以防止其他用户事务对其进行修改。隔离用于限制并发事务中产生的无关紧要数据的读取和写入操作。
隔离级别有四种类型
如果数据在所有对应节点中同时以相同形式出现,则数据是一致的,无论用户是谁以及他们在什么地理位置访问数据。
否。数据库一致性要求网络中输入的数据进行验证规则,才能在公式方面与表中所有其他数据保持一致。
数据一致性是数据在整个网络以及利用该数据的众多应用程序中尽可能保持统一的过程。
最终一致性要求:已经过更新的数据最终会在存储该数据的各个节点中反映出来。最终,通过最终一致性,每当客户端在网络中访问任何数据时,所有节点都会生成相同的数据。
关系型数据库中的所有数据都存储在表格中,表格由行和列组成。数据点按行和列进行组织。行通常被称为“记录”,通常表示数据类别,而列或“字段”则表示“实例”。表位于数据库中,可防止您的数据及其基于主题的设计出现冗余。
表
ACID 和 BASE(基本可用、软状态、最终一致性)模型之间的主要区别在于,虽然 ACID 用于优化数据库一致性,但 BASE 加强了高可用性。ACID 保持事务一致性,因此如果您选择 BASE 模型,请确保一致性仍然是首要任务,并得到彻底解决。
当使用 Redis 作为缓存时,所讨论的一致性可能是 Redis 实例(主/副本)之间 Redis 缓存和 Redis 与主数据库之间。在这种情况下,如果这两个数据不匹配,则数据可能会不一致。我们的博客文章 维护缓存一致性的三种方法 介绍了如何解决此问题。
对于开源 Redis,存在弱一致性,但 Redis Enterprise 的 主动 - 主动地理分布 提供强最终一致性。
是否对企业应用程序的云缓存技术感兴趣?请单击下方阅读 Lee Atchison 的Redis 大规模缓存。