Форум администраторов игровых серверов

Форум администраторов игровых серверов (https://forum.zone-game.info/TT.php)
-   Lineage II (https://forum.zone-game.info/forumdisplay.php?f=34)
-   -   Защита целосности и структуры данных DB (https://forum.zone-game.info/showthread.php?t=30974)

ALF. 19.08.2013 21:00

Защита целосности и структуры данных 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
http://screenshot.ru/images/2013/08/19/3FVKD.th.png

Скрин №2
http://screenshot.ru/images/2013/08/19/9KkgNta.th.png

А вот и моя структура таблиц Логин Сервера
http://screenshot.ru/images/2013/08/19/TBEkKGUA.png


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

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

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

Добавлено через 6 минут
UPD: Еще парочка скринов
http://screenshot.ru/images/2013/08/19/DNwyqVHAJ.png
http://screenshot.ru/images/2013/08/19/ZuQXKheWa.png

linliss 19.08.2013 21:35

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

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

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

ALF. 19.08.2013 21:37

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

Сообщение от linliss (Сообщение 318414)
у меня например objectId используется только для обьектов в сервере, в бд его вообще нету и ненужно такой велосипед городить(если что-то и не удалится из таблицы, то это произойдет при следующем старде кешед сервера, и получить данные другого обьекта "случайно" нереально)

Согласен, это было бы тру, но почти полностью перепиливать сервер сайд л2 - нету времени)

Lihoy 19.08.2013 22:03

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

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

Но разработчики sf, видимо, не задумывались над этими вещами изначально, а затем эта оплошность, как снежный ком, накапливалась и превратилась в нечто несуразное :)

SoniPro 20.08.2013 00:17

Re: Защита целосности и структуры данных DB
 
Спасибо за информацию. Очень интересно.

KID 20.08.2013 00:24

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

Сообщение от Lihoy (Сообщение 318422)
Но разработчики sf, видимо, не задумывались над этими вещами изначально, а затем эта оплошность, как снежный ком, накапливалась и превратилась в нечто несуразное :)

видимо кто-то не застал времена повеливания csv, а уже потом, кто-то там быстро перешмыгнул на мускул. в попыхах.
они не давали готовый продукт, они давали старт для других.
к сожалению такие нюансы мало кого волнуют, из "одминов" серверов

Я лично использую несколько idfactory

Visor 20.08.2013 00:50

Re: Защита целосности и структуры данных DB
 
Похвально, что вы узнали о внешних ключах и реляционной модели баз данных.
Я вначале был шокирован набором беспорядочных таблиц - которое для л2 называли разработчики базой данных. Была мысль ее довести до более-менее приемлемой модели. Но кал самого ява-сервера - модели ООП не в дугу, утечки, лаги, все неправильно в предметной области - забрало время. Сейчас не тянет трогать структуру базы л2.
Проектируя сначала - можно было бы конечно сразу делать в какой-то модели ее, а на ходу сильно переделывать - лень.

ALF. 06.09.2013 21:03

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

http://screenshot.ru/images/2013/09/06/6pcIj.jpg

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

acmi 07.09.2013 22:43

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

Может все-таки стоит нормально работать с данными на уровне приложения, а не бд? Зачем так укреплять зависимость от конкретного хранилища?

linliss 07.09.2013 22:47

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

Сообщение от acmi (Сообщение 321290)
Может все-таки стоит нормально работать с данными на уровне приложения, а не бд? Зачем так укреплять зависимость от конкретного хранилища?

и сколько же серверов работает не на mysql?


Текущее время: 13:02. Часовой пояс GMT +3.

Powered by vBulletin® Version 3.8.6
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot