Транзакция (информатика)

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

Различают последовательные (обычные), параллельные и распределённые транзакции. Распределённые транзакции подразумевают использование более чем одной транзакционной системы и требуют намного более сложной логики (например, two-phase commit — двухфазный протокол фиксации транзакции). Также в некоторых системах реализованы автономные транзакции, или подтранзакции, которые являются автономной частью родительской транзакции.

Пример транзакции

Пример: необходимо перевести с банковского счёта номер 5 на счёт номер 7 сумму в 10 денежных единиц. Этого можно достичь, к примеру, приведённой последовательностью действий:

  1. Прочесть баланс на счету номер 5.
  2. Уменьшить баланс на 10 денежных единиц.
  3. Сохранить новый баланс счёта номер 5.
  4. Прочесть баланс на счету номер 7.
  5. Увеличить баланс на 10 денежных единиц.
  6. Сохранить новый баланс счёта номер 7.

Эти действия представляют собой логическую единицу работы «перевод суммы между счетами», и таким образом, являются транзакцией. Если прервать данную транзакцию, к примеру, в середине, и не аннулировать все изменения, легко оставить владельца счёта номер 5 без 10 единиц, тогда как владелец счета номер 7 их не получит.

Свойства транзакций

Одним из наиболее распространённых наборов требований к транзакциям и транзакционным системам является набор ACID (Atomicity, Consistency, Isolation, Durability). Требования ACID были в основном сформулированы в конце 1970-х годов Джимом Греем[1]. Вместе с тем существуют специализированные системы с ослабленными транзакционными свойствами[2].

Уровни изоляции транзакций

В идеале транзакции разных пользователей должны выполняться так, чтобы создавалась иллюзия, что пользователь текущей транзакции — единственный. Однако в реальности, по соображениям производительности и для выполнения некоторых специальных задач, СУБД предоставляют различные уровни изоляции транзакций.

Уровни описаны в порядке увеличения изолированности транзакций и, соответственно, надёжности работы с данными.

  • 0 — Чтение незафиксированных данных (Read Uncommitted) — чтение незафиксированных изменений как своей транзакции, так и параллельных транзакций. Нет гарантии, что данные, изменённые другими транзакциями, не будут в любой момент изменены в результате их отката, поэтому такое чтение является потенциальным источником ошибок. Невозможны потерянные изменения (lost changes), возможны грязное чтение (dirty read), неповторяемое чтение и фантомы.
  • 1 — Чтение зафиксированных данных (Read Committed) — чтение всех изменений своей транзакции и зафиксированных изменений параллельных транзакций. Потерянные изменения и грязное чтение не допускается, возможны неповторяемое чтение и фантомы.
  • 2 — Повторяемое чтение (Repeatable Read, Snapshot) — чтение всех изменений своей транзакции, любые изменения, внесённые параллельными транзакциями после начала своей, недоступны. Потерянные изменения, грязное и неповторяемое чтение невозможны, возможны фантомы.
  • 3 — Сериализуемый (Serializable) — сериализуемые транзакции. Результат параллельного выполнения сериализуемой транзакции с другими транзакциями должен быть логически эквивалентен результату их какого-либо последовательного выполнения. Проблемы синхронизации не возникают.

Чем выше уровень изоляции, тем больше требуется ресурсов, чтобы его обеспечить. Соответственно, повышение изолированности может приводить к снижению скорости выполнения параллельных транзакций, что является «платой» за повышение надёжности.

В СУБД уровень изоляции транзакций можно выбрать как для всех транзакций сразу, так и для одной конкретной транзакции. По умолчанию в большинстве баз данных используется уровень 1 (Read Committed). Уровень 0 используется в основном для отслеживания изменений длительных транзакций или для чтения редко изменяемых данных. Уровни 2 и 3 используются при повышенных требованиях к изолированности транзакций.

Реализация

Полноценная реализация уровней изоляции и свойств ACID представляет собой нетривиальную задачу. Обработка поступающих данных приводит к большому количеству маленьких изменений, включая обновление как самих таблиц, так и индексов. Эти изменения потенциально могут потерпеть неудачу: закончилось место на диске, операция занимает слишком много времени (timeout) и т. д. Система должна в случае неудачи корректно вернуть базу данных в состояние до транзакции.

Первые коммерческие СУБД (к примеру, IBM DB2), пользовались исключительно блокировкой доступа к данным для обеспечения свойств ACID. Но большое количество блокировок приводит к существенному уменьшению производительности. Есть два популярных семейства решений этой проблемы, которые снижают количество блокировок:

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

При упреждающей журнализации, используемой в Sybase и MS SQL Server до версии 2005, все изменения записываются в журнал, и только после успешного завершения — в базу данных. Это позволяет СУБД вернуться в рабочее состояние после неожиданного падения системы. Теневые страницы содержат копии тех страниц базы данных на начало транзакции, в которых происходят изменения. Эти копии активизируются после успешного завершения. Хотя теневые страницы легче реализуются, упреждающая журнализация более эффективна[4].

Дальнейшее развитие технологий управления базами данных привело к появлению безблокировочных технологий. Идея контроля над параллельным доступом с помощью временных меток (timestamp-based concurrency control) была развита и привела к появлению многоверсионной архитектуры MVCC. Эти технологии не нуждаются ни в журнализации изменений, ни в теневых страницах. Архитектура, реализованная в Oracle 7.х и выше, записывает старые версии страниц в специальный сегмент отката, но они все ещё доступны для чтения. Если транзакция при чтении попадает на страницу, временная метка которой новее начала чтения, данные берутся из сегмента отката (то есть используется «старая» версия). Для поддержки такой работы ведётся журнал транзакций, но в отличие от «упреждающей журнализации», он не содержит данных. Работа с ним состоит из трёх логических шагов:

  1. Записать намерение произвести некоторые операции
  2. Выполнить задание, копируя оригиналы изменяемых страниц в сегмент отката
  3. Записать, что всё сделано без ошибок

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

  • Если повреждена запись, то сбой произошёл во время проставления отметки в журнале. Значит, ничего важного не потерялось, игнорируем эту ошибку.
  • Если все записи помечены как успешно выполненные, то сбой произошёл между транзакциями, здесь также нет потерь.
  • Если в журнале есть незавершённая транзакция, то сбой произошёл во время записи на диск. В этом случае мы восстанавливаем старую версию данных из сегмента отката.

Firebird вообще не имеет ни журнала изменений, ни сегмента отката, а реализует MVCC, записывая новые версии строк таблиц прямо в активное пространство данных. Так же поступает MS SQL 2005. Теоретически это даёт максимальную эффективность при параллельной работе с данными, но ценой является необходимость «сборки мусора», то есть удаления старых и уже не нужных версий данных.

Обработка транзакций

Обработка транзакций направлена на поддержание компьютерной системы (как правило, базы данных или каких-либо современных файловых систем) в известном, согласованном состоянии, путём обеспечения того, чтобы любые операции, осуществляющиеся в системе, являются взаимозависимыми и либо все успешно завершены, либо полностью и успешно отменены.[5]

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

Обработка транзакций позволяет нескольким отдельным операциям автоматически быть связанными друг с другом, как единая неделимая транзакция. Системы обработки транзакций гарантирует, что либо все операции в транзакции завершены без ошибок, либо ни одна из них. Если некоторые из операций завершены, но с ошибками, а другие без, системы обработки транзакций дает команду на «откат» всех операций транзакции (в том числе удачных), что означает стирание всех следов операции и восстановление системы до согласованного известного состояния, которое было до начала процесса транзакции. Если все операции транзакции завершены успешно, то транзакция фиксируется в системе, и все изменения в базе данных становятся «постоянными» (commited); транзакции не могут быть отменены, если они уже были сделаны.

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

Транзакции оформлены в строгом хронологическом порядке. Если сделка N+1 намерена коснуться той же части базы данных что и транзакция N, транзакция N+1 не начинается до момента совершения транзакции N. До совершения любых транзакций, все остальные транзакции, затрагивающие ту же часть системы, также должны быть завершены; не может быть никаких «дырок» в последовательности предыдущих транзакций.[6][5]

Методология

Основные принципы всех систем обработки транзакций одинаковы. Однако терминология может варьироваться от одной системы обработки транзакций до другой, и термины, используемые ниже, не обязательно являются универсальными.[7]

Откат (англ. rollback)

Системы обработки транзакций обеспечивают целостность базы данных при помощи записи промежуточного состояния базы данных перед её изменением, а затем, используя эти записи, восстанавливают базу данных до известного состояния, если транзакция не может быть совершена. Например, копии информации в базе данных до её изменения транзакцией, делаются системой перед транзакцией, которая может сделать любые изменения (иногда это называют before image). Если какая-либо часть транзакции не удается до её совершения, эти копии используются для восстановления базы данных в состояние, в котором она находилась до начала транзакции (Rollback).[6]

Прогон (англ. rollforward)

Кроме того, можно вести отдельный журнал всех изменений базы данных (иногда это называется after images); это не требует отката неудачных операций, но это полезно для обновления базы данных в случае отказа базы данных, поэтому некоторые системы обработки транзакций обеспечивают эту функцию. Если база данных отказывает совсем, она должна быть восстановлена из последней резервной. Резервные копии не будут отражать операции, совершенные после её создания. Однако, как только будет восстановлена база данных, журнал after images может быть применен к базе данных (rollforward), чтобы привести её в актуальное состояние. Любые транзакции, которые находятся в процессе на момент сбоя, могут быть свернуты. Результат представляет собой базу данных в известном согласованном состоянии, которое включает результаты всех транзакций, совершенных до момента отказа.[6]

Взаимная блокировка (англ. deadlocks)

В некоторых случаях, две транзакции могут в ходе их обработки пытаться получить доступ к одной и той же части базы данных в одно и то же время, таким образом, что это будет препятствовать их совершению. Например, транзакция А может получить доступ к части Х базы данных, и транзакция В может получить доступ к Y части базы данных. Если в этот момент транзакция А пытается получить доступ к части Y базы данных, в то время как транзакция B пытается получить доступ к части X, возникает ситуация взаимоблокировки, и ни одна транзакция не может быть произведена. Системы обработки транзакций предназначены для обнаружения таких ситуаций. Обычно обе транзакции отменяются и производится откат, а затем они автоматически запускаются в другом порядке, так что взаимоблокировка не повторится. Или иногда, только одна из транзакций, попавших в тупик, отменяется, производится откат, и автоматически повторяется после небольшой задержки.

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

См. также

Примечания

  1. Gray, Jim. The Transaction Concept: Virtues and Limitations. Proceedings of the 7th International Conference on Very Large Databases: pages 144—154, 1981 Архивная копия от 13 ноября 2008 на Wayback Machine (англ.)
  2. Advanced Transaction Models and Architectures Архивная копия от 6 января 2009 на Wayback Machine (англ.)
  3. Семейство алгоритмов ARIES Архивировано 20 сентября 2008 года.
  4. Gray, J., McJones, P., Blasgen, M., Lindsay, B., Lorie, R., Price, T., Putzolu, F., and Traiger, I. The recovery manager of the System R database manager. ACM Comput. Surv. 13, 2 (June 1981).
  5. 1 2 Ahmed K. Elmagarmid (Editor), Transaction Models for Advanced Database Applications, Morgan-Kaufmann, 1992, ISBN 1-55860-214-3
  6. 1 2 3 Gerhard Weikum, Gottfried Vossen, Transactional information systems: theory, algorithms, and the practice of concurrency control and recovery, Morgan Kaufmann, 2002, ISBN 1-55860-508-8
  7. Philip A. Bernstein, Eric Newcomer, Principles of Transaction Processing, 1997, Morgan Kaufmann, ISBN 1-55860-415-4

Read other articles:

Duta Besar Jerman untuk IndonesiaPetahanaIna Ruth Luise Lepelsejak 2021Dibentuk1952Pejabat pertamaWerner Otto von HentigSitus webjakarta.diplo.de/id-en Berikut adalah daftar Duta Besar Jerman di Indonesia berisi semua diplomat Duta Besar Republik Federal Jerman dan Republik Demokratik Jerman di Indonesia. Republik Federal Jerman Kedutaan Republik Federal Jerman berlokasi di Jakarta. Pada tahun 2002, duta besar Republik Federal Jerman untuk Republik Indonesia mulai merangkap sebagai duta ...

 

KuranjiKelurahanPeta lokasi Kelurahan KuranjiNegara IndonesiaProvinsiSumatera BaratKotaPadangKecamatanKuranjiKode Kemendagri13.71.09.1007 Kode BPS1371090007 Luas-Jumlah penduduk-Kepadatan- Kuranji adalah salah satu kelurahan di kecamatan Kuranji, Padang, Sumatera Barat, Indonesia. Pranala luar (Indonesia) Keputusan Menteri Dalam Negeri Nomor 050-145 Tahun 2022 tentang Pemberian dan Pemutakhiran Kode, Data Wilayah Administrasi Pemerintahan, dan Pulau tahun 2021 (Indonesia) Peraturan Mente...

 

Sebuah bak cebok modern berjenis tradisional Bidet atau bak cebok adalah sebuah plumbing fixture atau sejenis wastafel yang ditujukan untuk mencuci alat kelamin, perineum, bagian dalam bokong, dan anus tubuh manusia, dan biasanya dipasang di kamar mandi. Add-ons berbiaya rendah yang menggabungkan kloset duduk dan bidet elektronik menjadi semakin populer. Bidet berasal dari bahasa Prancis. Fungsi Sebuah bal cebok abad ke-20 (bagian depan) Bak cebok digunakan terutama untuk mencuci dan membersi...

Sloane StephensStephens at the 2017 Wimbledon ChampionshipsKebangsaan Amerika SerikatTempat tinggalFort Lauderdale, Florida, Amerika Serikat[1]Lahir20 Maret 1993 (umur 31)[2]Plantation, Florida, Amerika SerikatTinggi170 m (557 ft 9 in)Memulai pro2009[3]Tipe pemainTangan kanan (two-handed backhand)PelatihKamau Murray (2015–18, 2019–)Total hadiahUS$15,466,260Situs web resmisloanestephens.comTunggalRekor (M–K)296–206 (58.96%)Gelar6Peringka...

 

Election in Kansas, United States 2020 Kansas House of Representatives election ← 2018 November 3, 2020 (2020-11-03) 2022 → All 125 seats in the Kansas House of Representatives63 seats needed for a majority   Majority party Minority party   Leader Ron Ryckman Jr. Tom Sawyer Party Republican Democratic Leader's seat 78th district 95th district Seats before 84 41 Seats won 86 39 Seat change 2 2 Popular vote 789,261 479,381 ...

 

Lokomotif CC204CC 204 03 01 YK berdinas kereta api Bogowonto di tikungan KalimenurData teknisSumber tenagaDiesel elektrikProdusenINKA, dengan lisensi dari GE TransportationModel GE C18MMi (produksi pertama) GE C20EMP (produksi kedua) Tanggal dibuat GE C18MMi : 2003–2005 GE C20EMP : 2006–2011 Jumlah dibuat GE C18MMi : 7 GE C20EMP : 30 Spesifikasi rodaNotasi Whyte0-6-6-0Susunan roda AARC-CKlasifikasi UICCo'Co'DimensiLebar sepur1.067 mm (3 ft 6 in)Panj...

Lydia Maria ChildBiographieNaissance 11 février 1802MedfordDécès 20 octobre 1880 (à 78 ans)WaylandNom de naissance Lydia Maria FrancisNationalité américaineDomiciles Norridgewock, Watertown, WaylandActivités Romancière, écrivaine, géologue, journaliste, poétesse, philosophePère Converse Francis (d)Mère Susannah Francis (d)Fratrie Convers Francis (en)Conjoint David Lee Child (en) (de 1828 à 1874)Autres informationsInfluencée par William Lloyd GarrisonDistinction National Wo...

 

追晉陸軍二級上將趙家驤將軍个人资料出生1910年 大清河南省衛輝府汲縣逝世1958年8月23日(1958歲—08—23)(47—48歲) † 中華民國福建省金門縣国籍 中華民國政党 中國國民黨获奖 青天白日勳章(追贈)军事背景效忠 中華民國服役 國民革命軍 中華民國陸軍服役时间1924年-1958年军衔 二級上將 (追晉)部队四十七師指挥東北剿匪總司令部參謀長陸軍�...

 

For the most recent participation, see Denmark in the Eurovision Song Contest 2023. For the upcoming participation, see Denmark in the Eurovision Song Contest 2024. Denmark in the Eurovision Song Contest Participating broadcasterDanish Broadcasting Corporation (DR)Participation summaryAppearances51 (44 finals)First appearance1957Highest placement1st: 1963, 2000, 2013Host1964, 2001, 2014 Participation history 19571958195919601961196219631964196519661967 – 1977197819791980198119...

