|
Двусторонний обмен данными между разными базами
|
|||
---|---|---|---|
#18+
Добрый день! Не знал куда именно написать, решил сюда, т.к. думаю реализация будет на PHP или Python По сути: Имеется база на хостинге, база на Postgres. На другом хостинге имеется сайт с базой MySQL. Цель: Нужно взять часть данных из postgres заранее сделать выборку по условию после передать через интернет во вторую базу и положить их туда. Также хочу чтобы при изменении значения в поле кол-ва данные обновлялись. Вопросы: 1. Не смог найти актуальную информацию 2. С чего начать? 3. На чем реализовать? (Неплохие знания только по PHP, # и Python - слабовато но поднапречся можно) ... |
|||
:
Нравится:
Не нравится:
|
|||
24.11.2017, 08:47 |
|
Двусторонний обмен данными между разными базами
|
|||
---|---|---|---|
#18+
Den_KP, делал нечто похожее год назад на PHP, формат данных JSON. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.11.2017, 09:26 |
|
Двусторонний обмен данными между разными базами
|
|||
---|---|---|---|
#18+
А что к чему и как делал? Можешь описать логику и шаги? ... |
|||
:
Нравится:
Не нравится:
|
|||
24.11.2017, 09:29 |
|
Двусторонний обмен данными между разными базами
|
|||
---|---|---|---|
#18+
Разово перенести надо или чтобы постоянно синхронизировалось? ... |
|||
:
Нравится:
Не нравится:
|
|||
24.11.2017, 09:52 |
|
Двусторонний обмен данными между разными базами
|
|||
---|---|---|---|
#18+
Den_KP, операцию делал 2 раза. Из выборки формировал строку JSON, потом на другом серваке этот JSON преобразовывался в кучу insert-ов. Данные передавались через защищенный VNP-канал. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.11.2017, 11:41 |
|
Двусторонний обмен данными между разными базами
|
|||
---|---|---|---|
#18+
Hett, На постоянной основе. С началом, немного понял. Если не прав поправьте пожалуйста: Первоначально я выгружу руками чтобы таблицы были одинаковые по кол-ву 1. Делаю php с коннектом и селектом данных(которые были изменены, реакция на изменение или добавление или временное), отправляю данные во вторую базу 2. На второй базе создаю тоже php который будет получать данные, после коннектиться в базу находить нужный ключ и парсить нужные значения. P.S. Не уверен в реализации 1-го шага, как раз неуверен насчет реакции на событие ... |
|||
:
Нравится:
Не нравится:
|
|||
24.11.2017, 12:33 |
|
Двусторонний обмен данными между разными базами
|
|||
---|---|---|---|
#18+
user89, А можно поподробнее...... ... |
|||
:
Нравится:
Не нравится:
|
|||
24.11.2017, 12:35 |
|
Двусторонний обмен данными между разными базами
|
|||
---|---|---|---|
#18+
А одинаковые СУБД взять и настроить нормальную репликацию никак? ... |
|||
:
Нравится:
Не нравится:
|
|||
24.11.2017, 13:07 |
|
Двусторонний обмен данными между разными базами
|
|||
---|---|---|---|
#18+
К сожалению разные ИС. И разве репликация будет работать через интернет? ... |
|||
:
Нравится:
Не нравится:
|
|||
24.11.2017, 14:41 |
|
Двусторонний обмен данными между разными базами
|
|||
---|---|---|---|
#18+
Den_KP, И по структуре это разные базы, нужно взять только небольшую часть, часть где указывается количество. фактически поля ID, Name,count ... |
|||
:
Нравится:
Не нравится:
|
|||
24.11.2017, 14:44 |
|
Двусторонний обмен данными между разными базами
|
|||
---|---|---|---|
#18+
Den_KP, Казалось бы, чего тут сложного. Коннект к одной базе, селект, сохранение данных в буфере. Коннект к дугой, данные из буфера заинсертить. Как связать серверы - есть варианты от "открыть доступ к СУБД наружу" до VPN или SSH-туннелей. А можно через вебсервер передать POST-запросом с соблюдением некоторых ограничительных мер. Тут мало интересного. Другое дело, переливать ли всю большущую таблицу (или определенные её столбцы) целиком или только добавленные/изменившиеся строки. А ещё ж записи могут быть и удалены. Как узнать, что именно изменилось - вести лог изменений или, может, проще копию изменений делать в отдельных таблицах. Вопрос целостности данных, опять же. Прелили, к примеру, таблицу А, потом Б, а на таблице В то ли канал сдох, то ли сервер в ребут ушел... Сразу и не понятно, с какой точки продолжать процесс и как. В этом смысле, наверно, надежнее будет перегонять набор взаимосвязанных записей из разных таблиц (вроде транзакции). Опять же, какой-то лог синхронизации должен быть, наверно, чтобы после восстановления продолжить (сам лог тоже, кстати, при аварии может не записаться при самом отвратном стечении обстоятельств). Ну и приоритеты, когда одна и та же запись обновилось на обоих серверах и поля приняли различные значения - кто тут главнее будет при синхронизации. Давно как-то решал немного похожую задачу (раз в сутки делать копию некоторых таблиц). Если интересно, сделал вот каким образом. По крону на одном сервере скриптом формировал файлик с текстом SQL-запросов (по сути, дамп), потом этот файлик и другой, с контрольной суммой (вроде, хеш md5 использовал), по FTP закидывал на другой сервер. Там, тоже по крону запускался скрипт, проверял наличие файла в обусловленном месте, его контрольную сумму, отрабатывал запросы, и, при успешном завершении, удалял присланные файлы. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.11.2017, 22:54 |
|
Двусторонний обмен данными между разными базами
|
|||
---|---|---|---|
#18+
vkle, Спасибо за рассуждение, да именно такие мысли приходят, непонятно за что взяться и какую методику использовать. Исходя из ограничений, насчет крона отличная идея на первом это реально сделать, только вопрос как на второй передать, т.к. там виртуальный хостинг. Проблема заключается еще в том, что какой объем передавать, это Вы тоже затронули, я думаю стоит попробовать передавать только те данные которые изменились в базе за определенное время. Если крон каждый час работает, тогда и данные передавать часовой разницы. Много вопросов, буду думать, пробовать, спасибо что направили на какие то пути реализации, буду отписываться тут! ... |
|||
:
Нравится:
Не нравится:
|
|||
26.11.2017, 09:00 |
|
Двусторонний обмен данными между разными базами
|
|||
---|---|---|---|
#18+
Я у себя делал так: При внесении в таблицу данных или их изменения,удаления , я сразу-же формировал sql запрос для второго сервера и помещал его в отдельную таблицу. она имена формат id,sql,status и по крону раз в х минут данные переносил с нужными лимитами (если таблицы массивные,статьи,картинки, то за раз 1-2) Из минусов конечно если статью отредактировали 2-3 раза, то на том сервере придется выполнить те-же 2-3 запроса. Репликацию это конечно-же не заменит, но вот целостность данных обеспечивает т.к. после того как сервер принял данные, от возвращает ответ, и если "ок", то ставим статус, что запрос выполнен., если что-то пошло нет так, не дошел ответ например, то лучше 2 раза выполнить запрос, чем не внести изменения. Конечно это увеличивает нагрузку на базу ведущего сервера. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.11.2017, 05:05 |
|
|
start [/forum/topic.php?fid=23&msg=39559304&tid=1460440]: |
0ms |
get settings: |
9ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
67ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
49ms |
get tp. blocked users: |
1ms |
others: | 316ms |
total: | 477ms |
0 / 0 |