• Новые темы в этом разделе публикуются автоматически при добавлении файла в менеджер ресурсов.
    Ручное создание новых тем невозможно.
Скрипт объединение БД серверов

Скрипт объединение БД серверов 0.1

Нет прав для скачивания

Logan22

Гений мысли
Проверенный
Знаток Lineage2
Орден Почета
Мастер реакций
Любитель реакций
Знаток письма
Медаль Благодарности
Старожил I степени
Медаль за активность на Форуме
За заслуги перед форумом
Преподаватель
За веру и верность форуму
Сообщения
1 512
Розыгрыши
0
Решения
2
Репутация
1 674
Реакции
1 308
Баллы
1 808
Logan22 добавил(а) новый ресурс:

Скрипт объединение БД серверов - Скрипт слияния баз

Удалял всякий мусор и нашел старый мой PHP скрипт для слияния базы данных двух серверов в одну.
Я думал что может кому-то пригодиться.

Это может быть полезно, если у Вас есть два сервера, и вы хотите их объединить в один, в результате: персонажи, предметы, кланы (перечисленный вами список) будут объедены с учетом коллизий.

Узнать больше об этом ресурсе...
 

скинешь инструкцию как им пользоваться?

l2j-database-consolidation​

PHP скрипт для слияния базы данных двух серверов в одну.

Это может быть полезно, если у Вас есть два сервера, и вы хотите их объединить в один, в результате: персонажи, предметы, кланы (перечисленный вами список) будут объедены.

Для работы скрипта необходимо:

  1. БД должны быть от одной сборки, либо иметь одинаковую архитектуру.
  2. PHP (делалось на версии 7.4).
В скрипте все подробно расписано и прокомментировано, однако сделаю краткий мануал.

Подключение к БД. Перейдите в файл db/connect.php, найдите массив $firstDBConfig и $twoDBConfig и укажите данные подключения. Эти базы будут слиты в одну, и весь результат будет находится в бд $twoDBConfig. С подключением закончили.

Теперь указываем какие таблицы и колонки объединять!

Откройте файл index.php, перейдите к массиву $objID, в нем указывайте первым значением массива название таблицы, вторым ID объекта, которые необходимо проверять на совпадение между БД. Потом перейдите к массиву $resive, в нем необходимо указать строчные данные, это подойдет для названий кланов, имени персонажей, логинов, первым параметром массива укажите название БД, вторым колонку. При нахождении совпадения, будет добавлен префикс. Если у вас логин аккаунта logan22, станет qq_logan22.
Как это всё запустить?

Если у Вас PHP установлен на ПК, то рекомендую через консоль запустить скрипт, указав путь к файлу index.php. В противном случае, необходимо разместить скрипт на веб сервере, и открыть его в браузере.
Внимание: проверяйте работоспособность не на ЛАЙФСЕРВЕРЕ, а на дампах БД.
 

l2j-database-consolidation​

PHP скрипт для слияния базы данных двух серверов в одну.

Это может быть полезно, если у Вас есть два сервера, и вы хотите их объединить в один, в результате: персонажи, предметы, кланы (перечисленный вами список) будут объедены.

Для работы скрипта необходимо:

  1. БД должны быть от одной сборки, либо иметь одинаковую архитектуру.
  2. PHP (делалось на версии 7.4).
В скрипте все подробно расписано и прокомментировано, однако сделаю краткий мануал.

Подключение к БД. Перейдите в файл db/connect.php, найдите массив $firstDBConfig и $twoDBConfig и укажите данные подключения. Эти базы будут слиты в одну, и весь результат будет находится в бд $twoDBConfig. С подключением закончили.

Теперь указываем какие таблицы и колонки объединять!


Как это всё запустить?


Внимание: проверяйте работоспособность не на ЛАЙФСЕРВЕРЕ, а на дампах БД.
спасибо огромное, выручил
 
Ребят я что то не разобрался с php, может кто помочь объеденить 2 бд?
 
АП темы производится только встроенной функцией. Любые АПы "сообщением" запрещены
EmmaO, все еще актуально
 
Спасибо, всё получилось!
 
под l2jeternity кто-то делал ?
 
Народ. А кто поборол проблему с регистром? На пример Vasya и vasya скрипт считает их разными и не присваивает им префикс... а при слиянии естественно идёт конфликт.
 
ну логично же - там где идут сравнения имен на идентичность везде предварительно приводить сравниваемое к одному регистру, например при помощи strtolower к нижему регистру.
 
Поиск записей
Без учета регистраС учетом регистра
SELECT * FROM characters WHERE LOWER(char_name) = 'gnomka';SELECT * FROM characters WHERE char_name LIKE BINARY 'Gnomka';
1705329621087.png 1705329640666.png
1705329671751.png 1705329702329.png
 
З.Ы. Скрипт устарел и не актуален, я давно всё переписал под Go и выполнял платные объединения.
Разница в скорости ощутимейшая, к примеру: нужно было объединять базы, чтоб вы понимали их объем, то на одной бд под 100 млн. предметов в items, и в другой где-то 65 млн. (а там помимо предметов ещё полно толстых таблиц и миллионы и миллионы сравнений). PHP требовалось огромное кол-во времени, больше часа для выполнения задачи, переписанный код на Go справляется за 40-60 сек.
 
Ну... сравнивать скорость работы интерпретируемого и компилируемого языков...
Ну и на пхп достаточно быструю обработку можно сделать - конечно не равную тому что будет в написанном на го/с++ и т.п., но вполне сопоставимую.

И кстати на кой фиг что-то сравнивать в таблицах items старой и новой базы? там же достаточно например инсертить просто новые записи отсчитывая новые obj_id для них, определив например разово в начале работы максимальный занятый obj_id в новой базе и новые считать уже от него.

Ну и самое медленное тут по сути чтение/запись в базы. Ощутимо сократить время можно если читать и писать данные большими порциями за один цикл.

---
не связано с объединениями баз, но вот чисто для примера вот к примеру у меня объемы базы моей бз
Тут конечно не многие миллионы, но суммарно около миллиона записей во всех таблицах наберется.
И вот если парсерами (на пхп) эти данные заносить в бд в режиме "в одном запросе добавляется одна запись", то парсеры будут работать минут 10-15. А вот если использовать режим пакетной записи, например вставка сразу 100 строк в одном запросе, то это время сразу же сокращается где-то до одной минуты, а то и меньше.
 
Последнее редактирование:
вставка сразу 100 строк в одном запросе, то это время сразу же сокращается где-то до одной минуты, а то и меньше.
1705354795012.png
Ну и самое медленное тут по сути чтение/запись в базы
В какую базу запись ? В файл результат записывается.
1705354923493.png
 
Назад
Сверху Снизу