Work done underwater during diving operations Underwater work is work done underwater, generally by divers during diving operations, but includes work done underwater by remotely operated vehicles and crewed submersibles. Skills commonly used by all professional diving occupations Underwater navigation Main article: Diver navigation Pilotage involves navigation by naturally observable landmarks and phenomena, such as sunlight, water movement, bottom composition (for example, sand ripples run ...

 

Pour les articles homonymes, voir Pollock. Jackson PollockJackson Pollock en 1928.Naissance 28 janvier 1912Cody (Wyoming)Décès 11 août 1956 (à 44 ans)Springs (État de New York)Sépulture Green River Cemetery (en)Nom de naissance Paul Jackson PollockNationalité AméricainActivité Artiste peintreFormation Art Students League of New YorkManual Arts High School (en)Maître Thomas Hart BentonReprésenté par Artists Rights SocietyLieux de travail East Hampton, New YorkMouvement Expres...

 

António GuterresGCC GCLGuterres pada 2021 Sekretaris Jenderal Perserikatan Bangsa-BangsaPetahanaMulai menjabat 1 Januari 2017WakilAmina MohammedPendahuluBan Ki-moonPenggantiPetahanaKomisioner Tinggi Perserikatan Bangsa-Bangsa untuk PengungsiMasa jabatan15 Juni 2005 – 31 Desember 2015Sekretaris-JenderalKofi AnnanBan Ki-moonPendahuluRuud LubbersPenggantiFilippo GrandiPerdana Menteri PortugalMasa jabatan28 Oktober 1995 – 6 April 2002PresidenMário SoaresJorge SampaioWa...

Lydia KoKo, 2019Informasi pribadiNama lengkapBo-Gyung Lydia KoJulukanLyds[1]Lahir24 April 1997 (umur 27)Seoul, Korea SelatanTinggi5 ft 5 in (1,65 m)Kebangsaan Selandia BaruTempat tinggalOrlando, Florida, A.S.KarierAlmamaterUniversitas KoreaMenjadi pro2013Kejuaraan sekarangTur LPGAJuara profesional26Kemenangan menurut kejuaraanLPGA Tour19Ladies European Tour7LPGA of Korea Tour1ALPG Tour5 Lydia KoHangul리디아 고 Hanja리디아 高 Alih AksaraRidia GoMcCune�...

 

Book by Julius Evola This article needs additional citations for verification. Please help improve this article by adding citations to reliable sources. Unsourced material may be challenged and removed.Find sources: Revolt Against the Modern World – news · newspapers · books · scholar · JSTOR (October 2016) (Learn how and when to remove this message) Revolt Against the Modern World First edition English hardcover, published by Inner Traditions in 1995A...

 

American hip hop duo This article is about the hip-hop duo. For other artists with a similar name, see Chris Cross (disambiguation). Kris KrossSmith (left) and Kelly in 1996Background informationOriginAtlanta, Georgia, U.S.GenresHip hopYears active 1990–2002 2007–2013 Labels CCO One Life Ruffhouse Columbia Judgement Past members Chris Mac Daddy Kelly (deceased) Chris Daddy Mac Smith Kris Kross was an American hip hop duo, consisting of Chris Mac Daddy Kelly and Chris Daddy Mac Smith. Kris...

「グーテンベルク」と「グーテンベルグ」はこの項目へ転送されています。その他の用法については「グーテンベルク (曖昧さ回避)」をご覧ください。 ヨハネス・グーテンベルクJohannes Gutenberg ヨハネス・グーテンベルク生誕 1398年頃 神聖ローマ帝国 マインツ選帝侯領、マインツ死没 1468年2月3日 神聖ローマ帝国 マインツ選帝侯領、マインツ親 父:フリーレ・ゲンスフ...

 

French film director Jean VigoVigo, 1930sBorn(1905-04-26)26 April 1905Paris, FranceDied5 October 1934(1934-10-05) (aged 29)Paris, FranceOccupationFilm directorYears active1930–1934 Jean Vigo (French: [vigo]; 26 April 1905 – 5 October 1934) was a French film director who helped establish poetic realism in film in the 1930s. His work influenced French New Wave cinema of the late 1950s and early 1960s. Biography Vigo was born to Emily Clero and the militant anarchist Mi...

 

Giải Nobel Hóa học Tổ chức trao giải Viện Hàn lâm Khoa học Hoàng gia Thụy Điển(Kungliga Vetenskapsakademien) Trao giải lần đầu Năm 1901 Jacobus Henricus van 't Hoff Giải thưởng năm 2017 Jacques Dubochet / Joachim Frank Richard Henderson Website nobel prizes - chemistry Giải Nobel hóa học (Tiếng Thụy Điển: Nobelpriset i kemi) là một giải thưởng thường niên của Viện Caroline (Karolinska Institutet). Đây là một trong năm gi�...

Tigrane II d'Armeniadetto il GrandeEffigie di Tigrane II su una monetaRe di ArmeniaIn carica95 a.C. – 55 a.C. PredecessoreArtavaside I SuccessoreArtavaside II Sovrano dell'impero seleucideIn carica83 a.C. – 69 a.C. (in opposizione a Seleuco VII) PredecessoreFilippo I Filadelfo SuccessoreAntioco XIII Nascita140 a.C. ca. Morte55 a.C. DinastiaArtassidi PadreTigrane I o Artavaside I ConsorteCleopatra d'Armenia Tigrane II d'Armenia, detto il Grande (in armeno Տիգրան Մեծ?, p...

 

Este artículo o sección necesita referencias que aparezcan en una publicación acreditada. Busca fuentes: «Servicio de Protección Federal (Estados Unidos)» – noticias · libros · académico · imágenesPuedes avisar al redactor principal pegando lo siguiente en su página de discusión: {{sust:Aviso referencias|Servicio de Protección Federal (Estados Unidos)}} ~~~~Este aviso fue puesto el 29 de julio de 2024. El Servicio de Protección Federal (FPS) es un organism...