Привет.
Сабж по теме, есть две БД MySQLi одна на локалхосте, другая удаленная, работать с ней предполагаю по SSH тунеллю.
Вопрос вот в чем.
Делаю несколько взаимосвязанных INSERT`ов за один запуск скрипта, делаю с транзакциями. Тестирую на локалхосте, создав две разных БД. Создал для них два разных подключения (через два разных объекта соответственно):
Перед началом операций дублирую:
mysqli1::query("START TRANSACTION");
mysqli2::query("START TRANSACTION");
//INSERT
//INSERT
//UPDATE
дальше также двойной COMMIT или двойной ROLLBACK т.е. для каждого подключения.
Вроде всяко уже потестил, все прекрасно работает.
Вопрос: Есть ли вообще какие-то подводные камни в таком подходе и возможные сложности при работе с удаленной БД?
Спасибо.
_____________
Не тот велик, кто не падал, а тот кто падал и поднимался.
В твоем варианте, при двух подключениях только так и получится сделать.
А внутри одного подключения, можно делать один TRANSACTION между разыми БД.
_____________
Mysql, Postgresql, Redis, Memcached, Unit Testing, CI, Kohana, Yii, Phalcon, Zend Framework, Joomla, Open Cart, Ymaps, VK Api
T1grOK
Спасибо
_____________
Не тот велик, кто не падал, а тот кто падал и поднимался.
Смотря для чего используется 2 разные БД. Если зеркальные копии, тогда нет никаких сложностей. Если предположить что одна БД будет хранить одни данные, другая другие - тогда возникнут сложности с синхронизацией.
Цитата |
Проблема будет, если один коммит пройдет, а второй нет. |
MiksIr
гм...не совсем понимаю. Если дело дошло до обоих коммитов (т.к. они рядом стоят в одних условиях в одном месте), то строки уже вставились, т.е. они же как бы лишь подтверждают, что все в порядке, а не дают добро.
Это ведь только ROLLBACK дает команду все откатить назад...строки удалить/переобновить.
Как я понимаю во всяком случае.
_____________
Не тот велик, кто не падал, а тот кто падал и поднимался.
Цитата |
Смотря для чего используется 2 разные БД. Если зеркальные копии, тогда нет никаких сложностей. Если предположить что одна БД будет хранить одни данные, другая другие - тогда возникнут сложности с синхронизацией. |
Мне кажется в точности наоборот.
Если б они были зеркальными следовало бы наверное сделать через репликацию, чтоб синхронизацию делать, а так, то если данные разные. Какая тут синхронизация.
_____________
Не тот велик, кто не падал, а тот кто падал и поднимался.
Цитата |
Банально коннект порвался с удаленной базой, или с субд что-то произошло. |
гм...а если так:
if(mysqli1::query("COMMIT"))mysqli2::query("COMMIT");
_____________
Не тот велик, кто не падал, а тот кто падал и поднимался.
если на одном соединении коммит отвалился, то второй нужно ролбачить. а вот если первый прошел, а второй отвалился, тогда хз
Ну второй все таки на локалхосте....как-то кратно надежнее вроде, от сетки не зависит да и контролировать легче.
В общем всем спасибо. Примерно так и сделаю, как запланировал.
_____________
Не тот велик, кто не падал, а тот кто падал и поднимался.
Быстрый ответ:
Powered by dgreen
Здесь расположена полная версия этой страницы.