Транзакция – это термин, имеющий латинское происхождение, в переводе означающее «соглашение» или «обмен».
Чаще всего данный термин встречается в банковской сфере и подразумевает следующие операции:
Что такое транзакция?
Под транзакцией понимают:
Если говорить простыми словами, то транзакция – это добровольное перечисление денежных средств со счета клиента, либо покупателя в пользу лица, оказавшего услугу, либо продавшего товар. Каждая из операций отражается в базе данных финансовой организации, вне зависимости успешна она была проведена или нет.
Процент на остаток
Нет
Кешбек
до 30 %
Срок действия
5 лет
Выпуск
Бесплатно
Обслуживание
750 руб. в год
Система
Процент на остаток
до 6 %
Кешбек
до 15 %
Срок действия
5 лет
Выпуск
Бесплатно
Обслуживание
Бесплатно
Система
Процент на остаток
до 8 %
Кешбек
до 2 %
Срок действия
5 лет
Выпуск
Бесплатно
Обслуживание
Бесплатно
Система
Виды транзакций
В зависимости от личного участия сторон и условий проведения сделки выделяют два вида операции:
1. Онлайн — транзакция. Осуществление операций производится при участии посредника либо напрямую, но в режиме реального времени. Однако, участники сделки могут находиться на разных континентах. Яркими примерами являются:
2. Оффлайн – транзакция – это операции, не требующие непосредственного участия обоих сторон, производится с некоторой задержкой по времени. К таким действиям относятся:
Как происходит транзакция
Механизмы проведения транзакций типичны, чтобы иметь представление о данной операции необходимо понимать их.
Рассмотрим процесс на примере оплаты покупки в супермаркете с помощью банковской карты физического лица. Транзакция будет включать в себя четыре последовательных этапа.
Сделка происходит не между супермаркетом и покупателем, а между финансовыми организациями:
Для осуществления финансовой сделки банк – эквайр запрашивает разрешение на проведение операции у банка-эмитента. В случае покупки в супермаркете – на денежный перевод. Запрос формируется в момент помещения банковской карты в платежное устройство. При соприкосновении защитной линии карты и терминала производится отправка зашифрованных данных, касающихся персональной информации держателя карты, ее реквизитов и т.д.
Несмотря на то, что работа банковских систем является достаточно сложной и замысловатой, показанный пример позволяет понять, как происходит списание денежных средств с расчетной карточки клиента. Масштабы проведения таких сделок впечатляют – стоит лишь представить, сколько подобных операций проводится ежесекундно во всем мире.
Развитие современных технологий позволили сделать сложные технические сделки для держателей пластиковых карт простыми, отнимающими всего несколько секунд, безопасными, гарантировать полную сохранность персональных данных и конфиденциальность.
Минимальную информацию о том, в чем суть операции «транзакции» следует знать, поскольку обойтись без нее в современном мире невозможно.
Термин «транзакция» имеет латинское происхождение и, при прямом переводе, означает «обмен» или «совершение». В широком общеупотребительном смысле термин используется для обозначения любой операции по обмену данными, в следствие которого в систему были внесены изменения. Сегодня это слово чаще всего употребляется в финансовой сфере и обозначает операцию, по итогу которой изменились банковские счета участников. До сих про не существует точного произношения, и в официальных документах, сопровождающих финансовые операции Вы можете встретить два варианта:
Разницы между ними нет, оба варианта используются равноправно. Наиболее употребительным этот термин является при обозначении операций, связанных с банками или биржами ценных бумаг. К транзакциям принято относить следующие операции:
Термины и определения
В связи с этим принято делить транзакции на два вида, в зависимости от условий проведения сделки и личного участия сторон:
1. Онлайн-транзакции. Операции, которые проводятся через посредника или напрямую, но обязательно в реальном времени, при этом участники сделки могут находиться на разных концах земного шара. К таким операциям относятся:
2. Оффлайн-транзакции. Операции, которые предполагают задержку по времени и необязательное участие сторон в одновременном совершении сделки. Таким образом происходит зачисление зарплаты работникам или списание суммы по безналичному расчету, производимому предприятиям, например, в рамках, централизованных гос.закупок.
С развитием современных технологий использование онлайн-транзакций с каждым днем становится безопаснее. Для проведения банковских операций онлайн уже существует много проверенных и защищенных методов, в результате чего обе стороны гарантированно совершают безопасную сделку. Чтобы иметь представление о транзакции, стоит подробнее рассмотреть на одном типичном примере механизм, по которому происходит финансовые операции подобного рода. Для этого подойдет механизм оплаты покупки в магазине при помощи пластиковой карты. Операция происходит в четыре обязательных этапа.
Прежде всего, стоит понимать, что сделка происходит не между человеком и магазином, а между двумя банками:
Суть операции заключается в следующем:
Представленная типичная ситуация — это яркий пример сложной работы банковских систем. Стоит учесть, что в минуту времени на всей планете происходит около миллиона подобных операций, чтобы понять масштаб невидимого обмена данными. Благодаря современным технологиям, такие сложные сделки для конечных пользователей занимают всего несколько секунд и при этом являются совершенно безопасными, гарантируя обеим сторонам конфиденциальность и полную сохранность личных данных.
Транзакция — это набор операций по работе с базой данных (БД), объединенных в одну атомарную пачку.
Транзакционные базы данных (базы, работающие через транзакции) выполняют требования ACID, которые обеспечивают безопасность данных. В том числе финансовых данных =) Поэтому разработчики их и выбирают.
Я расскажу о том, что такое транзакция. Как ее открыть, и как закрыть. И почему это важно — закрывать транзакцию. И тогда при написании запросов к базе у вас будет осознанное понимание, что происходит там, под капотом, и зачем же нужен этот обязательный коммит после апдейта.
Содержание
Что такое транзакция
Транзакция — это архив для запросов к базе. Он защищает ваши данные благодаря принципу «всё, или ничего».
Представьте, что вы решили послать другу 10 файликов в мессенджере. Какие есть варианты:
Кинуть каждый файлик отдельно.
Сложить их в архив и отправить архив.
Вроде бы разницы особой нет. Но что, если что-то пойдет не так? Соединение оборвется на середине, сервер уйдет в ребут или просто выдаст ошибку.
В первом случае ваш друг получит 9 файлов, но не получит один.
Во втором не получит ничего. Нет промежуточных состояний. Или получил всё, или не получил ничего. Но зато если произошла ошибка, вы снова перешлете сообщение. И друг получит все файлики разом, не придется проверять «не потерялся ли кто».
Казалось бы, ну недополучил файлик, что с того? А если это критично? Если это важные файлики? Например, для бухгалтерии. Потерял один файлик? Значит, допустил ошибку в отчете для налоговой. Значит, огребешь штраф и большие проблемы! Нет, спасибо, лучше файлы не терять!
И получается, что тебе надо уточнять у отправителя:
— Ты мне сколько файлов посылал?
— Да? У меня только 9. Давай искать, какой продолбался.
И сидите, сравниваете по названиям. А если файликов 100 и потеряно 2 штуки? А названия у них вовсе не «Отчет 1», «Отчет 2» и так далее, а «hfdslafebx63542437457822nfhgeopjgrev0000444666589.xml» и подобные. Уж лучше использовать архив! Тогда ты или точно всё получил, или не получил ничего и делаешь повторную попытку отправки.
Так вот! Транзакция — это тот же архив для запросов. Принцип «всё, или ничего». Или выполнены все запросы, которые разработчик упаковал в одну транзакцию, или ни один.
Допустим, вы переводите все деньги с одной карточки на другую. Выглядит это «внутри» системы как несколько операций:
delete from счет1 where счет = счет 1
insert into счет2 values (‘сумма’)
Принцип «всё или ничего» тут очень помогает. Было бы обидно, если бы деньги со счета1 списались, но на счет2 не поступили. Потому что соединение оборвалось или вы в номере счета опечатались и система выдала ошибку.
Но благодаря объединению запросов в транзакцию при возникновении ошибки зачисления мы откатываем и операцию списания. Деньги снова вернулись на счет 1!
Если говорить по-научному, то транзакция — упорядоченное множество операций, переводящих базу данных из одного согласованного состояния в другое. Согласованное состояние — это состояние, которое подходит под бизнес-логику системы. То есть у нас не остается отрицательный баланс после перевода денег, номер счета не «зависает в воздухе», не привязанный к человеку, и тому подобное.
Как отправить транзакцию
Чтобы обратиться к базе данных, сначала надо открыть соединение с ней. Это называется коннект (от англ. connection, соединение). Коннект — это просто труба, по которой мы посылаем запросы.
Чтобы сгруппировать запросы в одну атомарную пачку, используем транзакцию. Транзакцию надо:
Выполнить все операции внутри.
Как только мы закрыли транзакцию, труба освободилась. И ее можно переиспользовать, отправив следующую транзакцию.
Можно, конечно, каждый раз закрывать соединение с БД. И на каждое действие открывать новое. Но эффективнее переиспользовать текущие. Потому что создание нового коннекта — тяжелая операция, долгая.
При настройке приложения администратор указывает, сколько максимально открытых соединений с базой может быть в один момент времени. Это называется пул соединений — количество свободных труб.
Разработчик берет соединение из пула и отправляет по нему транзакцию. Как только транзакция закрывается (неважно, успешно она прошла или откатилась), соединение возвращается в пул, и его может использовать следующая бизнес-операция.
Как открыть транзакцию
Зависит от базы данных. В Oracle транзакция открывается сама, по факту первой изменяющей операции. А в MySql надо явно писать «start transaction».
Как закрыть транзакцию
Тут есть 2 варианта:
COMMIT — подтверждаем все внесенные изменения;
ROLLBACK — откатываем их;
И вся фишка транзакционной базы в том, что база сначала применяет запрос «виртуально», реально ничего в базе не изменив. Ты можешь посмотреть, как запрос изменит базу, ничего при этом не сохраняя.
Например, я пишу запрос:
Запрос выполнен успешно, хорошо! Теперь, если я сделаю select из этой таблицы, прям тут же, под своим запросом — он находит Иванова! Я могу увидеть результат своего запроса.
Но! Если открыть графический интерфейс программы, никакого Иванова мы там не найдем. И даже если мы откроем новую вкладку в sql developer (или в другой программе, через которую вы подключаетесь к базе) и повторим там свой select — Иванова не будет.
А все потому, что я не сделала коммит, не применила изменения:
Я могу добавить кучу данных. Удалить полтаблицы. Изменить миллион строк. Но если я закрою вкладку sql developer, не сделав коммит, все эти изменения потеряются.
Когда я впервые столкнулась с базой на работе, я часто допускала такую ошибку: подправлю данные «на лету» для проведения теста, а в системе ничего не меняется! Почему? Потому что коммит сделать забыла.
На самом деле это удобно. Ведь если ты выполняешь сложную операцию, можно посмотреть на результат. Например, удаляем тестовые данные. Написали кучу условий из серии:
И фамилия = «Тестовый»
Удалили. Делаем select count — посмотреть количество записей в таблице. А там вместо миллиона строк осталось 100 тысяч! Если база реальная, то это очень подозрительно. Врядли там было СТОЛЬКО тестовых записей.
Проверяем свой запрос, а мы там где-то ошиблись! Вместо «И» написали «ИЛИ», или как-то еще. Упс. Хорошо еще изменения применить не успели. Вместо коммита делаем rollback.
Тут может возникнуть вопрос — а зачем вообще нужен ROLLBACK? Ведь без коммита ничего не сохранится. Можно просто не делать его, и всё. Но тогда транзакция будет висеть в непонятном статусе. Потому что ее просто так никто кроме тебя не откатит.
Или другой вариант. Нафигачили изменений:
Поменять код города с 495 на 499;
Но видим, что операцию надо отменять. Проверочный select заметил, что база стала неконсистентной. А мы решили «Ай, да ладно, коммит то не сделали? Значит, оно и не сохранится». И вернули соединение в пул.
Следующая операция бизнес-логики берет это самое соединение и продолжает в нем работать. А потом делает коммит. Этот коммит относился к тем 3 операциям, что были внутри текущей транзакции. Но мы закоммитили еще и 10 других — тех, что в прошлый раз откатить поленились. Тех, которые делают базу неконсистентной.
Так что лучше сразу сделайте откат. Здоровей система будет!
Итого
Транзакция — набор операций по работе с базой данных, объединенных в одну атомарную пачку.
Одной операции всегда соответствует одна транзакция, но в рамках одной транзакции можно совершить несколько операций (например, несколько разных insert можно сделать, или изменить и удалить данные. ).
Чтобы отправить транзакцию к базе, нам нужно создать соединение с ней. Или переиспользовать уже существующее. Соединение называют также коннект (англ connection) — это просто труба, по которой отправляются запросы. У базы есть пул соединений — место, откуда можно взять любое и использовать, они там все свободные.
В некоторых системах транзакцию нужно открыть, в других она открывается сама. А вот закрыть ее нужно самостоятельно. Варианты:
COMMIT — подтверждаем все внесенные изменения;
ROLLBACK — откатываем их;
Делая комит, мы заканчиваем одну бизнес-операцию, и возвращаем коннект в пул без открытой транзакции. То есть просто освобождаем трубу для других. Следующая бизнес-операция берет эту трубу и фигачит в нее свои операции. Поэтому важно сделать rollback, если изменения сохранять не надо. Не откатите и вернете соединение в пул? Его возьмет кто-то другой и сделает коммит. Своих изменений, и ваших, неоткаченных.
Не путайте соединение с базой (коннект) и саму транзакцию. Коннект — это просто труба, операции (update, delete…) мы посылаем по трубе, старт транзакции и commit /rollback — это группировка операций в одну атомарную пачку.
См также:
Блокировки транзакций — что может пойти не так при одновременном редактировании
Значения некоторых банковских терминов не до конца понятны отдельной части потребителей услуг. В процессе пользования пластиковыми картами держатели сталкиваются с понятием «транзакция», но что это такое и какое у него точное определение, известно не всем.
Транзакция — что это такое
Сервис Brobank.ru выяснил, что правильное написание термина — «трансакция», от английского слова «transaction» (дело, соглашение, сделка). Но в таком виде его даже профессионалы употребляют крайне редко, так как в обиход плотно вошло альтернативное определение.
Применительно к банковскому сегменту, политике и юриспруденции должна применяться формулировка «трансакция». Написание в другом виде относится к программированию. При этом «транзакция» широко используется в банковской и финансовой сфере, поэтому серьезной ошибкой использование термина в таком виде, не является.
Банковская транзакция — перевод средств со счета на счет и любая сделка, совершенная с использованием банковского счета или карты.
Этим определением принято характеризовать операции следующих видов:
Оплата любого товара в магазине считается полноценной транзакцией: когда деньги с одного счета поступают на другой. Наиболее распространенным видом признается банковская транзакция.
Что такое транзакция по банковской карте
По одной банковской карте в день может быть обработано несколько транзакций. Держатели совершают переводы, оплачивают покупки, получают пенсию и заработную плату. Конечная обработка операция означает, что транзакция совершена (завершена). К примеру, покупка по карте в ближайшем магазине представляет собой достаточно серьезный с технической точки зрения процесс.
Начинается процесс с того, что покупатель прикладывает пластик к платежному терминалу. Другой способ оплаты — использование технологии бесконтактной оплаты NFC. Затем в целях проверки информация из терминала оплаты передается в банк-эквайер, с которым сотрудничает торговая точка.
Приняв данные от терминала, банк-эквайер передает их в платежную систему, которая также проверяет информацию. Следующая точка — процессинговый центр банка-эмитента, выпустившего карту. Здесь операция проверяется на легальность, а также сверяется правильность введенного клиентом ПИН-кода. Если все совпадает, то информация опять же через платежную систему передается в торговую точку — на терминал оплаты.
Именно так совершается привычная всем транзакция. Далее между эмитентом, эквайером и платежной системой производятся некоторые взаиморасчеты, в которых держатель карты не принимает прямого участия.
Что такое офлайн-транзакция
Выше описан пример онлайн-транзакции, которая совершается в течение секунды, если терминал оплаты работает исправно. Намного менее распространены офлайн-транзакции, суть которых заключается в следующем:
Подобный механизм применяется по картам с заранее одобренным банком лимитом средств, а также при сохранении данных платежного средств в памяти POS-терминала. Деньги со счета списываются не сразу, а позже, когда терминал передаст всю накопленную информацию в банк-эквайер.
Такая же схема применяется по подарочным картам, на которых размещена определенная сумма средств для совершения покупок в конкретной торговой точке. И в этом случае транзакция совершается без дополнительных проверок.
Что такое Secure Electronic Transaction
Secure Electronic Transaction (сокр. SET) — безопасные электронные транзакции, производимые по специальному протоколу при применении банковских карт в небезопасных сегментах — в частности, в Интернете. Благодаря этой технологии клиенты интернет-магазинов могут не беспокоиться за сохранность собственных или кредитных средств на карте.
Но большого развития данная технология не получила. К примеру, платежная система VISA разрабатывает и продвигает собственный XML-протокол — 3-D Secure. Его суть заключается в том, что списание с карты совершается после смс-подтверждения со стороны ее владельца.
Транзакция — это логически завершённая банковская операция, в процессе осуществления которой происходит перевод определённой суммы денег с одного счёта на другой.
Проще говоря, оплата покупки при помощи карты — это транзакция. Зачисление заработной платы на банковскую карту — тоже. Как и перевод денег с одного банковского счёта на другой и получение наличных через банкомат.
Пример употребления на «Секрете»
«По объёму безналичных расчётов Россия обгоняет крупнейшие экономики мира — США, Великобританию и Германию. По словам главы экспертной практики BCG по цифровым технологиям в России и СНГ Макса Хаузера, в 2010 году РФ была одной из стран с самыми низкими показателями карточных транзакций на душу населения. От мирового лидера Норвегии она отставала в 40 раз, сообщил РБК. Но за последние 10 лет Россия сократила отставание в полтора раза и теперь уступает лишь странам Северной Европы».
(Из новости о том, что европейский центр торговли криптовалютами решил навести порядок на рынке.)
Нюансы
Транзакции проводят не только с обычными деньгами, но и с криптовалютами. Такие транзакции стали проводить даже классические платёжные системы — например, Visa.
Учёные подсчитали, что в 2020 году сеть биткоинов обработала около 112,5 млн транзакций. На основе этих данных оказалось, что каждая транзакция создаёт 272 грамма отходов — это вес двух iPhone 12 mini.
Термин «транзакция» происходит от латинского transactio, что в переводе означает «соглашение» или «обмен».