Защита целосности и структуры данных DB - Форум администраторов игровых серверов
Форум администраторов игровых серверов StormWall - Защита от DDos атак
Регистрация Мнения Справка Пользователи Календарь Все разделы прочитаны
Вернуться   Форум администраторов игровых серверов > MMO > Lineage II

Lineage II
Дискуссии на тему создания, настройки и обслуживания серверов Lineage 2. При поддержке: Премиум услуги по рекламе

Ответ
Опции темы
Непрочитано 19.08.2013, 21:00   #1
Аватар для ALF.
Герой

Автор темы (Топик Стартер) Защита целосности и структуры данных DB

Вот и пришел день, когда я задал себе вопрос: "Зачем писать 100500 строк кода реализации апдейта изменений в БД, при изменении какой то ключевой записи". На сегодняшний день, я уже знал о релейшнах и триггерах, но руки до реализации связок таблиц так и не дошли...

Какая от этого польза
Возьмем к примеру все таблицы accounts_***
Все таблицы, которые начинаются на accounts_ имеют в себе ключ - который отвечает за логин пользователя (который хранится в таблица accoutns).
Мы можем спроектировать таблицы так, что при удалении или изминении записи в таблице accounts - записи в других таблицах, которые ссылаются на таблицу accouns - будут изменены автоматически.

Для реализации этого используется FOREIGN KEY
Например:
PHP код:
CREATE TABLE IF NOT EXISTS `account_log` (
  `
timeint(11NOT NULL,
  `
loginvarchar(32NOT NULL,
  `
ipvarchar(15NOT NULL,
  
KEY `login` (`login`),
  
KEY `ip` (`ip`),
  
FOREIGN KEY (`login`) REFERENCES `accounts` (`login`)
    
ON UPDATE CASCADE
    ON DELETE CASCADE
) DEFAULT CHARSET=utf8 
Давайте взглянем на это визульано

Ниже я представил 2 изображения структуры моих таблиц. А именно таблицы characters_ без связки и со связкой:


Скрин №1


Скрин №2


А вот и моя структура таблиц Логин Сервера



Вывод:
Полностью реализовать и "уследить" изменения в самом игровом сервере - хорошо, но часто трудно, а именно трудно найти место где это забыли сделать. Я считаю намного проще реализовать хорошую структуру БД, что даст возможность избежать "косяки, баги, дюпы" и т. д. К примеру - удалился игрок с БД. В таблице чарактерс его нету. Но произошел сбой, и очистка его предметов в таблице итемс не произошла. Без связи БД есть возможность, что зарегистрируется новый игрок, обджектАйди которого совпадет с удаленным - он получит итемы персонажа который был удален. Со связанной структурой БД - такого не получится.

п.с. Я только начал делать структуру.... Если её доделать до конца - связей будет куда больше... Да и запросы можно будет строить куда удобнее....

п.п.с. Интересно, занимался ли еще кто то подобным в сфере л2? Какие результаты?

Добавлено через 6 минут
UPD: Еще парочка скринов


Последний раз редактировалось ALF.; 19.08.2013 в 21:07. Причина: Добавлено сообщение
ALF. вне форума Отправить сообщение для ALF. с помощью ICQ Отправить сообщение для ALF. с помощью Skype™ Ответить с цитированием
Сказали спасибо:
Непрочитано 19.08.2013, 21:35   #2
Аватар для linliss
Герой

По умолчанию Re: Защита целосности и структуры данных DB

Цитата:
Сообщение от ALF. Посмотреть сообщение
Полностью реализовать и "уследить" изменения в самом игровом сервере - хорошо, но часто трудно, а именно трудно найти место где это забыли сделать. Я считаю намного проще реализовать хорошую структуру БД, что даст возможность избежать "косяки, баги, дюпы" и т. д. К примеру - удалился игрок с БД. В таблице чарактерс его нету. Но произошел сбой, и очистка его предметов в таблице итемс не произошла. Без связи БД есть возможность, что зарегистрируется новый игрок, обджектАйди которого совпадет с удаленным - он получит итемы персонажа который был удален. Со связанной структурой БД - такого не получится.
у меня например objectId используется только для обьектов в сервере, в бд его вообще нету и ненужно такой велосипед городить(если что-то и не удалится из таблиц, то это произойдет при следующем старте кешед сервера, и получить данные другого обьекта "случайно" нереально)

Последний раз редактировалось linliss; 20.08.2013 в 00:03.
linliss вне форума Ответить с цитированием
Непрочитано 19.08.2013, 21:37   #3
Аватар для ALF.
Герой

Автор темы (Топик Стартер) Re: Защита целосности и структуры данных DB

Цитата:
Сообщение от linliss Посмотреть сообщение
у меня например objectId используется только для обьектов в сервере, в бд его вообще нету и ненужно такой велосипед городить(если что-то и не удалится из таблицы, то это произойдет при следующем старде кешед сервера, и получить данные другого обьекта "случайно" нереально)
Согласен, это было бы тру, но почти полностью перепиливать сервер сайд л2 - нету времени)
ALF. вне форума Отправить сообщение для ALF. с помощью ICQ Отправить сообщение для ALF. с помощью Skype™ Ответить с цитированием
Непрочитано 19.08.2013, 22:03   #4
Аватар для Lihoy
Герой

По умолчанию Re: Защита целосности и структуры данных DB

Автор, конечно, молодец, что выделил личное время для создания как-никак полезной темы на форуме.

Но, грамотное проектирование БД - прописная истина при разработке серьезных систем и это должен знать каждый. Не связанных таблиц практически быть не должно (конечно, все зависит от отношениями между сущностями).

Но разработчики sf, видимо, не задумывались над этими вещами изначально, а затем эта оплошность, как снежный ком, накапливалась и превратилась в нечто несуразное
Lihoy вне форума Отправить сообщение для Lihoy с помощью ICQ Ответить с цитированием
Непрочитано 20.08.2013, 00:17   #5
Аватар для SoniPro
Супергерой

По умолчанию Re: Защита целосности и структуры данных DB

Спасибо за информацию. Очень интересно.
SoniPro вне форума Ответить с цитированием
Непрочитано 20.08.2013, 00:24   #6
Аватар для KID
Пользователь

По умолчанию Re: Защита целосности и структуры данных DB

Цитата:
Сообщение от Lihoy Посмотреть сообщение
Но разработчики sf, видимо, не задумывались над этими вещами изначально, а затем эта оплошность, как снежный ком, накапливалась и превратилась в нечто несуразное
видимо кто-то не застал времена повеливания csv, а уже потом, кто-то там быстро перешмыгнул на мускул. в попыхах.
они не давали готовый продукт, они давали старт для других.
к сожалению такие нюансы мало кого волнуют, из "одминов" серверов

Я лично использую несколько idfactory
KID вне форума Отправить сообщение для KID с помощью Skype™ Ответить с цитированием
Непрочитано 20.08.2013, 00:50   #7
Аватар для Visor

По умолчанию Re: Защита целосности и структуры данных DB

Похвально, что вы узнали о внешних ключах и реляционной модели баз данных.
Я вначале был шокирован набором беспорядочных таблиц - которое для л2 называли разработчики базой данных. Была мысль ее довести до более-менее приемлемой модели. Но кал самого ява-сервера - модели ООП не в дугу, утечки, лаги, все неправильно в предметной области - забрало время. Сейчас не тянет трогать структуру базы л2.
Проектируя сначала - можно было бы конечно сразу делать в какой-то модели ее, а на ходу сильно переделывать - лень.
__________________
L2Emu Enterprise Server
Visor вне форума Отправить сообщение для Visor с помощью ICQ Отправить сообщение для Visor с помощью Skype™ Ответить с цитированием
Непрочитано 06.09.2013, 21:03   #8
Аватар для ALF.
Герой

Автор темы (Топик Стартер) Re: Защита целосности и структуры данных DB

п.с. кто так и не понял что должно получится в конце - продемонстрирую структуру БД проекта, над которым я сейчас работаю



п.п.с. надеюсь что в БД своего ГС-а доведу до нормального вида

Последний раз редактировалось ALF.; 06.09.2013 в 21:57.
ALF. вне форума Отправить сообщение для ALF. с помощью ICQ Отправить сообщение для ALF. с помощью Skype™ Ответить с цитированием
Непрочитано 07.09.2013, 22:43   #9
Супергерой

По умолчанию Re: Защита целосности и структуры данных DB

На протяжении нескольких лет появляются темы типо: го запилим ORM и всякие другие крутые штуки. И каждый раз один и тот же итог: нет времени/нет желания копаться в какахах/куда вы лезете со своим энтерпрайзом. В итоге: мыши плакали, кололись, но продолжали грызть кактус.

Может все-таки стоит нормально работать с данными на уровне приложения, а не бд? Зачем так укреплять зависимость от конкретного хранилища?
__________________
l2clientmod / l2io
acmi вне форума Отправить сообщение для acmi с помощью ICQ Ответить с цитированием
Непрочитано 07.09.2013, 22:47   #10
Аватар для linliss
Герой

По умолчанию Re: Защита целосности и структуры данных DB

Цитата:
Сообщение от acmi Посмотреть сообщение
Может все-таки стоит нормально работать с данными на уровне приложения, а не бд? Зачем так укреплять зависимость от конкретного хранилища?
и сколько же серверов работает не на mysql?
linliss вне форума Ответить с цитированием
Ответ


Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 
Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
itamename-e.dat UFODriverr Lineage II 5 28.02.2021 18:17
Изменить IpAdress C5 Oath Of Blood за денюжку Krasavella Рынок / Marketplace 21 20.02.2013 08:48
ID СТАТОВ BioSchok Серверная часть 0 06.05.2011 17:07
Мануал по созданию и востоновлению резервных копий баз данных с помощью Mysqldump [Red Dragon] Тех-документация 4 04.05.2011 13:16
Компиляция и базовая настройка сервера MaNGOS (3.0.9) PROGRAMMATOR Документация 125 12.04.2011 13:43


© 2007–2024 «Форум администраторов игровых серверов»
Защита сайта от DDoS атак — StormWall
Работает на Булке неизвестной версии с переводом от zCarot
Текущее время: 19:02. Часовой пояс GMT +3.

Вверх