Как и обещал, вторая часть статьи по некому пути становления Senior Ragemp Developer'а, обойдёмся без предисловий и долгих вступлений как в предыдущих темах, так-как это логическое продолжение предыдущей темы.
Напомню, в прошлой статье мы уже выучили Основы программирования на примере C#, изучили JavaScript, поговорили о том зачем нужен TypeScript в вашем проекте, изучили его, узнали что такое client-server, изучили NodeJS в качестве server-side, поняли зачем нужен npm и npx, а так же поговорили о различных сборщиках.
В этой же теме мы поговорим о Базе данных и совсем немного изучим побочные технологии, без которых можно обойтись:
- Система контроля версий ( Git на примере GitHub )
- Немного поговорим о Redis
- Совсем чуть-чуть о Docker
Базы данных ( Реляционные + ORM/Не реляционные ):
Ах, сколько же боли в двух словах - базы данных. Незаменимый инструмент в почти любом современном проекте любой сферы, эта технология предназначена для хранения данных ( логично ), конечно же в проектах RageMp мы так-же используем БД для хранения различной информации, как пример - хранить деньги игрока, его имя, фамилию, внешность, одежду и т.д.
* БД - База Дынных, СУБД - Система Управления Базой Данных, SQL - Язык запросов, NoSQL - обобщенный термин для всех не реляционных подходов.
Начнём со сложного слова, реляционные и не реляционные БД, что это вообще значит? Тут все просто, реляционные БД базируются на алгоритмическом представлении реляционной модели данных ( да, прям перед написанием этой темы я решил послушать пару лекций про теорию БД ), проще говоря реляционная БД имеет внешний вид таблицы ( хотя это не совсем так на уровне алгоритмического представления и на уровне самой СУБД, но мы опустим этот момент ), а не реляционные просто хранятся в памяти как некий объект.
Я лишь в скользь упомянул про не реляционные БД и не буду углубляться в эту тему, так-как сам не особо в этом разбираюсь, на всех своих проектах я использовал реляционные базы данных, по этому если вы хотите углубится в тему NoSQL БД, ну вы помните, надеюсь в гугле вас не забанили
Для изучения теории Базы данных я посоветую несколько источников, помните я говорил что прочитал 5 книг? Так вот, в эти 5 книг не входило ни одной по базам данных, по этому с теорией я мало знаком, но специально для темы решил изучить вопрос, из всей перерытой информации мне понравилось всего два ресурса:
- Тык - тут у нас обобщенная теория, сделанная женщиной-тестировщицей, то есть тут не будет сложной терминологии, это лишь базовое объяснение того, что такое реляционная база данных и немного про SQL ( о нём мы ещё поговорим )
- Тык - это серия лекций на Youtube ( 11 лекций по ~2 часа каждая ), большой объём информации с неплохой подачей вроде как умным дядей который работает/работал в ВК ( осуждаю ), крайне рекомендую посмотреть хотя бы первые две.
Теперь когда мы поняли зачем нам нужны БД, поняли что такое реляционная и не реляционная БД поговорим о СУБД, их существует довольно много, самые популярные из них, реляционные БД: MySQL, PostgreSQL, Oracle и MsSQL. Не реляционные БД: MongoDB, Cassandra.
Мы будем говорить только о реляционных, по этому давайте поймём какую же выбрать нам для нашего крутого redage 3.50.14 проекта, в общем и целом для нас отличий особо нет, можно выбрать любую, но например MsSQL и Oraсle работают на коммерческой основе ( платно ), а MySQL и PostgreSQL распространяются бесплатно с открытым исходным кодом.
Для примера я выберу MySQL, которой я в основном и пользуюсь, что бы начать работать с реляционными БД их для начала нужно развернуть на нашем сервере, либо локальном ПК, для этого качаем официальный установщик MySQL и проводим установку, так же рекомендую установить MySQL Workbench из того же установщика.
После установки и перезагрузки пекарни, либо сервера, у вас запустится служба MySQL, которая и будет представлять собой нашу СУБД, с этого момента мы можем подключится к ней например с MySQL Workbench и создать там первое пространство имён, как это сделать? Гуглите, наша тема не об этом.
После всех телодвижений нам надобно подключится к БД из нашего сервера на NodeJS, это можно сделать с помощью npm пакета mysql/mysql2, который предоставляет некий драйвер, способный подключится к нашей БД и делать к ней запросы, но делать это вот так сразу мы не будем, потому что впереди у нас ещё одна довольно интересная тема ( ORM ).
SQL ( Structured Query Language ):
SQL - это язык запросов, в один момент все решили договорится о том, каким образом должны выглядеть запросы к реляционным БД и этим SQL стал стандартом признанным ANSI ( American National Standards Institute ), теперь большинство СУБД использую именно этот язык запросов.
Тут объяснять особо нечего, ( в частности мне объяснять нечего ), берём и учим SQL, в целом какого то особого материала даже не буду выделять так-как они все плюс минус одинаковые, ничего сверх сложного в их самостоятельном поиске я не вижу, так что перейдём дальше.
ORM ( Object Relational Mapping ):
ORM - это инструмент, который позволяет работать с базой данных используя объектно ориентированный подход в вашей программе, т.е. вместо SQL запросов и работы с ними, вы будете создавать так называемые классы модели ( представление таблицы ), и взаимодействовать уже с этой моделью, выполняя запросы к БД с помощью различных методов класса модели.
Выучили SQL? Можете про него забыть ( не надо ), так как ORM создан для того что бы абстрагироваться от SQL запросов, ORM сама строит эти запросы и отправляет их драйверу БД, как? Гугл. Зачем? Что бы упростить вам жизнь конечно же, по опыту скажу что ORM это очень удобно и я крайне рекомендую использовать ORM в ваших проектах.
Как и СУБД, ORM есть огромное количество, мы же рассмотрим только две, которые использовал лично я, это Sequelize ( + sequelize-ts ) и TypeORM.
По своей сути они не сильно отличаются друг от друга, обе предоставляют API которое позволяет работать с любой вашей БД используя объектно ориентированных подход, но Sequelize был изначально разработан под JS и что бы нормально работать с TypeScript ему нужно расширение в виде NPM пакета sequelize-ts, TypeORM же был изначально создал под TypeScript.
Сразу упомяну что при работе с моделями таблиц, в представленной классов, хоть и не обязательно, но вам предложат использовать декораторы, рекомендую перечитать эту тему перед тем как будете писать свою первую модель, ведь декораторы в значительной мере упростят вам жизнь.
Для изучения самого Sequelize и TypeORM я рекомендую как и в случае с БД использовать официальные ресурсы, документацию, выбираем любой, и поверхностно читаем документацию, параллельно пробуя это все у себя на проекте
Sequelize - Тык ( Sequelize-ts - Тык )
TypeORM - Тык
Раздел с БД подошел к концу, далее рассмотрим дополнительные инструменты, которые может быть вам нужны, а может и нет.
PogНали
Система управления версий ( Git, на примере GitHub ):
Первый необязательный инструмент - Git, система управления версий, которая позволяет вам хранить ваш код и отслеживать разные его версии, я не буду углубляться в подробности работы этого и всех последующих инструментов, я лишь объясню зачем он используется.
Рассмотрим GitHub в качестве инструмента для хранения, отслеживания и контроля версий вашего проекта, GitHub сам по себе является одним из самых популярных инструментов подобного типа, по этому информации о нём в гугле - нескончаемое количество, но мы лишь поговорим зачем он нам нужен.
Представьте что во время разработки вам захотелось внедрить какую-то фичу которая так, или иначе будет затрагивать какой то существующий функционал проекта, ну, вы все хорошенько спроектировали, сели писать код, написали половину и внезапно передумали внедрять фичу, что делать? Ну, вспоминать как все было раньше и удалять вес написанный вами код, залезать в каждый файлик по памяти и убирать изменения.
А теперь представьте что вы работает не один, ваш друг Матвей внезапно решил присоединится к разработке RedAge v3.98.32, вот вы уже начали разрабатывать, делаете все в разных файлах не пересекаясь, но тут Матвей нашел баг в процессе написания нового функционала, пофиксил его и вроде все хорошо, но тут когда вы решили соединить ваш код вместе, оказалось что вы тоже трогали тот файл с багом и исправили баг по своему, не удобно, верно?
Вот для решения подобных задач и создан GitHub, почитать подробнее про принцип его работы можно тут.
Redis ( кэширование данных ):
Redis по сути своей, инструмент для кэширования данных из БД, по сути был создал для оптимизации, что бы лишний раз не делать запрос к БД для часто используемых данных, делает он это используя оперативную память, по этому все работает действительно быстро.
А теперь важная ремарка, Redis я видел всего на одном проекте в рейдже и использовался он там по всей видимости просто что бы его использовать, я не утверждаю что он бесполезен в проектах этой сферы, но найти ему нормальное применение я так и не смог, по этому сильно много про него я особо ничего вам не расскажу, просто поделюсь ссылкой на официальную документацию инструмента и пойдём дальше, тык.
Docker ( DevOps, Оптимизация развёртывания ):
Ещё одна тема которую я знаю поверхностно, изучал я докер чисто интереса ради и применить его по достоинству так и не удалось, это мощный инструмент который позволяет с лёгкостью развёртывать ваш огромный проект на любой машине где есть докер.
Docker - сложная тема, контейнеризация, образы, и ещё очень много сложных терминов, если попытаться понять как это все работает изнутри, можно сойти с ума, по этому я собственно и не буду пытаться объяснять то, что я и сам не понял.
В общем и целом docker используют для упрощения развёртывания проектов на серверах, вы можете настроить все окружение внутри контейнера Docker, задать все необходимые настройки, указать все необходимые пакеты, открыть все необходимы порты и когда придёт время развёртывать проект на каком то сервере, все что понадобится - установить туда свой контейнер и запустить, все, вы развернули проект, причем важный факт, вся эта история мульти-платформенная, не важно Linux у вас на сервере, или Windows, докер позволяет абстрагироваться от системы, везде где можно запустить докер - можно будет запустить ваш проект.
Делюсь источниками из которых можно подробнее изучить тему:
Тык - Docker простыми словами, буквально, на пальцах
Тык - Как работает Docker ( очень подробно )
На этом RoadMap подошел к концу, все что вам останется - сесть и писать код, используя API RageMp и те технологии которые вы выбрали, надеюсь что эти две статьи помогут вам быстро войти в сферу и переписать RedAge с нуля, снова.
Всем спасибо за внимание, жду искусственный интеллект который знает все в ответах
( Я не против дополнений, правок и даже откровенного хейта )
Последнее редактирование: