Как мне запрограммировать "Распределенную транзакцию"?
В прошлом все мои потребности в БД были решены с помощью sqlite. Теперь, создавая БД, которая потенциально может быть большой, я изучил "Распределенную транзакцию". Как мне это запрограммировать? Я нашел некоторые результаты, объясняющие, что такое распределенная транзакция, но не объяснил, как ее программировать.
Я знаю, что в коде у меня есть несколько транзакций, которые я могу захотеть сделать более крупными. Я использую.NET. Как я могу сделать что-то вроде создания пользователя, где его ПК находится в одной базе данных, а его пользовательская информация, такая как имя и настройки, находится в другой базе данных. Это может быть отдельный вопрос, но если у меня есть две функции. Один обновляет описание мультимедиа, а другой обновляет контент, который может находиться на том же сервере или отдельно. Как я вкладываю эти транзакции и фиксирую только в конце?
2 ответа
Для введения в концепцию см. Википедию.
Для использования в.NET, посмотрите на System.Transactions
пространство имен, особенно TransactionScope
учебный класс. Это позволит вам подключиться к использованию DTC. Если вы посмотрите на System.Data.SQLite
Затем вы можете увидеть, как они интегрировали DTC с SQLite.
Подход, который вы описали, может привести к проблемам с производительностью. Каждый запрос требует транзакции с участием нескольких баз данных. Это дорого. Распределенные транзакции могут быть хорошим решением, если вам необходимо, например, задействовать вызов веб-службы и запрос БД в одной транзакции.
Если вам понадобится масштабируемость для повышения производительности при большой нагрузке в будущем, вы можете рассмотреть возможность кластеризации. Вместо того, чтобы распределять части одного варианта использования между различными серверами, вы будете выполнять простые (не распределенные) транзакции. И вы получите выгоду от масштабируемости, потому что разные запросы будут обрабатываться разными серверами.
Существуют разные мнения об основной цели кластеризации и ее применимости в различных ситуациях. Я думаю, что это зависит от предметной области и требует тщательного анализа. Некоторые ссылки, касающиеся кластеризации: кластеризация базы данных Нила МакАллистера, обзор кластеризации баз данных SQL Server 2000 с использованием MSCS (устаревшая версия), кластеризация (вычисления) из Википедии и алгоритмы кластеризации - для общих знаний.
Я бы порекомендовал вам взглянуть на " Странствующие архитектуры " Мартина Фаулера (в основном речь идет о распределенных вычислениях, но также применимо к транзакциям), Обзор распределенных транзакций из MSDN и следующие два мнения:
Распространение действительно так плохо? и (О) Первый закон распределения Мартина Фаулера.