具有并发控制和ACID属性的数据库分片

问题描述 投票:-1回答:1

最近,我一直在阅读有关数据库分片和数据库并发控制以及ACID属性的信息,并且我一直在考虑一些对我来说有些棘手的方案。

假设我们要进行一笔交易,以将资金从一个帐户转移到另一个帐户。假设我们有按国家(地区)分片的客户(帐户),例如在与欧洲客户分开的特定服务器上的美国客户(出于可伸缩性考虑)]

此类系统的交易应类似于:

BEGIN TRANSACTION
UPDATE FROM Account SET balance = balance - 100.0 WHERE id = 1;
UPDATE FROM Account SET balance = balance + 100.0 WHERE id = 2;
COMMIT;

1-假设帐户1来自欧洲,帐户2来自美国。在这种情况下如何保留ACID属性?因为在一个应用程序中,每个分片(分离的数据库服务器)将拥有不同的会话,这意味着不同的事务!

2-这也可能是检测死锁的问题,如果上述事务将由2个不同的线程以不同的顺序执行,那么如何在并发应用程序中检测例如死锁!

我知道,如果我们只有一个数据库来保存所有记录,因为可以完全控制数据,这很容易做到,但是在分布式数据库中,我相信我们可能确实需要与其他数据库或中央代理进行一些通信处理这种情况!

concurrency rdbms sharding distributed-system acid
1个回答
1
投票

您需要的是共识算法,因此帐户1和帐户2都可以同意在它们之间进行$ 100的交易。

[这是一个非常广阔的话题,对于拥有PHD的人们来说,他们仅研究共识算法。著名的共识算法列表为:

  1. Paxos
  2. 两阶段提交

如果可以将极限性能的标准降低一点,我将从两阶段提交开始(以上三个过程中最简单的一个。)>

© www.soinside.com 2019 - 2024. All rights reserved.