当数据库遇到分布式,你会怎么做?
复制系统的一个重要细节是 复制 是 同步发生 还是 异步发生。同步复制会使得数据写入时间变长,而异步复制会使得副本之间的数据不一致,客户端可能会读取到历史的数据,并且在主库故障时有可能会丢失数据。所以复制系统的核心就是如何让副本保持一致,并且在主库故障时能够自动切换。 一致性模型 一致性模型(consistency model)实质上是进程和数据存储存储之间的一个约定。即,如果进程同意遵守某些规则,那么数据存储将正常运行。正常情况下,一个进程在一个数据项执行读操作时,它期待该操作返回的是该数据在其最后一次写操作之后的结果。 在没有全局时钟的情况下,精确地定义哪次写操作时最后一次写操作是十分困难的。作为替代的方法,我们需要提供其他的定义,因此产生了一系列的一致性模型。每种模型都有效地限制了在一个数据项上执行一次读操作所应返回的值。 注意:不将数据库事务的一致性与其混淆,分布式副本的一致性指的是单个对象的写入和读取。 以数据为中心 线性一致性 线性一致性也称为严格一致性(Strict Consistency)或者原子一致性(Atomic Consistency),需要满足以下两个条件: 任何一次读都能读取到某个数据最近的一次写的数据。 所有进程看到的操作顺序都跟全局时钟下的顺序一致。 线性一致性的想法是让一个系统看起来只有一个数据副本,而且所有的操作都是原子性的。应用不用担心多个副本带来诸多问题,是一个完美的理想模型,作为其他模型的参考(最强一致性模型)。 在线性一致性的数据存储中不存在并发操作:必须有且仅有一条时间线,所有的操作都在这条时间线上,构成一个全序关系。 顺序一致性 顺序一致性最早出现在Shared-Memory Multi-Processor System单机模型中,为程序员提供了极强的内存可见性保证。顺序一致性内存模型有两大特性: 任何执行的结果都与所有处理器的操作按某种顺序执行的相同。 每个单独的处理器的操作顺序均按照其程序指定的顺序。 (编辑:PHP编程网 - 黄冈站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |