Database 是否可以在基于复制的分布式数据库中删除?
到目前为止,我的印象是,您无法真正删除基于复制的分布式数据库中的一行。在基于副本的系统中,这一切都很好。但在复制中,您将它们标记为“考虑此删除”,并在每次查询中过滤掉它们。但实际上,您从未从数据库中删除过某些内容。我认为是时候验证这个假设是否正确了 我的理解是,若发生密钥冲突,您将在复制时遇到竞争条件。事情是这样的: 数据库A: 在键11(11A)下添加一个条目 数据库B: 在键11(11B)下添加一个条目 数据库A: 删除键11下的条目 现在,这取决于这3个操作在野外“相遇”的顺序: 预期的顺序是:Database 是否可以在基于复制的分布式数据库中删除?,database,database-design,Database,Database Design,到目前为止,我的印象是,您无法真正删除基于复制的分布式数据库中的一行。在基于副本的系统中,这一切都很好。但在复制中,您将它们标记为“考虑此删除”,并在每次查询中过滤掉它们。但实际上,您从未从数据库中删除过某些内容。我认为是时候验证这个假设是否正确了 我的理解是,若发生密钥冲突,您将在复制时遇到竞争条件。事情是这样的: 数据库A: 在键11(11A)下添加一个条目 数据库B: 在键11(11B)下添加一个条目 数据库A: 删除键11下的条目 现在,这取决于这3个操作在野外“相遇”的顺序: 预期的顺
- 11A创建
- 11删除(即11A)
- 11B创建
- 11A创建
- 11B创建(失败,已经是密钥11)
- 11删除
- 11B创建
- 11A创建(失败,已经是密钥11)
- 11删除(将命中11B)
- 正确性:如果删除了项而不是删除了项,则可能存在一个不明确的实例,其中查阅了两个节点,其中节点A拥有项,但节点B没有。整个系统无法区分该项是已删除(但a中的删除失败)还是最近创建的(但B中的创建失败)。通过墓碑,可以清楚地看出这一区别
- 性能:大多数系统不执行就地更新(如RDBMS数据库通常所做的),而是执行仅附加的操作。这样做是为了提高性能,因为磁盘中的随机访问操作比顺序操作慢得多。因此,通过墓碑执行删除操作与此方法非常吻合李>
下面是一些描述Riak和Cassandra如何执行删除的参考资料,其中也包含大量关于墓碑的信息: