![]() |
|
Модераторы: skyboy, MoLeX, Aliance, ksnk |
![]()
|
|
| kulikoff |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 334 Регистрация: 5.11.2005 Где: Киев Репутация: нет Всего: 1 |
Помогите советом и идеей. У меня есть две независимые базы с описаниями товаров. Мне необходимо синхронизировать их по коду товара. Детальнее: в одной базе храниться полная инфа про овары. Мне необходиом по коду товара из одной базы в другую перекачивать некоторую инфу про эти товары. Как это лучше сделать? Мне ничего умнее, чем подключиться к одной базе, выбрать необходимую инфу, записать её в массив какой, отключиться от первой базы, подключиться ко второй и проапдейтить вторую базу информацией из этого массива. Насколько это рационально и нет ли способа попроще и понадежней?
|
|||
|
||||
| skyboy |
|
|||
|
неОпытный ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9820 Регистрация: 18.5.2006 Где: Днепропетровск Репутация: 14 Всего: 260 |
необязательно. памяти может не хватить для большой БД. учитывая, что mysql_query(конечно, если используешь MySQL) принимает в качестве параметра идентификатор подключения к БД, то в одном цикле можно перебросить все данные из одной базы в другую. однако, я не совсе понял, что тебе требуется. если полная замена(репликация снимками - snapshot replication), то в MySQL имеется вполне рабочий механизм для этих целей. Если же тебе необходимо сделать репликаю слиянием - т.е. данные из второй БД должны дополнить, а не заменить данные в первой БД, то, видимо, придется это делать циклом в скрипте... |
|||
|
||||
| flashaa |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 796 Регистрация: 7.3.2006 Репутация: 2 Всего: 25 |
Зачем для этого циклы, выборка? Существуют запросы, которые позволяют пересоздать таблицы по образу других и перекинуть данные. При этом никакой выборки не делается.
Вот эти запросы (возможно есть и более оптимальные для данной задачи):
|
|||
|
||||
| skyboy |
|
|||
|
неОпытный ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9820 Регистрация: 18.5.2006 Где: Днепропетровск Репутация: 14 Всего: 260 |
flashaa, только уточни, что это может помочь только в том случае, если таблицы находятся в пределах одной БД.
Если же используются разные БД, то в запросе надо указывать не только имя таблицы, но и имя БД. Если же БД находятся на разных серверах, то одним запросом не обойтись, насколько я знаю. А потому предложенный вариант быстрее, но может оказаться не рабочим |
|||
|
||||
| flashaa |
|
||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 796 Регистрация: 7.3.2006 Репутация: 2 Всего: 25 |
Пример для работы с двумя БД (на одном хосте).
Если 2 хоста, то можно слить дамп импортируемой базы, создать пустую базу, залить туда этот дамп. И вот инфа уже на одном хосте. Дальше можно использовать приведенные варианты.
Это сообщение отредактировал(а) flashaa - 31.10.2007, 12:44 |
||||
|
|||||
| kulikoff |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 334 Регистрация: 5.11.2005 Где: Киев Репутация: нет Всего: 1 |
Мне надо сделать обмен данными (там будет всё делаться через update) между базами, которые на разных серваках находятся...
|
|||
|
||||
| skyboy |
|
|||
|
неОпытный ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9820 Регистрация: 18.5.2006 Где: Днепропетровск Репутация: 14 Всего: 260 |
кстати, если на разных серверах, то тебе надо делать два скрипта: один отдает данные из своей БД, а второй эти данные принимает и вставляет. т.н. РНР-туннель. ибо, если речь о хост-серверах, то хостеры обычно ограничивают доступ к mysql только localhost'ом и удаленно подключиться не получится.
мне кажется, лучшим вариантом будет формирование xml, сжатие в gzip с последующей передачей по запросу. скрипт, который отсылает запрос, соотвественно, должен распаковать и для каждого элемента делать sql. я к тому, что при использовании xml можно унифицировать переброску - один алгоритм будет парсить xml и формировать адекватные запросы. а если передавать чистым текстом, то с единым алгоритмом пролетаем, придется на каждую таблицу свою функцию писать... Добавлено через 2 минуты и 7 секунд конечно, вариант, предложенный flashaa(с использованием mysqldump) тоже годится. в таком случае самому формировать данные в виде структуры и парсить не придется - с одной стороны скрипт создает дамп, с другой стороны скрипт просто выполняет содержимое дампа - и все. |
|||
|
||||
| kulikoff |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 334 Регистрация: 5.11.2005 Где: Киев Репутация: нет Всего: 1 |
А где можно почитать пор формирование xml и сжатие? Чтоб статья нормальная была, то в Гугле искал - куча воды и ничего толкового...
|
|||
|
||||
| flashaa |
|
||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 796 Регистрация: 7.3.2006 Репутация: 2 Всего: 25 |
Зачем иметь дело с запросом данных с несколькими серверами? Я полагаю если БД большая, то время выполнения скрипта будет намного больше 30 секунд. Запрос по созданию БД с несколькими таблицами будет занимать ~5-10 сек, а тут добавьте ещё запросы к удаленным серверам да ещё обернутые в скрипт PHP. Зачем вообще иметь дело со скриптом PHP для этой цели? Лучший способ для этого - использование административных утилит, либо прямой доступ к операционке сервера. Зачем XML ? Зачем эти сложности? Обсуждаемый вопрос вполне вписывается в возможности БД, никаких XML не надо, это как микроскопом гвозди забивать, вы уж извините. Это не скрипты. Это команды при доступе через SSH. (Команды ОС *nix). добавить сжатие с помощью них можно легко.
На счет синтаксиса gzip не помню, но суть такая.
Kulikoff, рекомендую ознакомиться с ssh-доступом. Не совсем понятно, что значит "независимые базы данных". Если бд настолько независимы, что находятся на разных хостингах, то есть смысл обратиться к одному из хостеров для получения дампа/ssh-доступа к вашему серверу. А вообще, надеюсь, что это разовая операция. Если не так, то надо серьезно пересмотреть организацию вашего проекта. Это сообщение отредактировал(а) flashaa - 2.11.2007, 17:32 |
||||
|
|||||
| kulikoff |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 334 Регистрация: 5.11.2005 Где: Киев Репутация: нет Всего: 1 |
flashaa, спасибо большое! Эта операция не разовая, но носит очень редкий характер, не чаще раза в три-четыре месяца... Я почитаю про ssh...
|
|||
|
||||
![]()
|
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | PHP: Базы Данных | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |