|
Tools Обсуждение программ для MaNGOS |
|
Опции темы | Поиск в этой теме | Опции просмотра |
17.12.2010, 10:27 | #1 |
Ученый
Регистрация: 02.04.2010
Сообщений: 237
Сказал(а) спасибо: 41
Поблагодарили 99 раз(а) в 44 сообщениях
|
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 Спасибо за внимание Последний раз редактировалось Sid; 17.12.2010 в 10:33. |
17.12.2010, 10:34 | #2 |
Администратор
|
Перенумерацию гуидов можно сделать средствами базы данных.
|
17.12.2010, 10:41 | #3 |
Ученый
Регистрация: 02.04.2010
Сообщений: 237
Сказал(а) спасибо: 41
Поблагодарили 99 раз(а) в 44 сообщениях
|
Хм, не знал даже)) А соответствие значений в других таблицах база тоже может сделать?
|
17.12.2010, 11:05 | #4 | |
Администратор
|
Со старого форума базы YTDB:
Цитата:
|
|
Пользователь сказал cпасибо: | Softer (17.12.2010) |
18.12.2010, 19:24 | #5 |
Пользователь
Регистрация: 12.03.2010
Сообщений: 64
Сказал(а) спасибо: 23
Поблагодарили 10 раз(а) в 5 сообщениях
|
virusav возможно ли такое сделать с чарами. Например гуиды в item_instance зашкаливают(уже триллионы пошли), да и таблицу characters надо бы упорядочить. Проблема лишь в удаленных чарах(которых можно восстановить через .char deleted restore). У них нуиды и все сбито(нули)
|
18.12.2010, 19:48 | #6 | |
Умный
Старожил
Регистрация: 06.03.2010
Сообщений: 886
Сказал(а) спасибо: 698
Поблагодарили 433 раз(а) в 181 сообщениях
Записей в дневнике: 4
|
Цитата:
У удалённых сбито потому что присваивается при заливке всё новое |
|
18.12.2010, 19:52 | #7 |
Администратор
|
Можно взять приведенные запросы за основу и подставить названия нужных таблиц.
Главное - не забыть указать все связанные таблицы. |
19.12.2010, 01:13 | #8 |
Ученый
Регистрация: 07.03.2010
Сообщений: 138
Сказал(а) спасибо: 200
Поблагодарили 143 раз(а) в 49 сообщениях
|
Для более-менее старого сервера да еще и с большим онлайном скорее всего такое упорядочивание загнет mysql на пару суток
|
19.12.2010, 10:00 | #9 |
Администратор
|
Не согласен.
Если, например, 1к персов, 10к записей в связанных таблицах, то получим 11к запросов UPDATE, что будет выполняться не очень долго. |
19.12.2010, 10:18 | #10 |
Почетный флудер
Старожил
Регистрация: 08.03.2010
Адрес: Мурманск, Россия
Сообщений: 788
Сказал(а) спасибо: 55
Поблагодарили 333 раз(а) в 151 сообщениях
Записей в дневнике: 1
|
По хорошему этим ядро должно заниматься. FindFirstFreeGuid - и далее заполнять не по следующему а по первому свободному. Иначе это принципиальный затык на переполнении (хотя и не скоро).
|
3 пользователя(ей) сказали cпасибо: |
19.12.2010, 12:22 | #11 | |
Умный
Регистрация: 07.03.2010
Адрес: Северный Урал (60°сш, 60°вд)
Сообщений: 330
Сказал(а) спасибо: 82
Поблагодарили 399 раз(а) в 120 сообщениях
Записей в дневнике: 30
|
Цитата:
Может при удалении в базу заносить дату и гуид удаления персонажа, и несколько дней не трогать этот гуид. |
|
19.12.2010, 14:06 | #13 | |
Почетный флудер
Старожил
Регистрация: 08.03.2010
Адрес: Мурманск, Россия
Сообщений: 788
Сказал(а) спасибо: 55
Поблагодарили 333 раз(а) в 151 сообщениях
Записей в дневнике: 1
|
Цитата:
|
|
19.12.2010, 19:27 | #14 |
Ученый
Регистрация: 07.03.2010
Сообщений: 138
Сказал(а) спасибо: 200
Поблагодарили 143 раз(а) в 49 сообщениях
|
Это какой-то очень мелкий сервер ). У меня, например, сервер тоже, я считаю, маленький (100-150 онлайна), в таблице чаров - около 30к записей. А связанных - так вообще караул. А что говорить о тех, у кого более 1000 онлайна...
|
19.12.2010, 19:33 | #15 |
Администратор
|
Запросы на обновление выполняются довольно быстро.
Как-то по работе надо было делать несколько тысяч UPDATE, тоже думали, что будет долго. Главное - правильно расставить ключи, если их нет. Уже не раз убеждался, что операции с большим объемом данных лучше делать средствами самого MySQL. |
19.12.2010, 21:59 | #16 |
Ученый
Регистрация: 02.04.2010
Сообщений: 237
Сказал(а) спасибо: 41
Поблагодарили 99 раз(а) в 44 сообщениях
|
Ну, у меня по изучении с++ стояла задача сделать все на стороне программы Вкачиваем скил ненужным софтом так сказать . А за запросы, спасибо!
|
20.12.2010, 10:06 | #17 |
Forum bot
Регистрация: 01.02.2010
Адрес: пусто
Сообщений: 841
Сказал(а) спасибо: 286
Поблагодарили 418 раз(а) в 190 сообщениях
Записей в дневнике: 60
|
По программированию - ЗОЧОД.
А по поводу "надо - не надо" - дело десятое. Кому-то может и пригодится.
__________________
Совершенно безопасен для людей, обладающих хотя бы некоторыми минимальными зачатками интеллекта, и способными строить причинно-следственные цепочки. |
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
[10904] Cleanup character_battleground_data when deleting characters from database | newsbot | CMaNGOS Commits | 0 | 21.12.2010 15:40 |
Альтернатива Zero Database | smoota | MaNGOSZero (1.12.X) | 1 | 19.10.2010 22:46 |
[10100] Fixed some cases assign low guid to full guid update field. | newsbot | CMaNGOS Commits | 0 | 23.06.2010 10:20 |
[9849] Implement character database clean up. | newsbot | CMaNGOS Commits | 0 | 08.05.2010 00:20 |