![]() |
|
Модераторы: skyboy, MoLeX, Aliance, ksnk |
![]()
|
|
| bars80080 |
|
|||
![]() прапор творюет ![]() ![]() ![]() ![]() Награды: 1 Профиль Группа: Завсегдатай Сообщений: 12022 Регистрация: 5.12.2007 Где: Königsberg Репутация: 9 Всего: 315 |
возник вопрос о сливе данных между серверами.
к примеру, есть сайтА, который пользуется некоторой базой. база постепенно растёт и перерастает объём, исчисляемый мегабайтами (возможно даже сотнями). хочется иметь дамп (копию БД) на сайтеБ, расположенном на другом сервере. причём достаточно актуальную. допустим раз в шесть часов будет происходить с сайтаБ на сайтА и скрипты будут сливать данные. однако, учитывая полный объём базы, не хотелось бы вешать систему перегоном лишних мегабайт, ведь за прошедшие шесть часов база могла прирасти всего на сотню килобайт, а скорее и того меньше. как сделать подобный частичный слив базы? пока единственное, что крутится в голове - задать каждой таблице поле с датой последней вставки/обновления и сливать строчки, основываясь на этой колонке. в связи с этим вопрос: не проставляется ли в таблице уже в каком-нибудь параметре (по дефолту) дата последнего обновления конкретной строки? |
|||
|
||||
| skyboy |
|
|||
|
неОпытный ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9820 Регистрация: 18.5.2006 Где: Днепропетровск Репутация: 14 Всего: 260 |
то, что ты хочешь сделать - переизобрести репликацию.
|
|||
|
||||
| bars80080 |
|
|||
![]() прапор творюет ![]() ![]() ![]() ![]() Награды: 1 Профиль Группа: Завсегдатай Сообщений: 12022 Регистрация: 5.12.2007 Где: Königsberg Репутация: 9 Всего: 315 |
воооот, есть качественная статья по этому поводу?
|
|||
|
||||
| bars80080 |
|
|||
![]() прапор творюет ![]() ![]() ![]() ![]() Награды: 1 Профиль Группа: Завсегдатай Сообщений: 12022 Регистрация: 5.12.2007 Где: Königsberg Репутация: 9 Всего: 315 |
репликация, судя по этому http://habrahabr.ru/blogs/mysql/56702/ , не совсем то
там под репликацией больше понимается полная синхронизация баз ради распределения нагрузки. плюс надо ещё сервер останавливать. я не думаю, что у меня будет такой глубокий доступ к серверу mysql, чтобы писать в нём всякие команды с другой стороны мне нужно гораздо проще - дамп на случай повреждения сервера, его блокады и полной потери данных. нужен всего лишь "примерно" актуальный дамп для последующего восстановления. и при этом ни в коем случае нигде на сайтеА или сервереА не должен быть прописан ip-адрес или ещё какие-нибудь данные сервера с сохранённым дампом. плюс, серверов скачивающих себе дамп может быть несколько |
|||
|
||||
| bars80080 |
|
|||
![]() прапор творюет ![]() ![]() ![]() ![]() Награды: 1 Профиль Группа: Завсегдатай Сообщений: 12022 Регистрация: 5.12.2007 Где: Königsberg Репутация: 9 Всего: 315 |
в общем, может я чего-то не дочитал, но у меня складывается такая вариация на данную тему
добавляем в таблицах, которые мы хотим дампить дополнительное поле - upd int. в конфиге прописываем список этих таблиц. далее, учитывая, что у меня все запросы INSERT и UPDATE идут через класс работы с БД, легко дописываем обновление поля upd для таблиц, которые его имеют, при каждой вставке или обновлении записи в таблице, записываем туда результат time(). теперь мы всегда имеем дату последней модификации строки. теперь остаётся реализовать сам процесс копирования. внешний серверБ периодически будет отправлять запрос, вроде siteA.ru/party_dump.php?password=qwer&start=1234567890 в ответ серверА будет совершать выборку тех строк, что имеют upd >= start прежде чем я стал формировать систему в данном виде, есть ли претензии? плюс, возникла парочка вопросов. 1. стоит ли вешать на поле upd индекс? запрос дампа будет не частый, всего несколько раз в день. таблицы разные, есть такие, что пополняются редко и имеют небольшой объём, а есть такие, которые получают по нескольку записей в секунду. количество строк в одной такой таблице уже доросло 500 тыс и далее будет идти на миллионы. 2. в каком виде лучше отдавать данные? xml даст готовые средства обработки и корректный парсинг, однако, в случае некоторых таблиц будет передаваться большой объём структурной информации. если же выдавать простой текст, с разделителями, то придётся ставить костыль, в виде замены разделителей в тексте. что в редких случаях, но всё же чревато. |
|||
|
||||
| MuToGeN |
|
|||
![]() Лесник ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 4379 Регистрация: 15.8.2002 Где: Москва Репутация: нет Всего: 32 |
Т.к. СУБД не указана, думаю, что это MySQL, она умеет складывать все правки в бинарный лог. Репликации работают именно на этом, некоторые админы ещё используют эту фишку для бекапов. Кто мешает настроить всё и скармливать слейву запрос типа LOAD DATA FROM MASTER; раз в 6 часов по крону?
-------------------- Three pings for the token rings, Five pings for the UNIX machines, Hundred pings for the broken links, One special ping to check them all Through Simple Network Management Protocol! |
|||
|
||||
| bars80080 |
|
|||
![]() прапор творюет ![]() ![]() ![]() ![]() Награды: 1 Профиль Группа: Завсегдатай Сообщений: 12022 Регистрация: 5.12.2007 Где: Königsberg Репутация: 9 Всего: 315 |
хостер. я не могу реализовать данную фишку вне пределов пхп-скриптов. то есть не могу настраивать сервер по собственному желанию, не могу запускать крон. я могу делать только то, что в принципе обязан делать сайт: принял http-запрос, на уровне пхп-машины поработал с БД (MySQL), отдал результат. в крайнем случае - можно записывать готовую выборку в файлы (только зачем?) |
|||
|
||||
![]()
|
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | PHP: Базы Данных | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |