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

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

Нет прав для скачивания
  • Автор темы Автор темы Logan22
  • Дата начала Дата начала

Logan22

Гений мысли
Проверенный
Знаток Lineage2
Орден Почета
Мастер реакций
Любитель реакций
Знаток письма
Медаль Благодарности
Старожил I степени
Медаль за активность на Форуме
За заслуги перед форумом
Преподаватель
За веру и верность форуму
Сообщения
1 638
Розыгрыши
0
Решения
3
Репутация
1 747
Реакции
1 481
Баллы
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.webp 1705329640666.webp
1705329671751.webp 1705329702329.webp
 
З.Ы. Скрипт устарел и не актуален, я давно всё переписал под Go и выполнял платные объединения.
Разница в скорости ощутимейшая, к примеру: нужно было объединять базы, чтоб вы понимали их объем, то на одной бд под 100 млн. предметов в items, и в другой где-то 65 млн. (а там помимо предметов ещё полно толстых таблиц и миллионы и миллионы сравнений). PHP требовалось огромное кол-во времени, больше часа для выполнения задачи, переписанный код на Go справляется за 40-60 сек.
 
Ну... сравнивать скорость работы интерпретируемого и компилируемого языков...
Ну и на пхп достаточно быструю обработку можно сделать - конечно не равную тому что будет в написанном на го/с++ и т.п., но вполне сопоставимую.

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

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

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