одновременно выполнить транзакции. Т.е какая-то будет видна раньше, а какая-то позже. Получается, что не будет атомарности? в какой-то момент можно увидеть только часть изменений
Какое отношение имеет видимость к атомарности?
2фазный комит к видимости никак не относится (он её не меняет)
хороший вопрос. с одной стороны можно смотреть на атомарность, как гарантию того, что применится все или ничего. и в таком понимании 2PC согласуется с этим. Но вот в той же вики в теме про Атормарность ест и такие слова " As a consequence, the transaction cannot be observed to be in progress by another database client" . А в случает 2PC выходит, что я могу это увидеть. в одной системе я увижу данные уже закомиченными, а в другой еще не. Т.е я увижу как раз тот самый progress транзакции . https://en.wikipedia.org/wiki/Atomicity_(database_systems)
почему? если у меня 2 системы. Допустим, что в одной системе, я записываю 1 insert, а в другой другой инсерт. всего у меня 2 Insert. Т.е должен я увидеть сразу 2 строки. А так получается, что я могу их проверить и увижу только 1... а потом через какое-то время увижу уже 2.
Ты это про распределённые транзакции, видимо. А сначала ты про 2PC спрашивал.
> А в случает 2PC выходит, что я могу это увидеть. Не выходит. "Половину" транзакции Вы не увидите. > в одной системе я увижу данные уже закомиченными, а в другой еще не. Да, и это нормально. > Т.е я увижу как раз тот самый progress транзакции . Нет. Никакой "распределённой ACID транзакции" в 2PC нет, он именно и только про атомарность.
commit двух вазный, он же как часть транзакции. вот я как бы подразумеваю, что должны все свойства транзакций соблюдаться при таком коммите. может и не стоит делать таких ожидания?. но почему?
Это какой-то непонятный пример. В 2PC транзакция с одного узла распространяется на другие. Т.е. у неё нет независимых частей в разных системах.
т.е нет как бы нет одной транзакции? это у меня 2 разные транзакции. выходит, что так?
> вот я как бы подразумеваю Не подразумевайте, протоколы и алгоритмы дают только формально заявленные гарантии, кофе не варят. ;) > все свойства транзакций соблюдаться при таком коммите Опять-таки, никакой распределённой транзакции тут нет.
Я не знаю, как выходит в неясном примере. Нужно конкретные приводить в таких случаях — подобные темы и так достаточно сложны.
а можно ли тогда сделать распределенную транзакцию т.е транзакцию( когда несколько хостов, как в примере с этими 2мя инсертами). там ведь встанет этот же вопрос.
Все это ближе к репликации с гарантией доставки, чем к транзакции как таковой
Да, но для этого используются уже распределённые СУБД, т.е. одного только протокола atomic commit для этого недостаточно.
В общем, да (хотя не совсем то же самое).
Ты когда делаешь распред. транзакцию, она выполня... яется на нескольких базах данных. А ты смотришь всегда только на одну БД. Видимость оцениваешь в одной. Если будешь смотреть на несколько, то да, у тебя строк от двух INSERT в двух разных БД будет одновременно либо видно, либо нет (при условии конечно что данные БД поддерживают соотв. уровень изоляции, чтобы их было именно не видно)
Обсуждают сегодня