我想知道如何以及为什么“加入”降低大规模分布式(关系型)数据库系统的可扩展性?
感谢。
答案 0 :(得分:8)
作为一般考虑,在分布式系统中存在显着的开销(例如,非用户计算),其呈现出相干的'并统一'正面。
只需考虑以下因素:
不同的节点(例如服务器)是不同的机器。这意味着有n个节点参与分布式动作的概率 - 例如连接 - 处于最佳状态(例如,在缓存中只有正确的表,或者获得了适当的锁)是低的。所以这是每个节点进入适当状态的一些开销。
自然他们需要沟通才能协调。所以节点之间存在网络喋喋不休,这些延迟并不是无关紧要的。
上面的开销会增加服务请求的平均时间,从而降低可用性(就系统容量而言)。
可扩展性成为一个问题,因为以上都不是O(1)。在最好的情况下,你可以期待O(log n),它可能与O(n ^ 2)一样糟糕。这对于杀死可伸缩性(根据定义意味着系统扩展到更多节点的能力)确实很奇怪。
以上是noSQL系统动机的一部分,例如:如果不需要跨节点协调服务查询,那么性能要好得多。 (正如你所看到的,这不是魔术 - 我们只是牺牲了系统的系统正确性。)