DataBase GUID sorter
Сразу прошу помидорами не кидаться :) Программиринг в стадии изучения :)
Давно еще хотел навести порядок в базе в таблицах связанных по ключевым полям GUID (например characters и от нее зависящие character_* или creature и creature_*) смысл понятен. Иногда, или даже постоянно если много работаешь с базой, появляются пробелы в гуидах и они приобретают колоссальные значения :) Программка создает темповое поле в которое перезаписывает исходные GUID'ы в инкрементальном порядке от 1 и до значения которое выдаст запрос COUNT(*) :) Одновременно сопоставляя GUID'ы из указанных зависящих таблиц, так же создает темповое поле и записывает на него соответствующие новые GUID'ы. По окончании выполнения, удаляет из зависящих таблиц записи у которых темповое поле оказалось равным 0 (значит гуид не существует в исходной таблице) и заменяет старое guid поле на то что получилось в темповом. Мда, не умею я красиво объяснять, но как есть :) В итоге что пока умеет: - Поддержка до 5 таблиц, однако можно в коде выставить больше кто желает. - Поддержка 2 полей в PRI KEY. Как работает: 1) Запускаем, вводим данные для соединения с базой (как правило нужен юзер с доступом на ALTER запрос.) 2) После соединения с бд вводим setvar и указываем переменные. 3) Вводим start и ждем (чем больше зависящих таблиц и записей тем дольше работает) Скриншот результата: Сейчас пока альфа тестовая версия консольная, позже сделаю на Qt4. Исходники https://github.com/sidsukana/dbsorter Релизный бинарник https://github.com/downloads/sidsuka...er_Release.zip Спасибо за внимание :) |
Перенумерацию гуидов можно сделать средствами базы данных.
|
Хм, не знал даже)) А соответствие значений в других таблицах база тоже может сделать?
|
Со старого форума базы YTDB:
Цитата:
|
virusav возможно ли такое сделать с чарами. Например гуиды в item_instance зашкаливают(уже триллионы пошли), да и таблицу characters надо бы упорядочить. Проблема лишь в удаленных чарах(которых можно восстановить через .char deleted restore). У них нуиды и все сбито(нули)
|
Цитата:
У удалённых сбито потому что присваивается при заливке всё новое ;) |
Можно взять приведенные запросы за основу и подставить названия нужных таблиц.
Главное - не забыть указать все связанные таблицы. |
Для более-менее старого сервера да еще и с большим онлайном скорее всего такое упорядочивание загнет mysql на пару суток :)
|
Не согласен.
Если, например, 1к персов, 10к записей в связанных таблицах, то получим 11к запросов UPDATE, что будет выполняться не очень долго. |
По хорошему этим ядро должно заниматься. FindFirstFreeGuid - и далее заполнять не по следующему а по первому свободному. Иначе это принципиальный затык на переполнении (хотя и не скоро).
|
Цитата:
Может при удалении в базу заносить дату и гуид удаления персонажа, и несколько дней не трогать этот гуид. |
Восстановить можно с новым гуидом, если есть бекап.
|
Цитата:
|
Цитата:
|
Запросы на обновление выполняются довольно быстро.
Как-то по работе надо было делать несколько тысяч UPDATE, тоже думали, что будет долго. Главное - правильно расставить ключи, если их нет. Уже не раз убеждался, что операции с большим объемом данных лучше делать средствами самого MySQL. |
Ну, у меня по изучении с++ стояла задача сделать все на стороне программы :) Вкачиваем скил ненужным софтом так сказать :). А за запросы, спасибо!
|
По программированию - ЗОЧОД. :)
А по поводу "надо - не надо" - дело десятое. Кому-то может и пригодится. :) |
Текущее время: 06:24. Часовой пояс GMT +3. |
ru-mangos.ru - Русское сообщество MaNGOS