数据系统的正确性追求与审计考量
1. 及时性与完整性的概念
在数据处理中,事务通常具有线性化的特性,即写入者会等待事务提交,之后其写入内容会立即对所有读取者可见。但在跨多个流处理器阶段拆分操作时并非如此,日志的消费者设计上是异步的,发送者不会等待其消息被消费者处理完。
数据系统的正确性涉及两个重要方面:及时性和完整性。
- 及时性 :确保用户观察到的系统处于最新状态。若用户读取到陈旧的数据副本,可能会观察到不一致状态,但这种不一致通常是暂时的,等待并再次尝试往往能解决问题。例如,CAP 定理中的一致性在某种程度上就是线性化,是实现及时性的一种强方式,而像写后读一致性等较弱的及时性属性也有其用途。
- 完整性 :意味着数据无损坏,即无数据丢失、无矛盾或错误数据。若某个派生数据集作为底层数据的视图被维护,其推导必须正确。例如,数据库索引必须正确反映数据库内容,缺少某些记录的索引几乎没有用处。一旦完整性被破坏,不一致往往是永久性的,大多数情况下等待和重试无法修复数据库损坏,需要进行明确的检查和修复。在 ACID 事务中,一致性通常被理解为某种特定于应用的完整性概念,原子性和持久性是维护完整性的重要工具。
可以用一句话概括:及时性的违反是“最终一致性”,而完整性的违反是“永久不一致性”。在大多数应用中,完整性远比及时性重要。及时性的违反可能只是令人烦恼和困惑,但完整性的违反可能是灾难性的。例如,信用卡对账单中,最近 24 小时内的交易未显示很正常,但如果对账单余额与交易总和及上期余额不符,或者有交易已从用户账户扣除但未支付给商家,这就是系统完整性的严重破坏。
超级会员免费看
订阅专栏 解锁全文
1277

被折叠的 条评论
为什么被折叠?



