|
|
|
Канал Игры Мечты: «Два пути - количество или качество игр» |
|
|
Shirson
1605 EGP
           Рейтинг канала: 7(626) Репутация: 219 Сообщения: 16511 Откуда: 79°W 44°N Зарегистрирован: 29.01.2002
 |
|
Minx : |
т.е. например есть две операции из разных точек X и Y: одновременно два человека ложат на один и тот же счет по 1000$.
Алгоритм:
1. Считать состояние счета.
2. Прибавить 1000$.
3. Записать результат в счет.
Без транзакции:
1. X считывает текущее состояние счета (A).
2. Y считывает текущее состояние счета (A).
3. X прибавляет 1000$ (A+1000$). Записывает на счет A+1000$.
4. Y прибавляет 1000$ (A+1000$). Записывает на счет A+1000$.
Результат - на счете A+1000$ вместо ожидаемого A+2000$.
Нарушение целостности/инварианта - дебет с кредитом у сторон не сходится.
С транзакцией:
1. Старт транзакции X. X считывает текущее состояние счета (A).
2. Попытка старта транзакции Y. Ожидание.
3. X прибавляет 1000$ (A+1000$). Записывает на счет A+1000$. COMMIT.
4. Просыпается Y. Y считывает текущее состояние счета (A + 1000$).
5. Y прибавляет 1000$ (A+2000$). Записывает на счет A+2000$. COMMIT.
6. PROFIT.
Вообще, я даже в двух местах типа учебников этот пример с банкоматами как необходимость синхронизации/транзакционности видел.
|
Ээто адовый писец, за который нужно распинать вниз головой, и с особой жестокостью за помещение ТАКОГО в учебники
Отсюда же, видимо, растут ноги бреда, когда в фильмах показывают прогрессбары по заливке долларов (по одному, видмо), бреда про навар банков с окрглений и прочей бредовой ереси
Вся банковскася система построена на проводках (это парадигма такая, считай). То, что дают бухгалтерам чуть ли не на первом же занятии по освоению бухгалтерсокого учёта. Никаких прибавлений, никаких отниманий - только проводки, на основе которых уже строится аналитика и можно выяснить сколько средств на счету и пр.
1. Начало транзакции
2. Запись проводки, с данными (Номер счёта From) (Номер счёта To) (Сумма проводки)
3. Окончание транзакции.
Да, вот теперь профит.
_________________ У меня бисера не доxеpа.
Последний раз редактировалось: Shirson (21:15 21-10-2015), всего редактировалось 1 раз |
|
|
Minx
1011 EGP
        Рейтинг канала: 6(332) Репутация: 139 Сообщения: 10548 Откуда: Gomel, Belarus Зарегистрирован: 19.11.2005
 |
|
Shirson : |
Вся банковскася система построена на проводках (это парадигма такая, считай).
|
Не знаю как там у Канади, но в банковской IT СНГ, к которой я имею непосредственное отношение, банкоматы работают по-другому.
Shirson : |
1. Начало транзакции
2. Запись проводки, с данными (Номер счёта From) (Номер счёта To) (Сумма проводки)
3. Окончание транзакции.
|
Без транзакции легко одна проводка записывается поверх другой проводки и 1000$ теряются.
Так что за целостной ссылочностью нужно следить (;
В общем случае, пример с банкоматами это абстрактный пример в вакууме, на пальцах. Реальные системы сложнее, и там ошибка может привести например к рассылке неправильных СМС на пару миллионов абонентов.
_________________ μηδείς αγεωμέτρητος εισίτω |
|
|
Shirson
1605 EGP
           Рейтинг канала: 7(626) Репутация: 219 Сообщения: 16511 Откуда: 79°W 44°N Зарегистрирован: 29.01.2002
 |
|
Minx : |
Shirson : |
Вся банковскася система построена на проводках (это парадигма такая, считай).
|
Не знаю как там у Канади, но в банковской IT СНГ, к которой я имею непосредственное отношение, банкоматы работают по-другому.
|
Я говорю про банковскую систему, как такову. И работает она проводках (в том или ином виде) везде. Херзнаетсколько лет это работало и в казахстанских банках, которые вполне себе относятся к СНГшным.
Если где-то система построена иначе, дайте спиок банков, я их в чёрный список занесу и других предупрежу
Цитата: |
Shirson : |
1. Начало транзакции
2. Запись проводки, с данными (Номер счёта From) (Номер счёта To) (Сумма проводки)
3. Окончание транзакции.
|
Без транзакции легко одна проводка записывается поверх другой проводки и 1000$ теряются.
Так что за целостной ссылочностью нужно следить (;
|
По какой верх?
Цитата: |
В общем случае, пример с банкоматами это абстрактный пример в вакууме, на пальцах.
|
Хотя бы потому, что я говорил про банковскую систему, а не банкомат, например
_________________ У меня бисера не доxеpа. |
|
|
Sh.Tac.
151 EGP
  Рейтинг канала: 5(108) Репутация: 14 Сообщения: 1426
Зарегистрирован: 27.07.2005
 |
|
я вот в банке не работал, тока слышал, что там по каждому счёту раздельно ведётся дебет и кредит т.е. фактически те же самые проводки разных знаков
и про колоссальный объём биллинговых баз которые пухнут на каждый копеечный чих, думаю все слышали
а в геймдеве хорошо, если signed и fixed point для игровой валюты
_________________ This is what you get ...
(c) Radiohead |
|
|
Shirson
1605 EGP
           Рейтинг канала: 7(626) Репутация: 219 Сообщения: 16511 Откуда: 79°W 44°N Зарегистрирован: 29.01.2002
 |
|
Двойная запись - запросто.
А чтоб билинговые базы не пухли, делают фиксацию остатаков на какой-то момент и предыдущую историю сбрасывают в архив.
Опять же, в геймдеве - смотря что девить Если что-то вроде EVE, то вполне может быть и не всё так просто
_________________ У меня бисера не доxеpа. |
|
|
Minx
1011 EGP
        Рейтинг канала: 6(332) Репутация: 139 Сообщения: 10548 Откуда: Gomel, Belarus Зарегистрирован: 19.11.2005
 |
|
Shirson : |
И работает она проводках (в том или ином виде) везде.
|
а-а... провОдка!
Кароч.. спать пора.. (;
Например проводки хранятся в таблице, каждая запись свой ID.
ID выдается процедурой
UPDATE TABLE SET ID=ID+1
SELECT ID FROM TABLE
если выдача ID не синхронизирована, то получим два одинаковых ID для разных операций. Со всеми вытекающими.
_________________ μηδείς αγεωμέτρητος εισίτω |
|
|
Sh.Tac.
151 EGP
  Рейтинг канала: 5(108) Репутация: 14 Сообщения: 1426
Зарегистрирован: 27.07.2005
 |
|
думаю swift как раз генерит уникальные номера и хранит свою копию, и также своя копия в банке держателя счёта, а то подрисовывали бы тока в путь
_________________ This is what you get ...
(c) Radiohead |
|
|
Shirson
1605 EGP
           Рейтинг канала: 7(626) Репутация: 219 Сообщения: 16511 Откуда: 79°W 44°N Зарегистрирован: 29.01.2002
 |
|
Minx : |
Например проводки хранятся в таблице, каждая запись свой ID.
ID выдается процедурой
UPDATE TABLE SET ID=ID+1
SELECT ID FROM TABLE
|
Мля... это даже не индусский код, это вообще что-то за пределами добра и зла...
Цитата: |
если выдача ID не синхронизирована, то получим два одинаковых ID для разных операций. Со всеми вытекающими.
|
Всмысле, химичейской кастрацией девелопера и архитектора, чтоб пресечь распространение этого на генетическом уровне? Это да, правильно вытекающие последствия
_________________ У меня бисера не доxеpа.
Последний раз редактировалось: Shirson (00:03 22-10-2015), всего редактировалось 2 раз(а) |
|
|
Minx
1011 EGP
        Рейтинг канала: 6(332) Репутация: 139 Сообщения: 10548 Откуда: Gomel, Belarus Зарегистрирован: 19.11.2005
 |
|
Как бы в самом начале ещё сказал:
Minx : |
Транзакционность и обеспечение целостности/инвариантов в БД это основы. Без них в БД вообще лучше не лезть.
|
А если в геймдеве немного по-другому, я ж особо не спорю. Жирафу видней (с)
_________________ μηδείς αγεωμέτρητος εισίτω |
|
|
Sh.Tac.
151 EGP
  Рейтинг канала: 5(108) Репутация: 14 Сообщения: 1426
Зарегистрирован: 27.07.2005
 |
|
Minx : |
А если в геймдеве немного по-другому, я ж особо не спорю
|
там мало у кого банковский опыт, наоборот пожалста, неленивые кодеры любому банку пригодятся
и то такого нет, используется какой-нибудь sequence из постгреса, причём выделяется сразу квота номеров для каждого игрового сервера, по мере расходования они запрашиваются вновь, если один из серверов упал, выделенная квота безвозвратно теряется
_________________ This is what you get ...
(c) Radiohead |
|
|
БулерМэн
420 EGP
   Рейтинг канала: 2(21) Репутация: 68 Сообщения: 1580 Откуда: Гороховец Зарегистрирован: 07.02.2006
 |
|
За сим делаю вывод, программеры в банках - пришли из геймдева
|
|
|
Minx
1011 EGP
        Рейтинг канала: 6(332) Репутация: 139 Сообщения: 10548 Откуда: Gomel, Belarus Зарегистрирован: 19.11.2005
 |
|
Все мы родом из детства (с)
_________________ μηδείς αγεωμέτρητος εισίτω |
|
|
|
|
|
Канал Игры Мечты: «Два пути - количество или качество игр» |
|