在CAP定理中,“P”(分区)组件基本上表明尽管有物理网络分区,系统仍能正常工作。
我认为“C”(一致性)和“A”(可用性)在DDBMS环境中对我来说非常有意义:所有客户端必须具有一致的数据视图,无论数据库节点是什么。在可用性的情况下,所有客户端必须能够从某些数据库节点获取响应以进行读/写(即,所有节点永远不会同时关闭)。
但由于某种原因,我对CAP的分区问题感到窒息,其重要性在于,特别是对于DDBMS。
对于分布式数据库,根据定义,您可以拥有多个(群集)节点。取决于网络&系统架构,物理设备等,无论如何在节点之间复制或通信(半连接等)时都会遇到性能问题。 CAP中的“P”只是加速DDBMS性能的一种方式;没有P保证会否则会受到影响?
此外,“P”如何与单个节点(非群集)DB相关?在这种情况下,我觉得这完全无关紧要。提前谢谢!
答案 0 :(得分:5)
假设你有3台机器。其中一个无法联系其他人,换句话说,群集被分成两个分区。如果系统可以处理这种情况,那么它是分区容错的。但是,您必须放弃总体正确性或总体可用性:
删除正确性:所有节点都保持运行,但拆分节点和其余群集节点可能包含冲突数据,有时称为裂脑。
丢弃可用性:其中一个分区脱机。这可以保护数据的完整性,因为任何成功的读取都不会在其他地方产生冲突的值。
从数据库系统的角度来看,这意味着您必须有不同的策略来处理失败。无法处理分区故障的数据库意味着如果任何节点出现故障,则行为未定义。在故障期间牺牲正确性的数据库将强制应用程序在解决故障时处理一致性问题,但仍有更多节点可用。放弃可用性的数据库将允许应用程序逻辑假定数据始终是一致的,但在失败期间某些其他健康的节点将无法访问。
答案 1 :(得分:0)
我对CAP的理解是,您无法始终可靠地拥有所有三个理想属性,并且必须选择您的优先级。我同意使用所用的术语并不是最容易理解的,但Eric Brewer本人的这篇文章很好地解释了它。 http://www.infoq.com/articles/cap-twelve-years-later-how-the-rules-have-changed
要直接回答您的问题,如果您选择对数据进行分区,那么在某种程度上您需要权衡一致性或可用性。如果您在A和B之间拆分数据,并且它们彼此失去连接,那么要么阻止更新(-availibity),要么让它们独立更新(-consistency)