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

Простой скрипт объединения серверов 1.1

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

Gaikotsu

яжпрограммист
Легенда
Сообщения
1 777
Розыгрыши
0
Решения
29
Репутация
6 247
Реакции
2 880
Баллы
2 188
Пользователь Gaikotsu разместил новый ресурс:

Простой скрипт объединения серверов - Простой скрипт объединения серверов на базе OverWorld/LostWorld


Узнать больше об этом ресурсе...
 
Gaikotsu обновил(а) ресурс Простой скрипт объединения серверов новой записью:

правки для работы скрипта под новыми версиями php


Узнать больше об этом обновлении...
 
Тоже занимался слиянием, правда на джаве.
Там есть плюс
Не знаю как на пхп
Но на джаве можно при запуске ГСа дать два конекта к разным бд
+ Ид факторинг
И вместо того чтобы реплейсить/вставлять ОБЖ ид - просто генерировать новые (соответственно совпадений не будет)
Правда запаристо делать каждую таблицу чтобы хранить данные (время норм ушло)
Получается считываем-проверяем на совпадение ид (если совпало, генерируем новые)-кидаем в кеш все это дело, пока не запишем все таблицы
И в конце уже запись во вторую бд
Чуть позже под хайд лично скину ради интереса если хочешь
 
Ну подобное тоже могу в целом без особых проблем написать по идее, но твой способ уж очень гемморойный
Проще уж как у меня - просто вычислить максимально задействованный UID на конечной бд и уже от него пляша просто генерить новые при переносе.
 
И в конце уже запись во вторую бд
Если случится ошибка во время записи во вторую БД, тогда же придется полностью бэкап делать (а это 5-10 минут, если база нормальная) и результат ошибки как правило в консоль MySQL выводится недостаточно подробно, ты можешь увидеть только начало запроса в которой произошла ошибка.


Этот "плюс" имеют все языки программирования, хоть 100 тыс. коннектов к разным бд.


Нет, не соответственно.
Ты генерируешь новый уникальный object_id пристаиваешь его предмету, и потом изменяешь этот object_id в других таблицах, которые взаимодействуют с items и тут случается нежданчик, оказывается в другой таблицы существует такой же object_id предмета, хотя в items слот ID свободный. И не важно по какой причине он есть. Просто он существует. И у тебя случается ошибка.


Эти всё трюки хороши над маленькой базой чистенькой бд, однако, если сервер эксплуатируют много лет, он пережил многое, сервер жирный, более 10к персонажей, сотня миллионов предметов, то неизбежно придется столкнуться с проблемами и потребуется другой подход.
 
Реакции: kick
для чаров и итемов новая генерация обжекта, пробовал на 3к персах, 30к данных по скилам, все гуд было
персы
Код:
if (System.currentTimeMillis() > Long.parseLong(lastAccess) + TimeUnit.DAYS.toMillis(daysNotCopy)) {
                    _objectNotCopy.add(obj_Id);
                    continue;
                }
                int newObjId = IdFactory.getInstance().getNextId();
                _objectReplace.put(obj_Id, newObjId);
                int newClanObjId = IdFactory.getInstance().getNextId();

предметы

Код:
if (_objectNotCopy.contains(owner_id))
                    continue;
                if (_objectReplace.containsKey(owner_id))
                    owner_id = _objectReplace.get(owner_id);
                else continue;
                object_id = IdFactory.getInstance().getNextId();
соответственно во всех других таблицах заменяется ид также (но там взаимодействие с чар обжектом, поэтому просто с _objectReplace свапаем обжект чара)
 
Я не на что не намекаю, но вот реализация на Java, если вдруг нужно еще:
PS: Не реклама) В комментах есть пересобранная на Maven'е версия без хайда.