Рейтинг темы:
  • 0 Голос(ов) - 0 в среднем
  • 1
  • 2
  • 3
  • 4
  • 5
Защита целосности и структуры данных DB
#1
Вот и пришел день, когда я задал себе вопрос: "Зачем писать 100500 строк кода реализации апдейта изменений в БД, при изменении какой то ключевой записи". На сегодняшний день, я уже знал о релейшнах и триггерах, но руки до реализации связок таблиц так и не дошли...

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

Для реализации этого используется FOREIGN KEY
Например:
PHP код:
<?php 
CREATE TABLE
IF NOT EXISTS `account_log` (
`
time` int(11) NOT NULL,
`
login` varchar(32) NOT NULL,
`
ip` varchar(15) NOT 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
[Изображение: 3FVKD.th.png]

Скрин №2
[Изображение: 9KkgNta.th.png]

А вот и моя структура таблиц Логин Сервера
[Изображение: TBEkKGUA.png]


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

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

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

Добавлено через 6 минут
UPD: Еще парочка скринов
[Изображение: DNwyqVHAJ.png]
[Изображение: ZuQXKheWa.png]
Ответ
#2
ALF. Написал:Полностью реализовать и "уследить" изменения в самом игровом сервере - хорошо, но часто трудно, а именно трудно найти место где это забыли сделать. Я считаю намного проще реализовать хорошую структуру БД, что даст возможность избежать "косяки, баги, дюпы" и т. д. К примеру - удалился игрок с БД. В таблице чарактерс его нету. Но произошел сбой, и очистка его предметов в таблице итемс не произошла. Без связи БД есть возможность, что зарегистрируется новый игрок, обджектАйди которого совпадет с удаленным - он получит итемы персонажа который был удален. Со связанной структурой БД - такого не получится.
у меня например objectId используется только для обьектов в сервере, в бд его вообще нету и ненужно такой велосипед городить(если что-то и не удалится из таблиц, то это произойдет при следующем старте кешед сервера, и получить данные другого обьекта "случайно" нереально)
Ответ
#3
linliss Написал:у меня например objectId используется только для обьектов в сервере, в бд его вообще нету и ненужно такой велосипед городить(если что-то и не удалится из таблицы, то это произойдет при следующем старде кешед сервера, и получить данные другого обьекта "случайно" нереально)

Согласен, это было бы тру, но почти полностью перепиливать сервер сайд л2 - нету времени)
Ответ
#4
Автор, конечно, молодец, что выделил личное время для создания как-никак полезной темы на форуме.

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

Но разработчики sf, видимо, не задумывались над этими вещами изначально, а затем эта оплошность, как снежный ком, накапливалась и превратилась в нечто несуразное Smile
Ответ
#5
Спасибо за информацию. Очень интересно.
Ответ
#6
Lihoy Написал:Но разработчики sf, видимо, не задумывались над этими вещами изначально, а затем эта оплошность, как снежный ком, накапливалась и превратилась в нечто несуразное Smile

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

Я лично использую несколько idfactory
Ответ
#7
Похвально, что вы узнали о внешних ключах и реляционной модели баз данных.
Я вначале был шокирован набором беспорядочных таблиц - которое для л2 называли разработчики базой данных. Была мысль ее довести до более-менее приемлемой модели. Но кал самого ява-сервера - модели ООП не в дугу, утечки, лаги, все неправильно в предметной области - забрало время. Сейчас не тянет трогать структуру базы л2.
Проектируя сначала - можно было бы конечно сразу делать в какой-то модели ее, а на ходу сильно переделывать - лень.
Ответ
#8
п.с. кто так и не понял что должно получится в конце - продемонстрирую структуру БД проекта, над которым я сейчас работаю

[Изображение: 6pcIj.jpg]

п.п.с. надеюсь что в БД своего ГС-а доведу до нормального вида
Ответ
#9
На протяжении нескольких лет появляются темы типо: го запилим ORM и всякие другие крутые штуки. И каждый раз один и тот же итог: нет времени/нет желания копаться в какахах/куда вы лезете со своим энтерпрайзом. В итоге: мыши плакали, кололись, но продолжали грызть кактус.

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


Возможно похожие темы ...
Тема Автор Ответы Просмотры Последний пост
  Сетевая защита сервера? Какая она.. AfterJob 1 1,639 10-15-2018, 09:43 PM
Последний пост: n3k0nation
  Защита для сборки l2j-frozen Mor9k400 4 1,843 09-19-2018, 04:29 AM
Последний пост: Psycho
  Защита от ДДоса Shell 5 2,093 09-04-2016, 02:36 AM
Последний пост: VadikO
  Актуальная сборка, защита, веб на 2016? Rivskoy 2 2,041 05-08-2016, 08:49 PM
Последний пост: Kampina
  Защита l2phx Kennedy 8 2,724 12-07-2015, 01:25 AM
Последний пост: Different
  Защита для PTS сервера Rous 7 2,255 08-24-2015, 02:16 AM
Последний пост: valsha
  защита проекта 4arli 4 1,792 09-04-2014, 04:01 PM
Последний пост: 4arli
  Ошибка установки баз данных turAngo 9 2,081 01-11-2014, 03:21 PM
Последний пост: Pendant
  Защита rGuard и метод setHWID Enter 4 3,160 01-06-2014, 03:20 PM
Последний пост: Enter
  Защита для ява Scream 31 5,661 08-26-2013, 07:59 PM
Последний пост: Scream

Перейти к форуму:


Пользователи, просматривающие эту тему: 1 Гость(ей)