Что такое «распределенная транзакция»? - PullRequest
25 голосов
/ 18 ноября 2010

Статья в Википедии для Распределенная транзакция не очень полезна.

Можете ли вы дать общее описание того, что такое распределенная транзакция?

Также, можете ли вы привести пример того, почему приложение или база данных должны выполнять транзакцию, которая обновляет данные на двух или более сетевых компьютерах?Я понял классический пример банка;Меня больше волнуют распределенные транзакции в таких базах данных, как Dynamo, Bigtable, HBase или Cassandra.

Ответы [ 5 ]

26 голосов
/ 18 ноября 2010

Обычно транзакции происходят на одном сервере базы данных:

BEGIN TRANSACTION
SELECT something FROM myTable
UPDATE something IN myTable
COMMIT

A распределенная транзакция включает несколько серверов:

BEGIN TRANSACTION
UPDATE amount = amount - 100 IN bankAccounts WHERE accountNr = 1
UPDATE amount = amount + 100 IN someRemoteDatabaseAtSomeOtherBank.bankAccounts WHERE accountNr = 2
COMMIT

Сложность возникает из-за того, что серверы должны сообщать , чтобы гарантировать, что транзакционные свойства, такие как атомарность , удовлетворены на обоих серверах: если транзакция завершается успешно, значения должны быть обновлены на обоих серверах. Если транзакция не удалась, транзакция должна быть откатана на обоих серверах. Никогда не должно происходить, чтобы значения обновлялись на одном сервере, но не обновлялись на другом.

11 голосов
/ 18 ноября 2010

Распределенные транзакции охватывают несколько физических систем, тогда как стандартные транзакции - нет.Синхронизация между системами становится необходимостью, которая традиционно не существовала бы в стандартной транзакции.

Из вашей ссылки в Википедии ...

... распределенную транзакцию можно рассматривать кактранзакция базы данных, которая должна быть синхронизирована (или предоставлять свойства ACID) между несколькими участвующими базами данных, которые распределены по разным физическим местоположениям ...

5 голосов
/ 18 ноября 2010

Распределенная транзакция - это транзакция, которая работает на нескольких компьютерах.Скажем, вы запускаете транзакцию в каком-либо методе в программе на компьютере A. Затем вы вносите некоторые изменения в данные в методе на компьютере A, а после слова метод вызывает веб-службу на компьютере B. Сбой метода веб-службы на компьютере B иоткатывает транзакцию обратно.Поскольку транзакция распределена, это означает, что любые изменения, сделанные на компьютере A, также необходимо откатить.Комбинация координатора распределенных транзакций в windows и .net framework облегчает эту функцию.

1 голос
/ 18 ноября 2010

Распределенная транзакция - это транзакция в распределенной базе данных (т. Е. Та, в которой данные хранятся в нескольких физически отдельных системах).Это примечательно, потому что для обеспечения того, что все машины остаются согласованными, требуется немало сложностей (особенно в связи), поэтому либо вся транзакция завершается успешно, либо кажется, что ничего не произошло вообще.

0 голосов
/ 05 марта 2018

Я попытался изобразить детали распределенных транзакций в этом посте Как бы вы настроили распределенную (XA) транзакцию для производительности?

Данные, пригодные для распределенной транзакции, - это данные, которые предъявляют очень высокие требования к согласованности. Обычно это деньги или что-то еще, что у нас никогда не может быть устаревших данных. Обычно я определяю две категории данных в реальном времени и данных, в которых нет немедленной необходимости в корректности / согласованности.

Теперь вторая часть вопроса о Динамо, Bigtable, HBase или Cassandra.

Вы не можете провести параллель между базами данных NOSQL и распределенными транзакциями. Само существование этого класса баз данных оправдано как способ избежать распределенных транзакций. Распределенная транзакция сосредоточена вокруг согласованности. Это совершенно противоположно хранилищам NOSQL, которые сосредоточены вокруг доступности и разбиения.

Обычная транзакционная модель, используемая в таких базах данных, - это возможная согласованность.

...