uz
Feedback
Backend

Backend

Kanalga Telegram’da oβ€˜tish

Π‘Π°ΠΉΡ‚: https://easyoffer.ru/ ВсС ΠΊΠ°Π½Π°Π»Ρ‹: t.me/+xGeAw6ckJ4liYzQy ΠšΠΎΠ½Ρ‚Π°ΠΊΡ‚ для Ρ€Π΅ΠΊΠ»Π°ΠΌΡ‹: @easyoffer_adv

Ko'proq ko'rsatish
3 790
Obunachilar
-124 soatlar
-87 kunlar
-2430 kunlar
Obunachilarni jalb qilish
Avgust '26
Avgust '26
+9
0 kanalda
Iyul '26
+16
0 kanalda
Get PRO
Iyun '26
+18
1 kanalda
Get PRO
May '26
+15
0 kanalda
Get PRO
Aprel '26
+27
0 kanalda
Get PRO
Mart '26
+40
0 kanalda
Get PRO
Fevral '26
+29
0 kanalda
Get PRO
Yanvar '26
+44
0 kanalda
Get PRO
Dekabr '25
+30
0 kanalda
Get PRO
Noyabr '25
+55
0 kanalda
Get PRO
Oktabr '25
+35
0 kanalda
Get PRO
Sentabr '25
+35
0 kanalda
Get PRO
Avgust '25
+35
0 kanalda
Get PRO
Iyul '25
+57
1 kanalda
Get PRO
Iyun '25
+30
0 kanalda
Get PRO
May '25
+97
45 kanalda
Get PRO
Aprel '25
+83
0 kanalda
Get PRO
Mart '25
+78
3 kanalda
Get PRO
Fevral '25
+80
0 kanalda
Get PRO
Yanvar '25
+139
53 kanalda
Get PRO
Dekabr '24
+77
0 kanalda
Get PRO
Noyabr '24
+106
0 kanalda
Get PRO
Oktabr '24
+189
1 kanalda
Get PRO
Sentabr '24
+68
25 kanalda
Get PRO
Avgust '24
+94
35 kanalda
Get PRO
Iyul '24
+4 066
0 kanalda
Sana
Obunachilarni jalb qilish
Esdaliklar
Kanallar
27 Avgust0
26 Avgust0
25 Avgust0
24 Avgust+1
23 Avgust+1
22 Avgust0
21 Avgust0
20 Avgust0
19 Avgust0
18 Avgust0
17 Avgust0
16 Avgust0
15 Avgust0
14 Avgust+1
13 Avgust0
12 Avgust+1
11 Avgust0
10 Avgust+1
09 Avgust+1
08 Avgust+1
07 Avgust0
06 Avgust0
05 Avgust+1
04 Avgust0
03 Avgust+1
02 Avgust0
01 Avgust0
Kanal postlari
πŸ€” Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Docker? Docker - это ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ° для Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·Π°Ρ†ΠΈΠΈ развёртывания, ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡ ΠΈ управлСния ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΌΠΈ прилоТСниями. Она позволяСт Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°ΠΌ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ, Ρ‚Π΅ΡΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈ Ρ€Π°Π·Π²ΠΎΡ€Π°Ρ‡ΠΈΠ²Π°Ρ‚ΡŒ прилоТСния Π² ΠΈΠ·ΠΎΠ»ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… срСдах, Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡ‹Ρ… ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°ΠΌΠΈ. πŸš©ΠžΡΠ½ΠΎΠ²Π½Ρ‹Π΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ Docker 🟠Docker Engine Π­Ρ‚ΠΎ сСрвСрноС ПО, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ запускаСт ΠΈ управляСт ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°ΠΌΠΈ. Бостоит ΠΈΠ· Π΄Π²ΡƒΡ… частСй: Docker Daemon: Π‘Π»ΡƒΠΆΠ±Π°, которая управляСт всСми ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ Docker (ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°ΠΌΠΈ, ΠΎΠ±Ρ€Π°Π·Π°ΠΌΠΈ ΠΈ Ρ‚.Π΄.). Docker CLI: Командная строка, Ρ‡Π΅Ρ€Π΅Π· ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΠΈ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡ‚Π²ΡƒΡŽΡ‚ с Docker Daemon. πŸŸ ΠžΠ±Ρ€Π°Π·Ρ‹ (Images) Π­Ρ‚ΠΎ ΡˆΠ°Π±Π»ΠΎΠ½Ρ‹ для создания ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ². ΠžΠ±Ρ€Π°Π· Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Π² сСбя всС зависимости, Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ, ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹Π΅ Ρ„Π°ΠΉΠ»Ρ‹, скрипты ΠΈ ΠΊΠΎΠ΄, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹ΠΉ для запуска прилоТСния. πŸŸ ΠšΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρ‹ (Containers) Π­Ρ‚ΠΎ ΠΈΠ·ΠΎΠ»ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ срСды, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ прилоТСния. ΠšΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρ‹ ΡΠΎΠ·Π΄Π°ΡŽΡ‚ΡΡ Π½Π° основС ΠΎΠ±Ρ€Π°Π·ΠΎΠ² ΠΈ содСрТат всё Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΠ΅ для Ρ€Π°Π±ΠΎΡ‚Ρ‹ прилоТСния. 🟠Docker Hub Π­Ρ‚ΠΎ ΠΎΠ±Π»Π°Ρ‡Π½Ρ‹ΠΉ сСрвис для хранСния ΠΈ распрСдСлСния Docker-ΠΎΠ±Ρ€Π°Π·ΠΎΠ². Π Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ ΠΌΠΎΠ³ΡƒΡ‚ Π·Π°Π³Ρ€ΡƒΠΆΠ°Ρ‚ΡŒ свои ΠΎΠ±Ρ€Π°Π·Ρ‹ Π² Docker Hub ΠΈ Π΄Π΅Π»ΠΈΡ‚ΡŒΡΡ ΠΈΠΌΠΈ с Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡΠΌΠΈ. 🟠Docker Compose Π­Ρ‚ΠΎ инструмСнт для опрСдСлСния ΠΈ управлСния ΠΌΠ½ΠΎΠ³ΠΎΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π½Ρ‹ΠΌΠΈ Docker-прилоТСниями. Π‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„Π°ΠΉΠ»Π° docker-compose.yml ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡŽ всСх ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ², сСтСй ΠΈ Ρ‚ΠΎΠΌΠΎΠ², Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Ρ… для Ρ€Π°Π±ΠΎΡ‚Ρ‹ прилоТСния. πŸš©ΠŸΠ»ΡŽΡΡ‹ βž•Π˜Π·ΠΎΠ»ΡΡ†ΠΈΡ ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π² своСй собствСнной ΠΈΠ·ΠΎΠ»ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΉ срСдС, Ρ‡Ρ‚ΠΎ ΠΏΡ€Π΅Π΄ΠΎΡ‚Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚Ρ‹ ΠΌΠ΅ΠΆΠ΄Ρƒ прилоТСниями. βž•ΠŸΠΎΡ€Ρ‚Π°Ρ‚ΠΈΠ²Π½ΠΎΡΡ‚ΡŒ ΠžΠ±Ρ€Π°Π·Ρ‹ Docker ΠΌΠΎΠ³ΡƒΡ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π½Π° любом сСрвСрС с установлСнным Docker, нСзависимо ΠΎΡ‚ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмы. βž•ΠœΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΡƒΠ΅ΠΌΠΎΡΡ‚ΡŒ ΠšΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρ‹ ΠΌΠΎΠΆΠ½ΠΎ Π»Π΅Π³ΠΊΠΎ ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π² зависимости ΠΎΡ‚ Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ. βž•Π‘Ρ‹ΡΡ‚Ρ€ΠΎΠ΅ Ρ€Π°Π·Π²Ρ‘Ρ€Ρ‚Ρ‹Π²Π°Π½ΠΈΠ΅ ΠšΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρ‹ Π·Π°ΠΏΡƒΡΠΊΠ°ΡŽΡ‚ΡΡ Π³ΠΎΡ€Π°Π·Π΄ΠΎ быстрСС, Ρ‡Π΅ΠΌ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΌΠ°ΡˆΠΈΠ½Ρ‹. βž•Π£ΠΏΡ€ΠΎΡ‰Π΅Π½ΠΈΠ΅ CI/CD Docker интСгрируСтся с систСмами Π½Π΅ΠΏΡ€Π΅Ρ€Ρ‹Π²Π½ΠΎΠΉ ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΠΈ ΠΈ доставки, упрощая процСссы Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΈ развёртывания. πŸš©ΠžΡΠ½ΠΎΠ²Π½Ρ‹Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ docker build: Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΎΠ±Ρ€Π°Π·Π° ΠΈΠ· Dockerfile. docker run: Запуск Π½ΠΎΠ²ΠΎΠ³ΠΎ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° ΠΈΠ· ΠΎΠ±Ρ€Π°Π·Π°. docker ps: Бписок Π·Π°ΠΏΡƒΡ‰Π΅Π½Π½Ρ‹Ρ… ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ². docker stop: ΠžΡΡ‚Π°Π½ΠΎΠ²ΠΊΠ° Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰Π΅Π³ΠΎ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°. docker rm: Π£Π΄Π°Π»Π΅Π½ΠΈΠ΅ остановлСнного ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°. docker pull: Π—Π°Π³Ρ€ΡƒΠ·ΠΊΠ° ΠΎΠ±Ρ€Π°Π·Π° ΠΈΠ· Docker Hub. docker push: Π—Π°Π³Ρ€ΡƒΠ·ΠΊΠ° ΠΎΠ±Ρ€Π°Π·Π° Π² Docker Hub. Π‘Ρ‚Π°Π²ΡŒ πŸ‘ ΠΈ Π·Π°Π±ΠΈΡ€Π°ΠΉ πŸ“š Π‘Π°Π·Ρƒ Π·Π½Π°Π½ΠΈΠΉ

2
πŸ€” Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ singleton? Π­Ρ‚ΠΎ ΠΏΠΎΡ€ΠΎΠΆΠ΄Π°ΡŽΡ‰ΠΈΠΉ шаблон проСктирования, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚, Ρ‡Ρ‚ΠΎ Ρƒ класса Π΅ΡΡ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄ΠΈΠ½ экзСмпляр, ΠΈ прСдоставляСт Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½ΡƒΡŽ Ρ‚ΠΎΡ‡ΠΊΡƒ доступа ΠΊ этому экзСмпляру. Π­Ρ‚ΠΎΡ‚ шаблон часто ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для управлСния рСсурсами, Ρ‚Π°ΠΊΠΈΠΌΠΈ ΠΊΠ°ΠΊ Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΠ»ΠΈ Π»ΠΎΠ³ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅, Π³Π΄Π΅ трСбуСтся, Ρ‡Ρ‚ΠΎΠ±Ρ‹ доступ Π±Ρ‹Π» Ρ†Π΅Π½Ρ‚Ρ€Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½Ρ‹ΠΌ ΠΈ Π΅Π΄ΠΈΠ½ΠΈΡ‡Π½Ρ‹ΠΌ. 🚩Π₯арактСристики πŸŸ Π•Π΄ΠΈΠ½ΡΡ‚Π²Π΅Π½Π½Ρ‹ΠΉ экзСмпляр Класс Singleton создаёт Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄ΠΈΠ½ экзСмпляр своСго Ρ‚ΠΈΠΏΠ° ΠΈ ΠΏΡ€Π΅Π΄ΠΎΡ‚Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ созданиС Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… экзСмпляров. πŸŸ Π“Π»ΠΎΠ±Π°Π»ΡŒΠ½Π°Ρ Ρ‚ΠΎΡ‡ΠΊΠ° доступа Singleton прСдоставляСт Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹ΠΉ доступ ΠΊ своСму экзСмпляру. Π­Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ΠΎ Ρ‡Π΅Ρ€Π΅Π· статичСский ΠΌΠ΅Ρ‚ΠΎΠ΄, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ экзСмпляр класса. πŸš©Π Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡ Π½Π° Python class Singleton: _instance = None def __new__(cls, *args, **kwargs): if not cls._instance: cls._instance = super(Singleton, cls).__new__(cls, *args, **kwargs) return cls._instance # ΠŸΡ€ΠΈΠΌΠ΅Ρ€ использования singleton1 = Singleton() singleton2 = Singleton() print(singleton1 is singleton2) # True πŸš©Π Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡ Π½Π° Java public class Singleton { private static Singleton instance; private Singleton() { // ΠΏΡ€ΠΈΠ²Π°Ρ‚Π½Ρ‹ΠΉ конструктор ΠΏΡ€Π΅Π΄ΠΎΡ‚Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ созданиС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Π²Π½Π΅ класса } public static Singleton getInstance() { if (instance == null) { instance = new Singleton(); } return instance; } } // ΠŸΡ€ΠΈΠΌΠ΅Ρ€ использования Singleton singleton1 = Singleton.getInstance(); Singleton singleton2 = Singleton.getInstance(); System.out.println(singleton1 == singleton2); // True Π‘Ρ‚Π°Π²ΡŒ πŸ‘ ΠΈ Π·Π°Π±ΠΈΡ€Π°ΠΉ πŸ“š Π‘Π°Π·Ρƒ Π·Π½Π°Π½ΠΈΠΉ
114
3
ΠŸΠΎΠΆΠΈΠ·Π½Π΅Π½Π½Ρ‹ΠΉ PRO доступ Π½Π° easyoffer β€” ΠΏΠΎ Ρ†Π΅Π½Π΅ ΠΎΠ΄Π½ΠΎΠ³ΠΎ Π³ΠΎΠ΄Π°! Π”ΠΎ 2 сСнтября Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΊΡƒΠΏΠΈΡ‚ΡŒ PRO навсСгда. ΠŸΠΎΠΊΡƒΠΏΠ°Π΅ΡˆΡŒ ΠΎΠ΄ΠΈΠ½ Ρ€Π°Π· β€” ΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΡˆΡŒΡΡ всю Тизнь. – Π‘Π°Π·Π° вопросов ΠΈ Π·Π°Π΄Π°Ρ‡ ΠΈΠ· собСсСдований – ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ Π²ΠΈΠ΄Π΅ΠΎ-ΠΎΡ‚Π²Π΅Ρ‚ΠΎΠ² Π½Π° вопросы – Записи Ρ€Π΅Π°Π»ΡŒΠ½Ρ‹Ρ… собСсСдований – Π’Ρ€Π΅Π½Π°ΠΆΠ΅Ρ€Ρ‹ "ΠŸΡ€ΠΎΡ€Π°Π±ΠΎΡ‚ΠΊΠ° вопросов" ΠΈ "РСальноС собСсСдованиС" – Аналитика Ρ‚Ρ€Π΅Π±ΠΎΠ²Π°Π½ΠΈΠΉ ΠΈΠ· вакансий – Автоотклики Π½Π° вакансии – АгрСгатор вакансий (скоро) πŸ‘‰ ΠšΡƒΠΏΠΈΡ‚ΡŒ PRO со скидкой 70%: https://easyoffer.ru/pro
128
4
πŸ€” Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ git-flow? Git-flow β€” это модСль вСтвлСния Π² Git, прСдлоТСнная ВинсСнтом ДриссСном, которая структурируСт Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ, ΡƒΠΏΡ€ΠΎΡ‰Π°Π΅Ρ‚ выпуск вСрсий ΠΈ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ ΡΡ‚Π°Π±ΠΈΠ»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°. πŸš©ΠžΡΠ½ΠΎΠ²Π½Ρ‹Π΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ git-flow πŸŸ ΠžΡΠ½ΠΎΠ²Π½Ρ‹Π΅ master: Π­Ρ‚Π° Π²Π΅Ρ‚ΠΊΠ° содСрТит ΡΡ‚Π°Π±ΠΈΠ»ΡŒΠ½Ρ‹Π΅ ΠΈ Π³ΠΎΡ‚ΠΎΠ²Ρ‹Π΅ ΠΊ выпуску вСрсии ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚Π°. ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΊΠΎΠΌΠΌΠΈΡ‚ Π² master Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡ‚ΡŒ собой Ρ€Π΅Π»ΠΈΠ·Π½ΡƒΡŽ Π²Π΅Ρ€ΡΠΈΡŽ. develop: Π­Ρ‚Π° Π²Π΅Ρ‚ΠΊΠ° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΠΈ всСх Π½ΠΎΠ²Ρ‹Ρ… Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΎΠΊ. Она содСрТит послСдний Π³ΠΎΡ‚ΠΎΠ²Ρ‹ΠΉ ΠΊ выпуску ΠΊΠΎΠ΄, Π½ΠΎ Π΅Ρ‰Ρ‘ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π½Π΅ΡΡ‚Π°Π±ΠΈΠ»ΡŒΠ½ΠΎΠΉ. πŸŸ ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‰ΠΈΠ΅ feature: Π­Ρ‚ΠΈ Π²Π΅Ρ‚ΠΊΠΈ ΡΠΎΠ·Π΄Π°ΡŽΡ‚ΡΡ для Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π½ΠΎΠ²Ρ‹Ρ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ. Они ΠΎΡ‚Π²Π΅Ρ‚Π²Π»ΡΡŽΡ‚ΡΡ ΠΎΡ‚ develop ΠΈ ΡΠ»ΠΈΠ²Π°ΡŽΡ‚ΡΡ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎ Π² develop послС Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ Ρ€Π°Π±ΠΎΡ‚Ρ‹. НапримСр, feature/новая-функция. release: Π­Ρ‚ΠΈ Π²Π΅Ρ‚ΠΊΠΈ ΡΠΎΠ·Π΄Π°ΡŽΡ‚ΡΡ для ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΊΠΈ Π½ΠΎΠ²ΠΎΠ³ΠΎ Ρ€Π΅Π»ΠΈΠ·Π°. Они ΠΎΡ‚Π²Π΅Ρ‚Π²Π»ΡΡŽΡ‚ΡΡ ΠΎΡ‚ develop, ΠΈ послС Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ всСх Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Ρ… исправлСний ΠΈ тСстирования ΡΠ»ΠΈΠ²Π°ΡŽΡ‚ΡΡ Π² master ΠΈ develop. НапримСр release/1.0.0 hotfix: Π­Ρ‚ΠΈ Π²Π΅Ρ‚ΠΊΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ для срочных исправлСний Π² ΡΡ‚Π°Π±ΠΈΠ»ΡŒΠ½ΠΎΠΉ вСрсии ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚Π°. Они ΠΎΡ‚Π²Π΅Ρ‚Π²Π»ΡΡŽΡ‚ΡΡ ΠΎΡ‚ master ΠΈ послС Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΡΠ»ΠΈΠ²Π°ΡŽΡ‚ΡΡ Π² master ΠΈ develop. НапримСр, hotfix/исправлСниС-ошибки. 🚩Как это ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ: 🟠БозданиС Π½ΠΎΠ²ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ: Π‘ΠΎΠ·Π΄Π°ΠΉΡ‚Π΅ Π²Π΅Ρ‚ΠΊΡƒ feature ΠΎΡ‚ develop. Π Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°ΠΉΡ‚Π΅ Π½ΠΎΠ²ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ. Π‘Π»Π΅ΠΉΡ‚Π΅ feature Π²Π΅Ρ‚ΠΊΡƒ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎ Π² develop. πŸŸ ΠŸΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΊΠ° ΠΊ Π½ΠΎΠ²ΠΎΠΌΡƒ Ρ€Π΅Π»ΠΈΠ·Ρƒ: Π‘ΠΎΠ·Π΄Π°ΠΉΡ‚Π΅ Π²Π΅Ρ‚ΠΊΡƒ release ΠΎΡ‚ develop. ΠŸΡ€ΠΎΠ²Π΅Π΄ΠΈΡ‚Π΅ Ρ„ΠΈΠ½Π°Π»ΡŒΠ½ΠΎΠ΅ тСстированиС ΠΈ внСситС ΠΌΠ΅Π»ΠΊΠΈΠ΅ исправлСния. Π‘Π»Π΅ΠΉΡ‚Π΅ release Π²Π΅Ρ‚ΠΊΡƒ Π² master ΠΈ develop. Π‘ΠΎΠ·Π΄Π°ΠΉΡ‚Π΅ Ρ‚Π΅Π³ для Π½ΠΎΠ²ΠΎΠΉ вСрсии Π½Π° master. πŸŸ Π‘Ρ€ΠΎΡ‡Π½Ρ‹Π΅ исправлСния: Π‘ΠΎΠ·Π΄Π°ΠΉΡ‚Π΅ Π²Π΅Ρ‚ΠΊΡƒ hotfix ΠΎΡ‚ master. Π˜ΡΠΏΡ€Π°Π²ΡŒΡ‚Π΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ. Π‘Π»Π΅ΠΉΡ‚Π΅ hotfix Π²Π΅Ρ‚ΠΊΡƒ Π² master ΠΈ develop. Π‘ΠΎΠ·Π΄Π°ΠΉΡ‚Π΅ Ρ‚Π΅Π³ для Π½ΠΎΠ²ΠΎΠΉ вСрсии Π½Π° master. πŸš©ΠŸΠ»ΡŽΡΡ‹ πŸŸ ΠžΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΡ: Π§Π΅Ρ‚ΠΊΠΎΠ΅ Ρ€Π°Π·Π³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅ ΠΌΠ΅ΠΆΠ΄Ρƒ ΡΡ‚Π°Π±ΠΈΠ»ΡŒΠ½ΠΎΠΉ вСрсиСй ΠΈ Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΎΠΉ ΡƒΠΏΡ€ΠΎΡ‰Π°Π΅Ρ‚ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠΌ. πŸŸ ΠŸΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½Π°Ρ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ°: Π›Π΅Π³ΠΊΠΎΡΡ‚ΡŒ создания ΠΈ слияния Π²Π΅Ρ‚ΠΎΠΊ способствуСт ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Ρ€Π°Π±ΠΎΡ‚Π΅ Π½Π°Π΄ нСсколькими функциями. πŸŸ ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° Ρ€Π΅Π»ΠΈΠ·ΠΎΠ²: ΠžΠ±ΠΎΡΠΎΠ±Π»Π΅Π½Π½Ρ‹Π΅ Π²Π΅Ρ‚ΠΊΠΈ для ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΊΠΈ Ρ€Π΅Π»ΠΈΠ·ΠΎΠ² ΠΈ срочных исправлСний ΡƒΠΏΡ€ΠΎΡ‰Π°ΡŽΡ‚ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Π²Π΅Ρ€ΡΠΈΠΎΠ½Π½ΠΎΡΡ‚ΡŒΡŽ. πŸš©ΠœΠΈΠ½ΡƒΡΡ‹: πŸŸ Π‘Π»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ: ΠœΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΈΠ·Π±Ρ‹Ρ‚ΠΎΡ‡Π½Ρ‹ΠΌ для Π½Π΅Π±ΠΎΠ»ΡŒΡˆΠΈΡ… ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ² с нСбольшими ΠΊΠΎΠΌΠ°Π½Π΄Π°ΠΌΠΈ. πŸŸ Π’Ρ€Π΅Π±ΠΎΠ²Π°Π½ΠΈΡ ΠΊ дисциплинС: Π’Ρ€Π΅Π±ΡƒΠ΅Ρ‚ строгого соблюдСния ΠΏΡ€Π°Π²ΠΈΠ» для обСспСчСния ΡΡ‚Π°Π±ΠΈΠ»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΈ нСпрСрывности Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ. Π‘Ρ‚Π°Π²ΡŒ πŸ‘ ΠΈ Π·Π°Π±ΠΈΡ€Π°ΠΉ πŸ“š Π‘Π°Π·Ρƒ Π·Π½Π°Π½ΠΈΠΉ
136
5
πŸ€” Как Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с лСгаси-ΠΊΠΎΠ΄ΠΎΠΌ? Π­Ρ‚ΠΎ ΠΊΠΎΠ΄, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ устарСл, Π½ΠΎ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°Π΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π² производствСнных систСмах. Он ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΠ»ΠΎΡ…ΠΎ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½, слоТным для понимания, Π½Π΅ ΠΏΠΎΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΌ тСстами ΠΈΠ»ΠΈ написанным Π½Π° ΡƒΡΡ‚Π°Ρ€Π΅Π²ΡˆΠΈΡ… тСхнологиях. Π Π°Π±ΠΎΡ‚Π° с Ρ‚Π°ΠΊΠΈΠΌ ΠΊΠΎΠ΄ΠΎΠΌ β€” частая Π·Π°Π΄Π°Ρ‡Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ², Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‰Π°Ρ особого ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π°. πŸš©ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ лСгаси-ΠΊΠΎΠ΄Π° πŸŸ ΠžΡ‚ΡΡƒΡ‚ΡΡ‚Π²ΠΈΠ΅ тСстов Π‘Π΅Π· тСстов слоТно ΠΏΠΎΠ½ΡΡ‚ΡŒ, Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π»ΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎ. πŸŸ Π‘Π»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ понимания ЛСгаси-ΠΊΠΎΠ΄ часто ΠΏΠ»ΠΎΡ…ΠΎ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½ ΠΈ написан Π±Π΅Π· соблюдСния соврСмСнных стандартов. πŸŸ Π—Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ‚ΡŒ ΠΎΡ‚ ΡƒΡΡ‚Π°Ρ€Π΅Π²ΡˆΠΈΡ… Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΉ ЛСгаси-ΠΊΠΎΠ΄ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ привязан ΠΊ Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊΠ°ΠΌ ΠΈΠ»ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°ΠΌ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ большС Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ΡΡ. 🟠Π₯Ρ€ΡƒΠΏΠΊΠΎΡΡ‚ΡŒ Π”Π°ΠΆΠ΅ нСбольшиС измСнСния ΠΌΠΎΠ³ΡƒΡ‚ привСсти ΠΊ нСпрСдсказуСмым ошибкам. πŸŸ Π”ΠΎΠ»Π³ΠΈΠΉ Ρ†ΠΈΠΊΠ» Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Из-Π·Π° слоТности внСсСния ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ ΠΈ отсутствия Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… процСссов Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ‚ большС Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ. πŸš©Π‘Ρ‚Ρ€Π°Ρ‚Π΅Π³ΠΈΠΈ Ρ€Π°Π±ΠΎΡ‚Ρ‹ с лСгаси-ΠΊΠΎΠ΄ΠΎΠΌ πŸŸ Π˜Π·ΡƒΡ‡Π΅Π½ΠΈΠ΅ ΠΈ Π°Π½Π°Π»ΠΈΠ· ΠŸΡ€Π΅ΠΆΠ΄Π΅ Ρ‡Π΅ΠΌ Π²Π½ΠΎΡΠΈΡ‚ΡŒ измСнСния, ΠΈΠ·ΡƒΡ‡ΠΈΡ‚Π΅ ΠΊΠΎΠ΄ ΠΈ Π΅Π³ΠΎ ΠΎΠΊΡ€ΡƒΠΆΠ΅Π½ΠΈΠ΅: ΠŸΡ€ΠΎΠ²Π΅Π΄ΠΈΡ‚Π΅ Ρ€Π΅Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ½Π³ "ΠΎΠΊΡ€ΡƒΠΆΠ°ΡŽΡ‰Π΅Π³ΠΎ контСкста" (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, упроститС слоТныС ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹). Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Π΄Π΅Π±Π°Π³Π³Π΅Ρ€Ρ‹, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ½ΡΡ‚ΡŒ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ систСмы. ΠŸΡ€ΠΈΠ²Π»Π΅ΠΊΠΈΡ‚Π΅ экспСртов, Π·Π½Π°ΠΊΠΎΠΌΡ‹Ρ… с систСмой, Ссли ΠΎΠ½ΠΈ доступны. ΠŸΠΎΡΡ‚Π°Ρ€Π°ΠΉΡ‚Π΅ΡΡŒ Π²Ρ‹Π΄Π΅Π»ΠΈΡ‚ΡŒ области, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ часто ΠΌΠΎΠ΄ΠΈΡ„ΠΈΡ†ΠΈΡ€ΡƒΡŽΡ‚ΡΡ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠΎΡΡ€Π΅Π΄ΠΎΡ‚ΠΎΡ‡ΠΈΡ‚ΡŒΡΡ Π½Π° Π½ΠΈΡ…. πŸŸ ΠŸΠΎΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ тСстами ΠŸΠ΅Ρ€Π΅Π΄ внСсСниСм ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ Π½Π°ΠΏΠΈΡˆΠΈΡ‚Π΅ Π±Π°Π·ΠΎΠ²Ρ‹Π΅ unit-тСсты ΠΈΠ»ΠΈ ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹Π΅ тСсты: НачнитС с рСгрСссионных тСстов для фиксации Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ повСдСния. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ "Characterization Tests", Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π·Π°Ρ„ΠΈΠΊΡΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ, ΠΊΠ°ΠΊ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ систСма, Π° Π½Π΅ ΠΊΠ°ΠΊ ΠΎΠ½Π° Π΄ΠΎΠ»ΠΆΠ½Π° Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ. ΠŸΠΎΡΡ‚Π΅ΠΏΠ΅Π½Π½ΠΎ ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ²Π°ΠΉΡ‚Π΅ ΠΏΠΎΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ тСстами. πŸŸ ΠœΠΎΠ΄ΡƒΠ»ΡŒΠ½Π°Ρ Ρ€Π°Π±ΠΎΡ‚Π° Если Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, ΠΈΠ·ΠΎΠ»ΠΈΡ€ΡƒΠΉΡ‚Π΅ старыС ΠΌΠΎΠ΄ΡƒΠ»ΠΈ, минимизируя ΠΈΡ… влияниС Π½Π° Π½ΠΎΠ²ΡƒΡŽ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ "ΡΡ‚Ρ€Π°Ρ‚Π΅Π³ΠΈΡŽ шва" (Seam Technique) для упрощСния взаимодСйствия с лСгаси-ΠΊΠΎΠ΄ΠΎΠΌ: Π”ΠΎΠ±Π°Π²ΡŒΡ‚Π΅ ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½Ρ‹ΠΉ слой ΠΌΠ΅ΠΆΠ΄Ρƒ Π½ΠΎΠ²Ρ‹ΠΌ ΠΈ старым ΠΊΠΎΠ΄ΠΎΠΌ. Π­Ρ‚ΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ Π²Π°ΠΌ ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒ ΠΈ Ρ‚Π΅ΡΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ поэтапно. πŸŸ Π Π΅Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ½Π³ РаздСляйтС большиС ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΈ классы Π½Π° ΠΌΠ΅Π»ΠΊΠΈΠ΅, с понятной ΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²Π΅Π½Π½ΠΎΡΡ‚ΡŒΡŽ. ΠŸΠ΅Ρ€Π΅ΠΈΠΌΠ΅Π½ΠΎΠ²Ρ‹Π²Π°ΠΉΡ‚Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ для ΡƒΠ»ΡƒΡ‡ΡˆΠ΅Π½ΠΈΡ читаСмости. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΡˆΠ°Π±Π»ΠΎΠ½Ρ‹ проСктирования, Ссли это обоснованно. ΠŸΡ€ΠΈΠΌΠ΅Π½ΡΠΉΡ‚Π΅ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ "Boy Scout Rule": оставляйтС ΠΊΠΎΠ΄ Ρ‡ΡƒΡ‚ΡŒ Π»ΡƒΡ‡ΡˆΠ΅, Ρ‡Π΅ΠΌ ΠΎΠ½ Π±Ρ‹Π». πŸŸ Π”Π΅ΠΊΠΎΠΌΠΏΠΎΠ·ΠΈΡ†ΠΈΡ систСмы ΠŸΠΎΡΡ‚Π΅ΠΏΠ΅Π½Π½ΠΎ выдСляйтС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Π² нСзависимыС ΠΌΠΎΠ΄ΡƒΠ»ΠΈ ΠΈΠ»ΠΈ микросСрвисы: ΠžΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚Π΅ ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹Π΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ систСмы. Π Π΅Π°Π»ΠΈΠ·ΡƒΠΉΡ‚Π΅ Π½ΠΎΠ²Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π²Π½Π΅ лСгаси-ΠΊΠΎΠ΄Π°, минимизируя Π΅Π³ΠΎ измСнСния. 🟠ОбновлСниС зависимостСй Если лСгаси-ΠΊΠΎΠ΄ зависит ΠΎΡ‚ ΡƒΡΡ‚Π°Ρ€Π΅Π²ΡˆΠΈΡ… Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ ΠΈΠ»ΠΈ Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊΠΎΠ², поэтапно ΠΎΠ±Π½ΠΎΠ²ΠΈΡ‚Π΅ ΠΈΡ…: ΠžΠ±Π½ΠΎΠ²Π»ΡΠΉΡ‚Π΅ зависимости Π² порядкС ΠΈΡ… ваТности ΠΈ уровня риска. Π’Ρ‰Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ тСстируйтС ΠΊΠ°ΠΆΠ΄ΠΎΠ΅ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅. πŸŸ Π”ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Если докумСнтация отсутствуСт, создайтС Π΅Ρ‘: ΠžΠΏΠΈΡΡ‹Π²Π°ΠΉΡ‚Π΅ ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹Π΅ части систСмы. ДобавляйтС ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ Π² ΠΊΠΎΠ΄, ΠΎΠ±ΡŠΡΡΠ½ΡΡŽΡ‰ΠΈΠ΅ слоТныС мСста. πŸŸ Π˜Π½ΡΡ‚Ρ€ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ Π°Π½Π°Π»ΠΈΠ·Π° ΠΊΠΎΠ΄Π° Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ статичСский Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ ΠΊΠΎΠ΄Π° (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, SonarQube, ReSharper) для выявлСния ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ ΠΈ ΠΏΠΎΠ²Ρ‹ΡˆΠ΅Π½ΠΈΡ качСства. 🚩Ошибки ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с лСгаси-ΠΊΠΎΠ΄ΠΎΠΌ ΠŸΠΎΠ»Π½Ρ‹ΠΉ Ρ€Π΅Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ½Π³ "с нуля" Π±Π΅Π· понимания бизнСса ΠΈ Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΡ… процСссов. ВнСсСниС ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ Π±Π΅Π· тСстирования. Π˜Π³Π½ΠΎΡ€ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ влияния ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ Π½Π° систСму Π² Ρ†Π΅Π»ΠΎΠΌ. Π‘Ρ‚Π°Π²ΡŒ πŸ‘ ΠΈ Π·Π°Π±ΠΈΡ€Π°ΠΉ πŸ“š Π‘Π°Π·Ρƒ Π·Π½Π°Π½ΠΈΠΉ
123
6
πŸ€” КакиС Π΅ΡΡ‚ΡŒ ΠΊΠΎΠ΄Ρ‹ ΠΎΡ‚Π²Π΅Ρ‚ΠΎΠ² HTTP? ΠšΠΎΠ΄Ρ‹ ΠΎΡ‚Π²Π΅Ρ‚ΠΎΠ² HTTP β€” это Ρ‚Ρ€Π΅Ρ…Π·Π½Π°Ρ‡Π½Ρ‹Π΅ числовыС ΠΊΠΎΠ΄Ρ‹, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Π΅ для обозначСния Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π° запроса ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° ΠΊ сСрвСру. Они ΠΏΠΎΠΌΠΎΠ³Π°ΡŽΡ‚ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Ρƒ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Ρƒ) ΠΏΠΎΠ½ΡΡ‚ΡŒ, ΠΊΠ°ΠΊ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ ΠΎΡ‚Π²Π΅Ρ‚. ВсС ΠΊΠΎΠ΄Ρ‹ дСлятся Π½Π° ΠΏΡΡ‚ΡŒ ΠΊΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΠΉ: 🟠1xx: Π˜Π½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΎΠ½Π½Ρ‹Π΅ Π­Ρ‚ΠΈ ΠΊΠΎΠ΄Ρ‹ ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚, Ρ‡Ρ‚ΠΎ запрос Π±Ρ‹Π» ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½, ΠΈ процСсс продолТаСтся. 100 Continue: ΠšΠ»ΠΈΠ΅Π½Ρ‚ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°Ρ‚ΡŒ запрос. 101 Switching Protocols: Π‘Π΅Ρ€Π²Π΅Ρ€ ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π½Π° Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ» ΠΏΠΎ запросу ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°. 🟠2xx: УспСх Π­Ρ‚ΠΈ ΠΊΠΎΠ΄Ρ‹ ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚ Π½Π° ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎΠ΅ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ запроса. 200 OK: Запрос ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½, ΠΈ сСрвСр Π²Π΅Ρ€Π½ΡƒΠ» Π½ΡƒΠΆΠ½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅. 201 Created: Запрос ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½, ΠΈ Π±Ρ‹Π» создан Π½ΠΎΠ²Ρ‹ΠΉ рСсурс. 202 Accepted: Запрос принят, Π½ΠΎ Π΅Ρ‰Π΅ Π½Π΅ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Π½. 204 No Content: Запрос ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½, Π½ΠΎ Π² ΠΎΡ‚Π²Π΅Ρ‚Π΅ Π½Π΅Ρ‚ содСрТимого. 🟠3xx: ΠŸΠ΅Ρ€Π΅Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Π­Ρ‚ΠΈ ΠΊΠΎΠ΄Ρ‹ ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚, Ρ‡Ρ‚ΠΎ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΏΡ€Π΅Π΄ΠΏΡ€ΠΈΠ½ΡΡ‚ΡŒ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ дСйствия для Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ запроса. 301 Moved Permanently: РСсурс Π±Ρ‹Π» ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π΅Π½ Π½Π° постоянный Π½ΠΎΠ²Ρ‹ΠΉ URL. 302 Found: РСсурс Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ находится ΠΏΠΎ Π΄Ρ€ΡƒΠ³ΠΎΠΌΡƒ URL. 304 Not Modified: РСсурс Π½Π΅ измСнился с послСднСго запроса ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°. 🟠4xx: Ошибки ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° Π­Ρ‚ΠΈ ΠΊΠΎΠ΄Ρ‹ ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚ Π½Π° ошибки ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° ΠΏΡ€ΠΈ Ρ„ΠΎΡ€ΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ запроса. 400 Bad Request: НСкоррСктный запрос ΠΈΠ·-Π·Π° синтаксичСской ошибки. 401 Unauthorized: Запрос Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ Π°ΡƒΡ‚Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ. 403 Forbidden: Π£ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° Π½Π΅Ρ‚ ΠΏΡ€Π°Π² доступа ΠΊ рСсурсу. 404 Not Found: РСсурс Π½Π΅ Π½Π°ΠΉΠ΄Π΅Π½. 409 Conflict: ΠšΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚ запроса с Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΌ состояниСм рСсурса. 🟠5xx: Ошибки сСрвСра Π­Ρ‚ΠΈ ΠΊΠΎΠ΄Ρ‹ ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚ Π½Π° ошибки сСрвСра ΠΏΡ€ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎΠ³ΠΎ запроса ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°. 500 Internal Server Error: ВнутрСнняя ошибка сСрвСра. 501 Not Implemented: Π‘Π΅Ρ€Π²Π΅Ρ€ Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡƒΡŽ для выполнСния запроса. 502 Bad Gateway: Π‘Π΅Ρ€Π²Π΅Ρ€ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ» Π½Π΅ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½Ρ‹ΠΉ ΠΎΡ‚Π²Π΅Ρ‚ ΠΎΡ‚ Π²Ρ‹ΡˆΠ΅ΡΡ‚ΠΎΡΡ‰Π΅Π³ΠΎ сСрвСра. 503 Service Unavailable: Π‘Π΅Ρ€Π²Π΅Ρ€ Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ нСдоступСн. Π‘Ρ‚Π°Π²ΡŒ πŸ‘ ΠΈ Π·Π°Π±ΠΈΡ€Π°ΠΉ πŸ“š Π‘Π°Π·Ρƒ Π·Π½Π°Π½ΠΈΠΉ
147
7
πŸ€” Π•ΡΡ‚ΡŒ Π»ΠΈ Π΄ΠΈΠ°Π»Π΅ΠΊΡ‚Ρ‹ Π² SQL? Π”Π°, Π² SQL Π΅ΡΡ‚ΡŒ Π΄ΠΈΠ°Π»Π΅ΠΊΡ‚Ρ‹. Π­Ρ‚ΠΎ стандартный язык для управлСния рСляционными Π±Π°Π·Π°ΠΌΠΈ Π΄Π°Π½Π½Ρ‹Ρ…, Π½ΠΎ каТдая систСма управлСния Π±Π°Π·Π°ΠΌΠΈ Π΄Π°Π½Π½Ρ‹Ρ… (Π‘Π£Π‘Π”) ΠΌΠΎΠΆΠ΅Ρ‚ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Ρ‹Π²Π°Ρ‚ΡŒ Π΅Π³ΠΎ ΠΏΠΎ-своСму, добавляя собствСнныС Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ ΠΈ особСнности. Π­Ρ‚ΠΈ Π²Π°Ρ€ΠΈΠ°Ρ†ΠΈΠΈ Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ Π΄ΠΈΠ°Π»Π΅ΠΊΡ‚Π°ΠΌΠΈ SQL. πŸš©ΠŸΠΎΡ‡Π΅ΠΌΡƒ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ Π΄ΠΈΠ°Π»Π΅ΠΊΡ‚Ρ‹ SQL? πŸŸ Π Π°Π·Π½Ρ‹Π΅ стандарты SQL хотя ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ стандарты SQL (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, SQL-92, SQL:1999, SQL:2003, SQL:2011 ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅), Π½Π΅ всС Π‘Π£Π‘Π” ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ ΠΈΡ… ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚. ВмСсто этого каТдая Π‘Π£Π‘Π” Π°Π΄Π°ΠΏΡ‚ΠΈΡ€ΡƒΠ΅Ρ‚ стандарт ΠΏΠΎΠ΄ свои Π½ΡƒΠΆΠ΄Ρ‹. πŸŸ ΠŸΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΈ оптимизация Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ Π‘Π£Π‘Π” Π΄ΠΎΠ±Π°Π²Π»ΡΡŽΡ‚ спСцифичСскиС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΡƒΠ»ΡƒΡ‡ΡˆΠ°ΡŽΡ‚ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с Π΄Π°Π½Π½Ρ‹ΠΌΠΈ эффСктивнСС. πŸŸ Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ возмоТности каТдая Π‘Π£Π‘Π” ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€Π΅Π΄Π»Π°Π³Π°Ρ‚ΡŒ ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠ΅ Ρ‚ΠΈΠΏΡ‹ Π΄Π°Π½Π½Ρ‹Ρ…, Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½Π½Ρ‹Π΅ индСксы, собствСнныС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π°Π½Π°Π»ΠΈΡ‚ΠΈΠΊΠΈ ΠΈ Ρ‚. Π΄. πŸš©ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ Π΄ΠΈΠ°Π»Π΅ΠΊΡ‚ΠΎΠ² SQL 🟠MySQL SQL ΠΈΠΌΠ΅Π΅Ρ‚ спСцифичСскиС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ LIMIT для ограничСния количСства строк Π² запросС ΠΈ спСцифичный синтаксис для UPSERT (INSERT ... ON DUPLICATE KEY UPDATE). 🟠PostgreSQL SQL ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ слоТныС Ρ‚ΠΈΠΏΡ‹ Π΄Π°Π½Π½Ρ‹Ρ…, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ JSON ΠΈ массивы, Π° Ρ‚Π°ΠΊΠΆΠ΅ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½Π½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Ρ€Π°Π±ΠΎΡ‚Ρ‹ с рСкурсивными запросами. 🟠Microsoft SQL Server (T-SQL) Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π½Ρ‹Π΅ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ DECLARE, BEGIN ... END, TRY ... CATCH ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅. 🟠Oracle SQL (PL/SQL) содСрТит ΠΌΠΎΡ‰Π½Ρ‹ΠΉ встроСнный язык программирования для написания Ρ…Ρ€Π°Π½ΠΈΠΌΡ‹Ρ… ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€ ΠΈ Ρ‚Ρ€ΠΈΠ³Π³Π΅Ρ€ΠΎΠ². 🟠SQLite SQL минималистичный Π΄ΠΈΠ°Π»Π΅ΠΊΡ‚, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ слоТныС конструкции, Π½ΠΎ ΡƒΠ΄ΠΎΠ±Π΅Π½ для встраиваСмых Ρ€Π΅ΡˆΠ΅Π½ΠΈΠΉ. 🚩Как ΡƒΡ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒ Π΄ΠΈΠ°Π»Π΅ΠΊΡ‚Ρ‹ ΠΏΡ€ΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅? Если ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ Π΄ΠΎΠ»ΠΆΠ΅Π½ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π½Π° Ρ€Π°Π·Π½Ρ‹Ρ… Π‘Π£Π‘Π”, слСдуСт ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ стандартный SQL (ANSI SQL) ΠΈΠ»ΠΈ ORM (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, SQLAlchemy, Hibernate), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ Π°Π΄Π°ΠΏΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ запросы ΠΏΠΎΠ΄ Π½ΡƒΠΆΠ½Ρ‹ΠΉ Π΄ΠΈΠ°Π»Π΅ΠΊΡ‚. ΠŸΡ€ΠΈ Π²Ρ‹Π±ΠΎΡ€Π΅ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΉ Π‘Π£Π‘Π” Π²Π°ΠΆΠ½ΠΎ ΠΈΠ·ΡƒΡ‡ΠΈΡ‚ΡŒ Π΅Ρ‘ спСцифичСскиС возмоТности ΠΈ ограничСния, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΏΠ΅Ρ€Π΅Π½ΠΎΡΠΈΠΌΠΎΡΡ‚ΡŒ SQL-ΠΊΠΎΠ΄Π° ΠΌΠ΅ΠΆΠ΄Ρƒ Ρ€Π°Π·Π½Ρ‹ΠΌΠΈ Π΄ΠΈΠ°Π»Π΅ΠΊΡ‚Π°ΠΌΠΈ Π½Π΅ всСгда Ρ‚Ρ€ΠΈΠ²ΠΈΠ°Π»ΡŒΠ½Π°. Π‘Ρ‚Π°Π²ΡŒ πŸ‘ ΠΈ Π·Π°Π±ΠΈΡ€Π°ΠΉ πŸ“š Π‘Π°Π·Ρƒ Π·Π½Π°Π½ΠΈΠΉ
168
8
πŸ€” Как ΡƒΠ·Π½Π°Ρ‚ΡŒ свободноС мСсто Π½Π° дискС Π² консоли Linux? Π’ Linux Π΅ΡΡ‚ΡŒ нСсколько ΠΊΠΎΠΌΠ°Π½Π΄ для ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ свободного мСста Π½Π° дискС. 🟠`df` β€” информация ΠΎ дисках Π­Ρ‚Π° ΠΊΠΎΠΌΠ°Π½Π΄Π° ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Π΅Ρ‚ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ Ρ„Π°ΠΉΠ»ΠΎΠ²Ρ‹Ρ… систСмах, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ ΠΎΠ±Ρ‰ΠΈΠΉ ΠΎΠ±ΡŠΡ‘ΠΌ, использованноС ΠΈ свободноС пространство. df -h Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ свободноС мСсто Π½Π° ΠΊΠΎΡ€Π½Π΅Π²ΠΎΠΌ (/) Ρ€Π°Π·Π΄Π΅Π»Π΅: df -h / Если Π½ΡƒΠΆΠ½ΠΎ ΡƒΠ·Π½Π°Ρ‚ΡŒ мСсто Π½Π° ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΌ дискС ΠΈΠ»ΠΈ Ρ€Π°Π·Π΄Π΅Π»Π΅: df -h /dev/sda1 🟠`du` β€” информация ΠΎΠ± использовании мСста ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ΠΎΠΌ Команда du ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚, сколько мСста Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ‚ конкрСтная дирСктория du -sh /ΠΏΡƒΡ‚ΡŒ/ΠΊ/ΠΏΠ°ΠΏΠΊΠ΅ lsblk β€” информация ΠΎ дисках ΠΈ Ρ€Π°Π·Π΄Π΅Π»Π°Ρ… lsblk -o NAME,SIZE,FSTYPE,MOUNTPOINT 🟠`fdisk` ΠΈ `parted` β€” Π΄Π΅Ρ‚Π°Π»ΡŒΠ½Π°Ρ информация ΠΎ Ρ€Π°Π·Π΄Π΅Π»Π°Ρ… Если Π½ΡƒΠΆΠ½ΠΎ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ структуру Ρ€Π°Π·Π΄Π΅Π»ΠΎΠ² диска sudo fdisk -l ΠΈΠ»ΠΈ sudo parted -l 🟠`ncdu` β€” ΡƒΠ΄ΠΎΠ±Π½Ρ‹ΠΉ просмотр занятого пространства Если du Π½Π΅ΡƒΠ΄ΠΎΠ±Π΅Π½, ΠΌΠΎΠΆΠ½ΠΎ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ncdu: sudo apt install ncdu # Для Debian/Ubuntu sudo yum install ncdu # Для CentOS/RHEL ncdu Π‘Ρ‚Π°Π²ΡŒ πŸ‘ ΠΈ Π·Π°Π±ΠΈΡ€Π°ΠΉ πŸ“š Π‘Π°Π·Ρƒ Π·Π½Π°Π½ΠΈΠΉ
173
9
πŸ€” КакиС Π΅ΡΡ‚ΡŒ Π²ΠΈΠ΄Ρ‹ join? Π’ рСляционных Π±Π°Π·Π°Ρ… Π΄Π°Π½Π½Ρ‹Ρ… SQL ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ нСсколько Π²ΠΈΠ΄ΠΎΠ² ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ JOIN для объСдинСния строк ΠΈΠ· Π΄Π²ΡƒΡ… ΠΈΠ»ΠΈ Π±ΠΎΠ»Π΅Π΅ Ρ‚Π°Π±Π»ΠΈΡ† Π½Π° основС связанных столбцов. КаТдая ΠΈΠ· этих ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Π° для ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… сцСнариСв. ΠžΡΠ½ΠΎΠ²Π½Ρ‹Π΅ Π²ΠΈΠ΄Ρ‹ JOIN Π²ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‚: 🟠INNER JOIN INNER JOIN Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ строки, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΠΌΠ΅ΡŽΡ‚ ΡΠΎΠ²ΠΏΠ°Π΄Π°ΡŽΡ‰ΠΈΠ΅ значСния Π² ΠΎΠ±Π΅ΠΈΡ… Ρ‚Π°Π±Π»ΠΈΡ†Π°Ρ…. Π­Ρ‚ΠΎ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ часто ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹ΠΉ Ρ‚ΠΈΠΏ JOIN. ИспользованиС: Для извлСчСния Π΄Π°Π½Π½Ρ‹Ρ…, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΠΌΠ΅ΡŽΡ‚ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ записи Π² ΠΎΠ±Π΅ΠΈΡ… Ρ‚Π°Π±Π»ΠΈΡ†Π°Ρ…. 🟠LEFT (OUTER) JOIN LEFT JOIN (ΠΈΠ»ΠΈ LEFT OUTER JOIN) Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ всС строки ΠΈΠ· Π»Π΅Π²ΠΎΠΉ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ ΠΈ ΡΠΎΠ²ΠΏΠ°Π΄Π°ΡŽΡ‰ΠΈΠ΅ строки ΠΈΠ· ΠΏΡ€Π°Π²ΠΎΠΉ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹. Если Π½Π΅Ρ‚ совпадСния, Ρ‚ΠΎ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ ΠΈΠ· ΠΏΡ€Π°Π²ΠΎΠΉ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ Π±ΡƒΠ΄ΡƒΡ‚ NULL. ИспользованиС: Когда Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ всС Π΄Π°Π½Π½Ρ‹Π΅ ΠΈΠ· ΠΎΠ΄Π½ΠΎΠΉ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ ΠΈ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ Π΄Π°Π½Π½Ρ‹Π΅ ΠΈΠ· Π΄Ρ€ΡƒΠ³ΠΎΠΉ. 🟠RIGHT (OUTER) JOIN RIGHT JOIN (ΠΈΠ»ΠΈ RIGHT OUTER JOIN) Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ всС строки ΠΈΠ· ΠΏΡ€Π°Π²ΠΎΠΉ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ ΠΈ ΡΠΎΠ²ΠΏΠ°Π΄Π°ΡŽΡ‰ΠΈΠ΅ строки ΠΈΠ· Π»Π΅Π²ΠΎΠΉ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹. Если Π½Π΅Ρ‚ совпадСния, Ρ‚ΠΎ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ ΠΈΠ· Π»Π΅Π²ΠΎΠΉ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ Π±ΡƒΠ΄ΡƒΡ‚ NULL. ИспользованиС: Когда Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ всС Π΄Π°Π½Π½Ρ‹Π΅ ΠΈΠ· ΠΏΡ€Π°Π²ΠΎΠΉ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ ΠΈ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ Π΄Π°Π½Π½Ρ‹Π΅ ΠΈΠ· Π»Π΅Π²ΠΎΠΉ. 🟠FULL (OUTER) JOIN FULL JOIN (ΠΈΠ»ΠΈ FULL OUTER JOIN) Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ всС строки, ΠΊΠΎΠ³Π΄Π° Π΅ΡΡ‚ΡŒ совпадСниС Π² ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ· Ρ‚Π°Π±Π»ΠΈΡ†. Если совпадСния Π½Π΅Ρ‚, Ρ‚ΠΎ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‚ΡΡ NULL для ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΉ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹. ИспользованиС: Для получСния всСх Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΠ· ΠΎΠ±Π΅ΠΈΡ… Ρ‚Π°Π±Π»ΠΈΡ†, нСзависимо ΠΎΡ‚ совпадСний. 🟠CROSS JOIN CROSS JOIN Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π΄Π΅ΠΊΠ°Ρ€Ρ‚ΠΎΠ²ΠΎ ΠΏΡ€ΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½ΠΈΠ΅ Π΄Π²ΡƒΡ… Ρ‚Π°Π±Π»ΠΈΡ†, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ каТдая строка ΠΈΠ· ΠΏΠ΅Ρ€Π²ΠΎΠΉ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ соСдиняСтся с ΠΊΠ°ΠΆΠ΄ΠΎΠΉ строкой ΠΈΠ· Π²Ρ‚ΠΎΡ€ΠΎΠΉ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹. ИспользованиС: Когда трСбуСтся ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ всС строки ΠΈΠ· Π΄Π²ΡƒΡ… Ρ‚Π°Π±Π»ΠΈΡ† Π±Π΅Π· ΡƒΡ‡Π΅Ρ‚Π° связи. 🟠SELF JOIN SELF JOIN это особый случай JOIN, Π³Π΄Π΅ Ρ‚Π°Π±Π»ΠΈΡ†Π° соСдиняСтся сама с собой. ΠžΠ±Ρ‹Ρ‡Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ с псСвдонимами Ρ‚Π°Π±Π»ΠΈΡ† для различСния Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… экзСмпляров ΠΎΠ΄Π½ΠΎΠΉ ΠΈ Ρ‚ΠΎΠΉ ΠΆΠ΅ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹. ИспользованиС: Для сравнСния строк Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΎΠ΄Π½ΠΎΠΉ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹. πŸš©ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ использования 🟠INNER JOIN Для получСния списка студСнтов ΠΈ ΠΈΡ… курсов. 🟠LEFT JOIN Для получСния всСх сотрудников ΠΈ ΠΈΡ… ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ², Π΄Π°ΠΆΠ΅ Ссли Ρƒ сотрудника Π½Π΅Ρ‚ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°. 🟠RIGHT JOIN Для получСния всСх ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ² ΠΈ сотрудников, Π΄Π°ΠΆΠ΅ Ссли Ρƒ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° Π½Π΅Ρ‚ Π½Π°Π·Π½Π°Ρ‡Π΅Π½Π½ΠΎΠ³ΠΎ сотрудника. 🟠FULL JOIN Для получСния ΠΏΠΎΠ»Π½ΠΎΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΎ студСнтах ΠΈ курсах, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ Ρ‚Π΅Ρ…, ΠΊΡ‚ΠΎ Π΅Ρ‰Π΅ Π½Π΅ записан Π½Π° курс ΠΈΠ»ΠΈ курсы, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΅Ρ‰Π΅ Π½ΠΈΠΊΡ‚ΠΎ Π½Π΅ записан. 🟠CROSS JOIN Для создания всСх Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Ρ… ΠΊΠΎΠΌΠ±ΠΈΠ½Π°Ρ†ΠΈΠΉ ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚ΠΎΠ² ΠΈ ΠΊΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΠΉ. 🟠SELF JOIN Для нахоТдСния ΠΏΠ°Ρ€ сотрудников ΠΈΠ· ΠΎΠ΄Π½ΠΎΠΉ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ с ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹ΠΌΠΈ ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€Π°ΠΌΠΈ. Π‘Ρ‚Π°Π²ΡŒ πŸ‘ ΠΈ Π·Π°Π±ΠΈΡ€Π°ΠΉ πŸ“š Π‘Π°Π·Ρƒ Π·Π½Π°Π½ΠΈΠΉ
172
10
πŸ€” Π§Ρ‚ΠΎ моТСшь Ρ€Π°ΡΡΠΊΠ°Π·Π°Ρ‚ΡŒ ΠΏΡ€ΠΎ HTML? HTML (HyperText Markup Language) β€” это основной язык Ρ€Π°Π·ΠΌΠ΅Ρ‚ΠΊΠΈ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹ΠΉ для создания ΠΈ структурирования Π²Π΅Π±-страниц. HTML позволяСт ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ Π²Π΅Π±-страницы с тСкстом, изобраТСниями, ссылками, Ρ„ΠΎΡ€ΠΌΠ°ΠΌΠΈ ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ элСмСнтами, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½Ρ‹ Π² Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π΅. Он являСтся Ρ„ΡƒΠ½Π΄Π°ΠΌΠ΅Π½Ρ‚ΠΎΠΌ Π²Π΅Π±-Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΉ ΠΈ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π² Ρ‚Π°Π½Π΄Π΅ΠΌΠ΅ с CSS (Cascading Style Sheets) ΠΈ JavaScript для создания ΠΏΠΎΠ»Π½ΠΎΡ†Π΅Π½Π½Ρ‹Ρ… Π²Π΅Π±-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ. πŸš©ΠžΡΠ½ΠΎΠ²Π½Ρ‹Π΅ аспСкты HTML: Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π° Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°: HTML-Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ состоит ΠΈΠ· Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… элСмСнтов, ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… прСдставлСн Ρ‚Π΅Π³Π°ΠΌΠΈ. Π’Π΅Π³ΠΈ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‚, ΠΊΠ°ΠΊ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ части Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π° Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½Ρ‹ Π² Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π΅. 🟠 <!DOCTYPE html>: ΠžΠΏΡ€Π΅Π΄Π΅Π»ΡΠ΅Ρ‚ Ρ‚ΠΈΠΏ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π° ΠΈ Π²Π΅Ρ€ΡΠΈΡŽ HTML. 🟠 <html>: ΠšΠΎΡ€Π½Π΅Π²ΠΎΠΉ элСмСнт Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°. 🟠<head>: Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠΈΡ‚ ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½Ρ‹Π΅ ΠΎ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π΅, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ Ρ‚Π΅Π³ΠΈ <title>, <meta>, стили ΠΈ скрипты. 🟠 <body>: Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠΈΡ‚ Π²ΠΈΠ΄ΠΈΠΌΡƒΡŽ Ρ‡Π°ΡΡ‚ΡŒ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ тСкст, изобраТСния, ссылки ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ элСмСнты. Π­Π»Π΅ΠΌΠ΅Π½Ρ‚Ρ‹ ΠΈ Ρ‚Π΅Π³ΠΈ: HTML ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ Ρ‚Π΅Π³ΠΈ для опрСдСлСния Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… элСмСнтов. Π’Π΅Π³ΠΈ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΠΈΠ΄ΡƒΡ‚ Π² ΠΏΠ°Ρ€Π°Ρ…: ΠΎΡ‚ΠΊΡ€Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΉ Ρ‚Π΅Π³ <tag> ΠΈ Π·Π°ΠΊΡ€Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΉ Ρ‚Π΅Π³ </tag>. НСкоторыС Ρ‚Π΅Π³ΠΈ ΡΠ²Π»ΡΡŽΡ‚ΡΡ ΡΠ°ΠΌΠΎΠ·Π°ΠΊΡ€Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΌΠΈΡΡ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, <img /> ΠΈ <br />. 🟠<h1> - <h6>: Π—Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΈ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… ΡƒΡ€ΠΎΠ²Π½Π΅ΠΉ. 🟠 <p>: ΠŸΠ°Ρ€Π°Π³Ρ€Π°Ρ„ тСкста. 🟠<a>: ГипСрссылка. 🟠 <img>: Π˜Π·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅. 🟠<ul>, <ol>, <li>: НСнумСрованныС ΠΈ Π½ΡƒΠΌΠ΅Ρ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ списки ΠΈ элСмСнты списка. 🟠<table>, <tr>, <td>: Π’Π°Π±Π»ΠΈΡ†Ρ‹ ΠΈ ΠΈΡ… элСмСнты. Атрибуты: Π’Π΅Π³ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‚ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ элСмСнтС. Атрибуты Π·Π°ΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‚ΡΡ Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΎΡ‚ΠΊΡ€Ρ‹Π²Π°ΡŽΡ‰Π΅Π³ΠΎ Ρ‚Π΅Π³Π° ΠΈ ΠΈΠΌΠ΅ΡŽΡ‚ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ имя="Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅". 🟠href для <a>: Π£ΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ URL, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π²Π΅Π΄Ρ‘Ρ‚ ссылка. 🟠src для <img>: Π£ΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ ΠΏΡƒΡ‚ΡŒ ΠΊ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΡŽ. 🟠alt для <img>: ΠžΠΏΠΈΡΡ‹Π²Π°Π΅Ρ‚ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ для поисковых систСм ΠΈ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ с ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π½Ρ‹ΠΌΠΈ возмоТностями. Π€ΠΎΡ€ΠΌΡ‹: HTML позволяСт ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ ΠΈΠ½Ρ‚Π΅Ρ€Π°ΠΊΡ‚ΠΈΠ²Π½Ρ‹Π΅ Ρ„ΠΎΡ€ΠΌΡ‹ для сбора Π΄Π°Π½Π½Ρ‹Ρ… ΠΎΡ‚ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ. Π€ΠΎΡ€ΠΌΡ‹ ΠΌΠΎΠ³ΡƒΡ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ Ρ‚ΠΈΠΏΡ‹ ΠΏΠΎΠ»Π΅ΠΉ Π²Π²ΠΎΠ΄Π°, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ тСкстовыС поля, Ρ€Π°Π΄ΠΈΠΎΠΊΠ½ΠΎΠΏΠΊΠΈ, чСкбоксы ΠΈ ΠΊΠ½ΠΎΠΏΠΊΠΈ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠΈ. 🟠 <input>: ΠžΠ±Ρ‰Π΅Π΅ ΠΏΠΎΠ»Π΅ Π²Π²ΠΎΠ΄Π°. Атрибут type опрСдСляСт Ρ‚ΠΈΠΏ Π²Π²ΠΎΠ΄Π° (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, text, password, email). 🟠<textarea>: ΠœΠ½ΠΎΠ³ΠΎΡΡ‚Ρ€ΠΎΡ‡Π½ΠΎΠ΅ тСкстовоС ΠΏΠΎΠ»Π΅. 🟠 <select> ΠΈ <option>: Π’Ρ‹ΠΏΠ°Π΄Π°ΡŽΡ‰ΠΈΠΉ список. 🟠 <button>: Кнопка. πŸš©ΠŸΡ€Π΅ΠΈΠΌΡƒΡ‰Π΅ΡΡ‚Π²Π° HTML: πŸŸ ΠŸΡ€ΠΎΡΡ‚ΠΎΡ‚Π° использования: HTML Π»Π΅Π³ΠΊΠΎ ΠΈΠ·ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ. Он Π½Π΅ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ слоТных инструмСнтов для написания ΠΈΠ»ΠΈ рСдактирования. πŸŸ Π‘ΠΎΠ²ΠΌΠ΅ΡΡ‚ΠΈΠΌΠΎΡΡ‚ΡŒ: HTML поддСрТиваСтся всСми Π²Π΅Π±-Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π°ΠΌΠΈ, Ρ‡Ρ‚ΠΎ обСспСчиваСт ΠΊΡ€ΠΎΡΡΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ΅Π½Π½ΠΎΡΡ‚ΡŒ ΠΈ ΡˆΠΈΡ€ΠΎΠΊΡƒΡŽ Π΄ΠΎΡΡ‚ΡƒΠΏΠ½ΠΎΡΡ‚ΡŒ. πŸŸ Π Π°ΡΡˆΠΈΡ€ΡΠ΅ΠΌΠΎΡΡ‚ΡŒ: HTML ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π°ΡΡˆΠΈΡ€ΡΡ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ CSS ΠΈ JavaScript для создания Π±ΠΎΠ»Π΅Π΅ слоТных ΠΈ ΠΈΠ½Ρ‚Π΅Ρ€Π°ΠΊΡ‚ΠΈΠ²Π½Ρ‹Ρ… Π²Π΅Π±-страниц. πŸŸ Π‘Ρ‚Π°Π½Π΄Π°Ρ€Ρ‚ΠΈΠ·Π°Ρ†ΠΈΡ: HTML являСтся стандартом, ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅ΠΌΡ‹ΠΌ W3C (World Wide Web Consortium), Ρ‡Ρ‚ΠΎ обСспСчиваСт Π΅Π³ΠΎ Π½Π°Π΄Π΅ΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΈ ΠΏΡ€Π΅Π΄ΡΠΊΠ°Π·ΡƒΠ΅ΠΌΠΎΡΡ‚ΡŒ. 🚩Как ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ HTML: 🟠БозданиС Π²Π΅Π±-страниц: ОсновноС ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ HTML β€” это созданиС Π²Π΅Π±-страниц ΠΈ Π²Π΅Π±-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ. ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ Π²Π΅Π±-сайт, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π²Ρ‹ посСщаСтС, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ HTML для структурирования своСго ΠΊΠΎΠ½Ρ‚Π΅Π½Ρ‚Π°. πŸŸ Π­Π»Π΅ΠΊΡ‚Ρ€ΠΎΠ½Π½Ρ‹Π΅ письма: HTML Ρ‚Π°ΠΊΠΆΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для создания Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… элСктронных писСм с тСкстом, изобраТСниями ΠΈ ссылками. πŸŸ Π”ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΡ ΠΈ справочныС систСмы: HTML ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для создания ΠΈΠ½Ρ‚Π΅Ρ€Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΠΉ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ ΠΈ справочных систСм, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π²ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒ тСкст, ссылки, изобраТСния ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ элСмСнты. Π‘Ρ‚Π°Π²ΡŒ πŸ‘ ΠΈ Π·Π°Π±ΠΈΡ€Π°ΠΉ πŸ“š Π‘Π°Π·Ρƒ Π·Π½Π°Π½ΠΈΠΉ
135
11
πŸ€” Какая Ρ€Π°Π·Π½ΠΈΡ†Π° ΠΌΠ΅ΠΆΠ΄Ρƒ Π±Π°Π·Π°ΠΌΠΈ Π΄Π°Π½Π½Ρ‹Ρ… MySQL ΠΈ NoSQL? ΠžΡΠ½ΠΎΠ²Π½Ρ‹Π΅ различия ΠΌΠ΅ΠΆΠ΄Ρƒ Π½ΠΈΠΌΠΈ ΠΊΠ°ΡΠ°ΡŽΡ‚ΡΡ структуры Π΄Π°Π½Π½Ρ‹Ρ…, ΠΌΠΎΠ΄Π΅Π»ΠΈ управлСния Π΄Π°Π½Π½Ρ‹ΠΌΠΈ, ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΡƒΠ΅ΠΌΠΎΡΡ‚ΠΈ, ΠΈ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΎΠ² ΠΊ транзакциям. 🚩MySQL (РСляционныС Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ…) πŸŸ Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π° Π΄Π°Π½Π½Ρ‹Ρ… MySQL ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ Ρ„ΠΈΠΊΡΠΈΡ€ΠΎΠ²Π°Π½Π½ΡƒΡŽ схСму, Ρ‡Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ структура Ρ‚Π°Π±Π»ΠΈΡ† (ΠΊΠΎΠ»ΠΎΠ½ΠΊΠΈ, Ρ‚ΠΈΠΏΡ‹ Π΄Π°Π½Π½Ρ‹Ρ…) Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π° Π·Π°Ρ€Π°Π½Π΅Π΅ ΠΈ измСнСния ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ слоТными. Π”Π°Π½Π½Ρ‹Π΅ хранятся Π² Ρ‚Π°Π±Π»ΠΈΡ†Π°Ρ… с фиксированным Π½Π°Π±ΠΎΡ€ΠΎΠΌ столбцов. 🟠МодСль управлСния Π΄Π°Π½Π½Ρ‹ΠΌΠΈ MySQL ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ SQL для опрСдСлСния, манипуляции ΠΈ управлСния Π΄Π°Π½Π½Ρ‹ΠΌΠΈ. ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ ACID (Atomicity, Consistency, Isolation, Durability) свойства, Ρ‡Ρ‚ΠΎ обСспСчиваСт Π½Π°Π΄Π΅ΠΆΠ½Ρ‹Π΅ ΠΈ согласованныС Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ. πŸŸ ΠœΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΡƒΠ΅ΠΌΠΎΡΡ‚ΡŒ Π›Π΅Π³Ρ‡Π΅ ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π²Π΅Ρ€Ρ‚ΠΈΠΊΠ°Π»ΡŒΠ½ΠΎ (ΡƒΠ²Π΅Π»ΠΈΡ‡Π΅Π½ΠΈΠ΅ мощности ΠΎΠ΄Π½ΠΎΠ³ΠΎ сСрвСра), Π½ΠΎ Π³ΠΎΡ€ΠΈΠ·ΠΎΠ½Ρ‚Π°Π»ΡŒΠ½Π°Ρ ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΡƒΠ΅ΠΌΠΎΡΡ‚ΡŒ (распрСдСлСниС Π½Π° нСсколько сСрвСров) слоТнСС ΠΈ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… усилий (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΡˆΠ°Ρ€Π΄ΠΈΠ½Π³). πŸŸ Π‘Π»ΡƒΡ‡Π°ΠΈ использования Π₯ΠΎΡ€ΠΎΡˆΠΎ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚ для ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ с Ρ‡Π΅Ρ‚ΠΊΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΌΠΈ структурами Π΄Π°Π½Π½Ρ‹Ρ…, Ρ‚Π°ΠΊΠΈΠΌΠΈ ΠΊΠ°ΠΊ CRM, ERP систСмы, финансовыС прилоТСния ΠΈ систСмы управлСния содСрТимым (CMS). 🚩NoSQL (НСрСляционныС Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ…) πŸŸ Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π° Π΄Π°Π½Π½Ρ‹Ρ… NoSQL Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ… ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ Π³ΠΈΠ±ΠΊΠΈΠ΅ ΠΈ динамичСскиС схСмы Π΄Π°Π½Π½Ρ‹Ρ…, Ρ‡Ρ‚ΠΎ позволяСт Π»Π΅Π³ΠΊΠΎ ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒ структуру Π΄Π°Π½Π½Ρ‹Ρ… Π±Π΅Π· нСобходимости измСнСния схСмы. ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ ΠΌΠΎΠ΄Π΅Π»ΠΈ Π΄Π°Π½Π½Ρ‹Ρ…, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π½Ρ‹Π΅, ΠΊΠ»ΡŽΡ‡-Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, Π³Ρ€Π°Ρ„ΠΎΠ²Ρ‹Π΅ ΠΈ ΠΊΠΎΠ»ΠΎΠ½ΠΊΠΎΠ²Ρ‹Π΅ Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ…. 🟠МодСль управлСния Π΄Π°Π½Π½Ρ‹ΠΌΠΈ Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ Ρ€Π°Π·Π½Ρ‹Π΅ способы доступа ΠΈ управлСния Π΄Π°Π½Π½Ρ‹ΠΌΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‚ использования SQL. NoSQL Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ… часто ΡΠ»Π΅Π΄ΡƒΡŽΡ‚ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΡƒ CAP-Ρ‚Π΅ΠΎΡ€Π΅ΠΌΡ‹ (Consistency, Availability, Partition tolerance), дСлая Π°ΠΊΡ†Π΅Π½Ρ‚ Π½Π° доступности ΠΈ устойчивости ΠΊ Ρ€Π°Π·Π΄Π΅Π»Π΅Π½ΠΈΡŽ, ΠΈΠ½ΠΎΠ³Π΄Π° ТСртвуя строгой ΠΊΠΎΠ½ΡΠΈΡΡ‚Π΅Π½Ρ‚Π½ΠΎΡΡ‚ΡŒΡŽ. πŸŸ ΠœΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΡƒΠ΅ΠΌΠΎΡΡ‚ΡŒ Π›Π΅Π³ΠΊΠΎ ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΡƒΡŽΡ‚ΡΡ Π³ΠΎΡ€ΠΈΠ·ΠΎΠ½Ρ‚Π°Π»ΡŒΠ½ΠΎ, распрСдСляя Π΄Π°Π½Π½Ρ‹Π΅ ΠΈ Π½Π°Π³Ρ€ΡƒΠ·ΠΊΡƒ Π½Π° нСсколько сСрвСров, Ρ‡Ρ‚ΠΎ позволяСт эффСктивно Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с большими объСмами Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ высокой Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΎΠΉ. πŸŸ Π‘Π»ΡƒΡ‡Π°ΠΈ использования ΠŸΠΎΠ΄Ρ…ΠΎΠ΄ΡΡ‚ для ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ, Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰ΠΈΡ… с большими объСмами Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‰ΠΈΡ… высокой скорости ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ, Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ°ΠΊ ΡΠΎΡ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ сСти, ΠΈΠ½Ρ‚Π΅Ρ€Π½Π΅Ρ‚-ΠΌΠ°Π³Π°Π·ΠΈΠ½Ρ‹, систСмы Π°Π½Π°Π»ΠΈΡ‚ΠΈΠΊΠΈ, IoT прилоТСния. πŸš©ΠžΡΠ½ΠΎΠ²Π½Ρ‹Π΅ различия πŸŸ Π‘Ρ…Π΅ΠΌΠ° Π΄Π°Π½Π½Ρ‹Ρ… MySQL: Ѐиксированная схСма, Π΄Π°Π½Π½Ρ‹Π΅ хранятся Π² Ρ‚Π°Π±Π»ΠΈΡ†Π°Ρ…. NoSQL: Гибкая схСма, Π΄Π°Π½Π½Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒΡΡ Π² Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ…, ΠΊΠ»ΡŽΡ‡-Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, Π³Ρ€Π°Ρ„Π°Ρ… ΠΈΠ»ΠΈ столбцах. πŸŸ Π—Π°ΠΏΡ€ΠΎΡΡ‹ ΠΈ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Π΄Π°Π½Π½Ρ‹ΠΌΠΈ MySQL: SQL для запросов ΠΈ управлСния Π΄Π°Π½Π½Ρ‹ΠΌΠΈ. NoSQL: Π Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ ΠΌΠΎΠ΄Π΅Π»ΠΈ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ запросов, Π½Π΅ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ SQL. πŸŸ ΠšΠΎΠ½ΡΠΈΡΡ‚Π΅Π½Ρ‚Π½ΠΎΡΡ‚ΡŒ ΠΈ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ MySQL: ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ ACID Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ. NoSQL: ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΉ Π²Π°Ρ€ΡŒΠΈΡ€ΡƒΠ΅Ρ‚ΡΡ, часто ΡΠ»Π΅Π΄ΡƒΡŽΡ‚ CAP-Ρ‚Π΅ΠΎΡ€Π΅ΠΌΠ΅, обСспСчивая Π΄ΠΎΡΡ‚ΡƒΠΏΠ½ΠΎΡΡ‚ΡŒ ΠΈ ΡƒΡΡ‚ΠΎΠΉΡ‡ΠΈΠ²ΠΎΡΡ‚ΡŒ ΠΊ Ρ€Π°Π·Π΄Π΅Π»Π΅Π½ΠΈΡŽ. πŸŸ ΠœΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΡƒΠ΅ΠΌΠΎΡΡ‚ΡŒ: MySQL: Для Π²Π΅Ρ€Ρ‚ΠΈΠΊΠ°Π»ΡŒΠ½ΠΎΠΉ ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΡƒΠ΅ΠΌΠΎΡΡ‚ΠΈ. NoSQL: Для Π³ΠΎΡ€ΠΈΠ·ΠΎΠ½Ρ‚Π°Π»ΡŒΠ½ΠΎΠΉ ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΡƒΠ΅ΠΌΠΎΡΡ‚ΠΈ. Π‘Ρ‚Π°Π²ΡŒ πŸ‘ ΠΈ Π·Π°Π±ΠΈΡ€Π°ΠΉ πŸ“š Π‘Π°Π·Ρƒ Π·Π½Π°Π½ΠΈΠΉ
169
12
πŸ€” ΠŸΠΎΡ‡Π΅ΠΌΡƒ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ ΠΈΠ½ΠΎΠ³Π΄Π° Π½Π΅ Π»ΡŽΠ±ΡΡ‚ Java? Π Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ ΠΌΠΎΠ³ΡƒΡ‚ Π½Π΅ Π»ΡŽΠ±ΠΈΡ‚ΡŒ Java ΠΏΠΎ нСскольким ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π°ΠΌ, связанным с особСнностями языка, Π΅Π³ΠΎ экосистСмы ΠΈ историчСской Ρ€Π΅ΠΏΡƒΡ‚Π°Ρ†ΠΈΠ΅ΠΉ. πŸš©ΠŸΡ€ΠΈΡ‡ΠΈΠ½Ρ‹ πŸŸ ΠžΠ±ΡŠΠ΅ΠΌΠ½ΠΎΡΡ‚ΡŒ ΠΈ ΠΌΠ½ΠΎΠ³ΠΎΡΠ»ΠΎΠ²Π½ΠΎΡΡ‚ΡŒ ΠΊΠΎΠ΄Π° Java часто ΠΊΡ€ΠΈΡ‚ΠΈΠΊΡƒΡŽΡ‚ Π·Π° Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΌΠ½ΠΎΠ³ΠΎ шаблонного (boilerplate) ΠΊΠΎΠ΄Π°. НапримСр, для выполнСния простых ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ, Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ°ΠΊ созданиС POJO-классов (Plain Old Java Object), Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ Π²Ρ‹Π½ΡƒΠΆΠ΄Π΅Π½Ρ‹ ΠΏΡ€ΠΎΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒ Π³Π΅Ρ‚Ρ‚Π΅Ρ€Ρ‹, сСттСры, конструкторы, ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ equals ΠΈ hashCode. НСсмотря Π½Π° Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ, Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ°ΠΊ Lombok, для ΡƒΠΌΠ΅Π½ΡŒΡˆΠ΅Π½ΠΈΡ ΡˆΠ°Π±Π»ΠΎΠ½Π½ΠΎΡΡ‚ΠΈ, это остаСтся ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ· ΠΏΡ€Π΅Ρ‚Π΅Π½Π·ΠΈΠΉ ΠΊ языку. πŸŸ Π‘Ρ€Π°Π²Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΌΠ΅Π΄Π»Π΅Π½Π½Ρ‹Π΅ ΠΈΠ½Π½ΠΎΠ²Π°Ρ†ΠΈΠΈ Π˜ΡΡ‚ΠΎΡ€ΠΈΡ‡Π΅ΡΠΊΠΈ Java обновлялась ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎ, Ρ‡Ρ‚ΠΎ Π²Ρ‹Π·Ρ‹Π²Π°Π»ΠΎ Π½Π΅Π΄ΠΎΠ²ΠΎΠ»ΡŒΡΡ‚Π²ΠΎ. Π”ΠΎ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Π° Π½Π° модСль выпуска вСрсий ΠΊΠ°ΠΆΠ΄Ρ‹Π΅ ΡˆΠ΅ΡΡ‚ΡŒ мСсяцСв (с Java 9), ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΊΠΈ ΠΌΠ΅ΠΆΠ΄Ρƒ Ρ€Π΅Π»ΠΈΠ·Π°ΠΌΠΈ Π±Ρ‹Π»ΠΈ слишком большими. Π­Ρ‚ΠΎ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΠ»ΠΎ ΠΊ ΠΎΡ‚ΡΡ‚Π°Π²Π°Π½ΠΈΡŽ языка ΠΎΡ‚ Π±ΠΎΠ»Π΅Π΅ Π΄ΠΈΠ½Π°ΠΌΠΈΡ‡Π½ΠΎ Ρ€Π°Π·Π²ΠΈΠ²Π°ΡŽΡ‰ΠΈΡ…ΡΡ ΠΊΠΎΠ½ΠΊΡƒΡ€Π΅Π½Ρ‚ΠΎΠ², Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ°ΠΊ Kotlin, Scala ΠΈΠ»ΠΈ Python. πŸŸ ΠœΠΎΡ€Π°Π»ΡŒΠ½ΠΎ ΡƒΡΡ‚Π°Ρ€Π΅Π²ΡˆΠΈΠ΅ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Ρ‹ НСкоторыС ΡΡ‡ΠΈΡ‚Π°ΡŽΡ‚ Java "ΡƒΡΡ‚Π°Ρ€Π΅Π²ΡˆΠΈΠΌ" языком ΠΈΠ·-Π·Π° особСнностСй, Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ°ΠΊ Ρ€ΡƒΡ‡Π½ΠΎΠ΅ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎΡΡ‚ΡŒΡŽ (Π΄ΠΎ появлСния ΡƒΠ»ΡƒΡ‡ΡˆΠ΅Π½Π½Ρ‹Ρ… инструмСнтов Π² Java 8 ΠΈ ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… вСрсиях) ΠΈΠ»ΠΈ отсутствиС "соврСмСнного" синтаксиса (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π΄ΠΎ появлСния var). πŸŸ Π£ΡΡ‚Π°Ρ€Π΅Π²ΡˆΠΈΠΉ стСрСотип ΠΎ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ РаньшС Java часто Π°ΡΡΠΎΡ†ΠΈΠΈΡ€ΠΎΠ²Π°Π»Π°ΡΡŒ с ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎΠΉ Ρ€Π°Π±ΠΎΡ‚ΠΎΠΉ ΠΈΠ·-Π·Π° ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚ΠΈΡ€ΡƒΠ΅ΠΌΠΎΠΉ ΠΏΡ€ΠΈΡ€ΠΎΠ΄Ρ‹ Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄Π° ΠΈ большого объСма памяти, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΠ³ΠΎ для запуска JVM. Π₯отя соврСмСнныС Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ JVM (HotSpot, GraalVM) сдСлали Java ΠΎΡ‡Π΅Π½ΡŒ быстрой, этот стСрСотип всС Π΅Ρ‰Π΅ ΠΆΠΈΠ²Π΅Ρ‚. πŸŸ Π­ΠΊΠΎΡΠΈΡΡ‚Π΅ΠΌΠ° ΡƒΡΡ‚Π°Ρ€Π΅Π²ΡˆΠΈΡ… инструмСнтов ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ Π’ ΠΊΡ€ΡƒΠΏΠ½Ρ‹Ρ… ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°Ρ… Π½Π° Java всС Π΅Ρ‰Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΡΡ‚ΠΎΠ»ΠΊΠ½ΡƒΡ‚ΡŒΡΡ с использованиСм старых Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ ΠΈ инструмСнтов, Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ°ΠΊ XML-ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ для Spring. Π’Π°ΠΊΠΈΠ΅ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Ρ‹ Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‚ большС усилий для ΠΌΠΎΠ΄Π΅Ρ€Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΈ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ. πŸŸ Π–Π΅ΡΡ‚ΠΊΠΎΡΡ‚ΡŒ Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΈ отсутствиС Π΄ΠΈΠ½Π°ΠΌΠΈΠΊΠΈ Java β€” строго Ρ‚ΠΈΠΏΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ язык. Π­Ρ‚ΠΎ обСспСчиваСт Π½Π°Π΄Π΅ΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΈ удобство ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ, Π½ΠΎ сниТаСт Π³ΠΈΠ±ΠΊΠΎΡΡ‚ΡŒ ΠΏΡ€ΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ ΠΏΡ€ΠΎΡ‚ΠΎΡ‚ΠΈΠΏΠΎΠ² ΠΈΠ»ΠΈ экспСримСнтировании. Π­Ρ‚ΠΎ особСнно Π·Π°ΠΌΠ΅Ρ‚Π½ΠΎ Π² сравнСнии с языками, Ρ‚Π°ΠΊΠΈΠΌΠΈ ΠΊΠ°ΠΊ Python ΠΈΠ»ΠΈ JavaScript. πŸŸ ΠšΠΎΠ½ΠΊΡƒΡ€Π΅Π½Ρ†ΠΈΡ с Kotlin Kotlin, Ρ€Π°Π·Π²ΠΈΠ²Π°Π΅ΠΌΡ‹ΠΉ JetBrains, стал ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΌ языком Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ для Android Π² 2017 Π³ΠΎΠ΄Ρƒ. Он ΠΏΡ€Π΅Π΄Π»Π°Π³Π°Π΅Ρ‚ Π±ΠΎΠ»Π΅Π΅ Π»Π°ΠΊΠΎΠ½ΠΈΡ‡Π½Ρ‹ΠΉ синтаксис, ΠΌΠΎΡ‰Π½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Ρ€Π°Π±ΠΎΡ‚Ρ‹ с null-значСниями, ΠΈ Π² Ρ†Π΅Π»ΠΎΠΌ воспринимаСтся ΠΊΠ°ΠΊ Π±ΠΎΠ»Π΅Π΅ "соврСмСнный" язык. πŸŸ Π‘Π»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ экосистСмы Java ΠΎΠ±Π»Π°Π΄Π°Π΅Ρ‚ ΠΎΠ³Ρ€ΠΎΠΌΠ½ΠΎΠΉ экосистСмой, которая ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ прСимущСством ΠΈ нСдостатком. Иногда трСбуСтся Π³Π»ΡƒΠ±ΠΎΠΊΠΎΠ΅ ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅ JVM, инструмСнтов сборки (Maven, Gradle), ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΡ… особСнностСй. Π‘Ρ‚Π°Π²ΡŒ πŸ‘ ΠΈ Π·Π°Π±ΠΈΡ€Π°ΠΉ πŸ“š Π‘Π°Π·Ρƒ Π·Π½Π°Π½ΠΈΠΉ
179
13
πŸ€” Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ join'Ρ‹? Π­Ρ‚ΠΎ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Π² языкС SQL, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΡΡ‚ΡŒ строки ΠΈΠ· Π΄Π²ΡƒΡ… ΠΈΠ»ΠΈ Π±ΠΎΠ»Π΅Π΅ Ρ‚Π°Π±Π»ΠΈΡ† Π½Π° основС логичСских связСй ΠΌΠ΅ΠΆΠ΄Ρƒ Π½ΠΈΠΌΠΈ. БущСствуСт нСсколько Ρ‚ΠΈΠΏΠΎΠ² JOIN'ΠΎΠ², ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для Ρ€Π°Π·Π½Ρ‹Ρ… сцСнариСв объСдинСния Π΄Π°Π½Π½Ρ‹Ρ…. πŸš©ΠžΡΠ½ΠΎΠ²Π½Ρ‹Π΅ Ρ‚ΠΈΠΏΡ‹ JOIN'ΠΎΠ² 🟠INNER JOIN Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚Π΅ строки, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΠΌΠ΅ΡŽΡ‚ ΡΠΎΠ²ΠΏΠ°Π΄Π°ΡŽΡ‰ΠΈΠ΅ значСния Π² ΠΎΠ±Π΅ΠΈΡ… Ρ‚Π°Π±Π»ΠΈΡ†Π°Ρ…. SELECT employees.name, departments.department_name FROM employees INNER JOIN departments ON employees.department_id = departments.id; 🟠LEFT JOIN (LEFT OUTER JOIN) Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ всС строки ΠΈΠ· Π»Π΅Π²ΠΎΠΉ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ ΠΈ ΡΠΎΠ²ΠΏΠ°Π΄Π°ΡŽΡ‰ΠΈΠ΅ строки ΠΈΠ· ΠΏΡ€Π°Π²ΠΎΠΉ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹. Если совпадСний Π½Π΅Ρ‚, Ρ‚ΠΎ Π² столбцах ΠΏΡ€Π°Π²ΠΎΠΉ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ Π±ΡƒΠ΄ΡƒΡ‚ NULL. SELECT employees.name, departments.department_name FROM employees LEFT JOIN departments ON employees.department_id = departments.id; 🟠RIGHT JOIN (RIGHT OUTER JOIN) Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ всС строки ΠΈΠ· ΠΏΡ€Π°Π²ΠΎΠΉ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ ΠΈ ΡΠΎΠ²ΠΏΠ°Π΄Π°ΡŽΡ‰ΠΈΠ΅ строки ΠΈΠ· Π»Π΅Π²ΠΎΠΉ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹. Если совпадСний Π½Π΅Ρ‚, Ρ‚ΠΎ Π² столбцах Π»Π΅Π²ΠΎΠΉ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ Π±ΡƒΠ΄ΡƒΡ‚ NULL. SELECT employees.name, departments.department_name FROM employees RIGHT JOIN departments ON employees.department_id = departments.id; 🟠FULL JOIN (FULL OUTER JOIN) Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ всС строки, ΠΊΠΎΠ³Π΄Π° Π΅ΡΡ‚ΡŒ совпадСния Π² ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ· Ρ‚Π°Π±Π»ΠΈΡ†. Если совпадСний Π½Π΅Ρ‚, Ρ‚ΠΎ Π² ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… столбцах Π±ΡƒΠ΄ΡƒΡ‚ NULL. SELECT employees.name, departments.department_name FROM employees FULL JOIN departments ON employees.department_id = departments.id; 🟠CROSS JOIN Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π΄Π΅ΠΊΠ°Ρ€Ρ‚ΠΎΠ²ΠΎ ΠΏΡ€ΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½ΠΈΠ΅ строк ΠΈΠ· Π΄Π²ΡƒΡ… Ρ‚Π°Π±Π»ΠΈΡ†. КаТдая строка ΠΈΠ· ΠΏΠ΅Ρ€Π²ΠΎΠΉ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ соСдиняСтся со всСми строками ΠΈΠ· Π²Ρ‚ΠΎΡ€ΠΎΠΉ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹. SELECT employees.name, departments.department_name FROM employees CROSS JOIN departments; 🟠SELF JOIN Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ JOIN для объСдинСния Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ с самой собой. Π­Ρ‚ΠΎ ΠΏΠΎΠ»Π΅Π·Π½ΠΎ, ΠΊΠΎΠ³Π΄Π° Π½ΡƒΠΆΠ½ΠΎ ΡΡ€Π°Π²Π½ΠΈΡ‚ΡŒ строки Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΎΠ΄Π½ΠΎΠΉ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹. SELECT e1.name AS Employee1, e2.name AS Employee2 FROM employees e1 INNER JOIN employees e2 ON e1.manager_id = e2.id; Π‘Ρ‚Π°Π²ΡŒ πŸ‘ ΠΈ Π·Π°Π±ΠΈΡ€Π°ΠΉ πŸ“š Π‘Π°Π·Ρƒ Π·Π½Π°Π½ΠΈΠΉ
192
14
πŸ€” ΠžΡΠ½ΠΎΠ²Π½Ρ‹Π΅ ΠΏΠΎΠ΄Π²ΠΎΠ΄Π½Ρ‹Π΅ ΠΊΠ°ΠΌΠ½ΠΈ ΡƒΠ΄Π°Π»Ρ‘Π½Π½Ρ‹Ρ… Π²Ρ‹Π·ΠΎΠ²ΠΎΠ²? Π­Ρ‚ΠΎ тСхнология, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰Π°Ρ прилоТСниям Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈΠ»ΠΈ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ Π½Π° ΡƒΠ΄Π°Π»Ρ‘Π½Π½ΠΎΠΌ сСрвСрС, ΠΊΠ°ΠΊ Ссли Π±Ρ‹ ΠΎΠ½ΠΈ Π±Ρ‹Π»ΠΈ Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΌΠΈ. НСсмотря Π½Π° удобство, такая модСль ΠΈΠΌΠ΅Π΅Ρ‚ ряд ΠΏΠΎΠ΄Π²ΠΎΠ΄Π½Ρ‹Ρ… ΠΊΠ°ΠΌΠ½Π΅ΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡƒΡ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒ ΠΏΡ€ΠΈ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ ΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ распрСдСлённых систСм. πŸŸ Π‘ΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ распрСдСлённости Π£Π΄Π°Π»Ρ‘Π½Π½Ρ‹Π΅ Π²Ρ‹Π·ΠΎΠ²Ρ‹ ΠΌΠ°ΡΠΊΠΈΡ€ΡƒΡŽΡ‚ Ρ‚ΠΎΡ‚ Ρ„Π°ΠΊΡ‚, Ρ‡Ρ‚ΠΎ опСрация выполняСтся Ρ‡Π΅Ρ€Π΅Π· ΡΠ΅Ρ‚ΡŒ. Π­Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Π»ΠΎΠΆΠ½ΠΎΠ΅ чувство Π»ΠΎΠΊΠ°Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Ρƒ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ ΡƒΡ‡ΠΈΡ‚Ρ‹Π²Π°ΡŽΡ‚: Π‘Π΅Ρ‚Π΅Π²ΡƒΡŽ Π·Π°Π΄Π΅Ρ€ΠΆΠΊΡƒ: Π²Ρ‹Π·ΠΎΠ²Ρ‹ Π·Π°Π½ΠΈΠΌΠ°ΡŽΡ‚ большС Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ, Ρ‡Π΅ΠΌ Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ, особСнно ΠΏΡ€ΠΈ ΠΌΠ΅Π΄Π»Π΅Π½Π½Ρ‹Ρ… сСтях. Π‘Π΅Ρ‚Π΅Π²Ρ‹Π΅ сбои: соСдинСниС ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ потСряно, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈΠ²Π΅Π΄Ρ‘Ρ‚ ΠΊ ошибкам выполнСния ΠΈΠ»ΠΈ Π΄Π»ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ Ρ‚Π°ΠΉΠΌ-Π°ΡƒΡ‚Π°ΠΌ. ИзмСнСниС Π·Π°Π΄Π΅Ρ€ΠΆΠΊΠΈ: врСмя выполнСния ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈ Ρ‚ΠΎΠ³ΠΎ ΠΆΠ΅ Π²Ρ‹Π·ΠΎΠ²Π° ΠΌΠΎΠΆΠ΅Ρ‚ сущСствСнно Π²Π°Ρ€ΡŒΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π² зависимости ΠΎΡ‚ сСтСвых условий. πŸŸ ΠžΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ошибок ΠžΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ошибок Π² распрСдСлённых систСмах слоТнСС, Ρ‡Π΅ΠΌ ΠΏΡ€ΠΈ Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Ρ… Π²Ρ‹Π·ΠΎΠ²Π°Ρ…: НСобходимо ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ Ρ‚Π°ΠΊΠΈΠ΅ ошибки, ΠΊΠ°ΠΊ потСря соСдинСния, Ρ‚Π°ΠΉΠΌ-Π°ΡƒΡ‚Ρ‹, ΠΎΡ‚ΠΊΠ°Π· сСрвСра. Π’ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… случаях ΠΌΠΎΠΆΠ΅Ρ‚ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΡƒΡ‚ΡŒ "ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎΠ³ΠΎ Π²Ρ‹Π·ΠΎΠ²Π°" (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, запрос Π±Ρ‹Π» Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½, Π½ΠΎ ΠΏΠΎΠ΄Ρ‚Π²Π΅Ρ€ΠΆΠ΄Π΅Π½ΠΈΠ΅ ΠΏΠΎΡ‚Π΅Ρ€ΡΠ»ΠΎΡΡŒ), Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΠΉ идСмпотСнтности ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ. πŸŸ Π‘Π΅Ρ€ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡ ΠΈ дСсСриализация Π΄Π°Π½Π½Ρ‹Ρ… Для ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ Π΄Π°Π½Π½Ρ‹Ρ… Ρ‡Π΅Ρ€Π΅Π· ΡΠ΅Ρ‚ΡŒ ΠΎΠ½ΠΈ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½Ρ‹ Π² сСриализованный Ρ„ΠΎΡ€ΠΌΠ°Ρ‚. Π­Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚: Π£Π²Π΅Π»ΠΈΡ‡ΠΈΠ²Π°Ρ‚ΡŒ Π·Π°Π΄Π΅Ρ€ΠΆΠΊΠΈ ΠΈΠ·-Π·Π° Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΠ³ΠΎ Π½Π° ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅. Π‘ΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ совмСстимости, Ссли ΠΊΠ»ΠΈΠ΅Π½Ρ‚ ΠΈ сСрвСр ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ Ρ€Π°Π·Π½Ρ‹Π΅ вСрсии ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Π°. Π£ΡΠ»ΠΎΠΆΠ½ΡΡ‚ΡŒ ΠΎΡ‚Π»Π°Π΄ΠΊΡƒ ΠΈ диагностику ошибок Π² Π΄Π°Π½Π½Ρ‹Ρ…. πŸŸ Π Π°ΡΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½Π°Ρ ΡΠΎΠ³Π»Π°ΡΠΎΠ²Π°Π½Π½ΠΎΡΡ‚ΡŒ ВзаимодСйствиС ΠΌΠ΅ΠΆΠ΄Ρƒ распрСдСлёнными ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°ΠΌΠΈ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ нСобходимости ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Ρ‚ΡŒ ΡΠΎΠ³Π»Π°ΡΠΎΠ²Π°Π½Π½ΠΎΡΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Ρ…: ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΠ° согласованности особСнно Π°ΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½Π° ΠΏΡ€ΠΈ частичных ΠΎΡ‚ΠΊΠ°Π·Π°Ρ… систСмы. ΠœΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΎΠ²Π°Ρ‚ΡŒΡΡ использованиС распрСдСлённых Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΉ, Ρ‡Ρ‚ΠΎ услоТняСт Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρƒ. πŸŸ ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ бСзопасности Π£Π΄Π°Π»Ρ‘Π½Π½Ρ‹Π΅ Π²Ρ‹Π·ΠΎΠ²Ρ‹ ΠΏΠΎΠ΄Π²Π΅Ρ€ΠΆΠ΅Π½Ρ‹ ΡƒΠ³Ρ€ΠΎΠ·Π°ΠΌ: НСобходимо ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°Ρ‚ΡŒ ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π΄Π°Π½Π½Ρ‹Ρ…, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ ΡƒΡ‚Π΅Ρ‡Π΅ΠΊ. АутСнтификация ΠΈ авторизация ΠΈΠ³Ρ€Π°ΡŽΡ‚ ΠΊΠ»ΡŽΡ‡Π΅Π²ΡƒΡŽ Ρ€ΠΎΠ»ΡŒ Π² Π·Π°Ρ‰ΠΈΡ‚Π΅ систСмы. Π’ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹ Π°Ρ‚Π°ΠΊΠΈ Π½Π° ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ сСти ΠΈΠ»ΠΈ использованиС слабостСй Π² ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Π°Ρ… ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ Π΄Π°Π½Π½Ρ‹Ρ…. πŸŸ Π‘Π°Π»Π°Π½ΡΠΈΡ€ΠΎΠ²ΠΊΠ° Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ ΠΈ ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠŸΡ€ΠΈ большом числС ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠ² сСрвСр ΠΌΠΎΠΆΠ΅Ρ‚ ΡΡ‚Π°Ρ‚ΡŒ ΡƒΠ·ΠΊΠΈΠΌ мСстом: Нагрузка Π½Π° сСрвСр ΠΌΠΎΠΆΠ΅Ρ‚ привСсти ΠΊ Π΄Π΅Π³Ρ€Π°Π΄Π°Ρ†ΠΈΠΈ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ. ВрСбуСтся ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Π°Ρ стратСгия ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡ ΠΈ балансировки Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, использованиС Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… сСрвСров ΠΈΠ»ΠΈ ΠΎΡ‡Π΅Ρ€Π΅Π΄Π΅ΠΉ сообщСний. πŸŸ Π’Ρ‹Π±ΠΎΡ€ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Π° ΠΈ Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΉ Π Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Ρ‹ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, HTTP, gRPC, Thrift) ΠΎΠ±Π»Π°Π΄Π°ΡŽΡ‚ своими особСнностями: ΠŸΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ» ΠΌΠΎΠΆΠ΅Ρ‚ Π½Π°ΠΊΠ»Π°Π΄Ρ‹Π²Π°Ρ‚ΡŒ ограничСния Π½Π° ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΈ возмоТности. Ошибки ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ ΠΈΠ»ΠΈ нСсоотвСтствиС вСрсий ΠΌΠΎΠ³ΡƒΡ‚ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹. 🚩Как это ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ πŸŸ Π”Π»Ρ создания распрСдСлённых систСм ΠœΠΈΠΊΡ€ΠΎΡΠ΅Ρ€Π²ΠΈΡΠ½Ρ‹Π΅ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρ‹. ВзаимодСйствиС ΠΊΠ»ΠΈΠ΅Π½Ρ‚-сСрвСр (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, мобильноС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΈ API). БистСмы с тяТёлой сСрвСрной Π»ΠΎΠ³ΠΈΠΊΠΎΠΉ. πŸŸ Π§Ρ‚ΠΎΠ±Ρ‹ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ ΠΏΠΎΠ΄Π²ΠΎΠ΄Π½Ρ‹Ρ… ΠΊΠ°ΠΌΠ½Π΅ΠΉ Π§Ρ‘Ρ‚ΠΊΠΎ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρƒ, учитывая особСнности сСти. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΠ΄Π΅ΠΌΠΏΠΎΡ‚Π΅Π½Ρ‚Π½Ρ‹Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ. ΠžΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°Ρ‚ΡŒ Π½Π°Π΄Ρ‘ΠΆΠ½Ρ‹Π΅ стратСгии ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ошибок. ΠŸΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³ ΠΈ трассировку (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, OpenTelemetry) для отслСТивания повСдСния систСмы. Π‘Ρ‚Π°Π²ΡŒ πŸ‘ ΠΈ Π·Π°Π±ΠΈΡ€Π°ΠΉ πŸ“š Π‘Π°Π·Ρƒ Π·Π½Π°Π½ΠΈΠΉ
189
15
πŸ€” Как Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Ρ…Π΅Ρˆ Ρ‚Π°Π±Π»ΠΈΡ†Π°? Π­Ρ‚ΠΎ структура Π΄Π°Π½Π½Ρ‹Ρ…, которая позволяСт эффСктивно Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ ΠΈ ΠΈΠ·Π²Π»Π΅ΠΊΠ°Ρ‚ΡŒ ΠΏΠ°Ρ€Ρ‹ "ΠΊΠ»ΡŽΡ‡-Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅". Она ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ Ρ…Π΅Ρˆ-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ для прСобразования ΠΊΠ»ΡŽΡ‡Π° Π² индСкс массива, Π³Π΄Π΅ хранится ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅. πŸš©ΠžΡΠ½ΠΎΠ²Π½Ρ‹Π΅ ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΠΈ 🟠Π₯Сш-функция Π­Ρ‚ΠΎ функция, которая ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ ΠΊΠ»ΡŽΡ‡ ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ индСкс массива, Π³Π΄Π΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒΡΡ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅. Π₯ΠΎΡ€ΠΎΡˆΠ°Ρ Ρ…Π΅Ρˆ-функция Π΄ΠΎΠ»ΠΆΠ½Π° Ρ€Π°Π²Π½ΠΎΠΌΠ΅Ρ€Π½ΠΎ Ρ€Π°ΡΠΏΡ€Π΅Π΄Π΅Π»ΡΡ‚ΡŒ ΠΊΠ»ΡŽΡ‡ΠΈ ΠΏΠΎ всСму пространству индСксов, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΌΠΈΠ½ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ количСство ΠΊΠΎΠ»Π»ΠΈΠ·ΠΈΠΉ. 🟠Коллизии Π­Ρ‚ΠΎ ситуации, ΠΊΠΎΠ³Π΄Π° Π΄Π²Π° Ρ€Π°Π·Π½Ρ‹Ρ… ΠΊΠ»ΡŽΡ‡Π° Ρ…Π΅ΡˆΠΈΡ€ΡƒΡŽΡ‚ΡΡ Π² ΠΎΠ΄ΠΈΠ½ ΠΈ Ρ‚ΠΎΡ‚ ΠΆΠ΅ индСкс. Π‘ΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ ΠΊΠΎΠ»Π»ΠΈΠ·ΠΈΠΉ: ΠœΠ΅Ρ‚ΠΎΠ΄ Ρ†Π΅ΠΏΠΎΡ‡Π΅ΠΊ (chaining): Π’ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ячСйкС массива хранится список (ΠΈΠ»ΠΈ другая структура Π΄Π°Π½Π½Ρ‹Ρ…), содСрТащий всС значСния, ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ этому индСксу. ΠžΡ‚ΠΊΡ€Ρ‹Ρ‚Π°Ρ адрСсация (open addressing): ΠŸΡ€ΠΈ ΠΊΠΎΠ»Π»ΠΈΠ·ΠΈΠΈ ищСтся другая свободная ячСйка ΠΏΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½ΠΎΠΌΡƒ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡƒ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π»ΠΈΠ½Π΅ΠΉΠ½ΠΎΠ΅ ΠΏΡ€ΠΎΠ±ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅, ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚ΠΈΡ‡Π½ΠΎΠ΅ ΠΏΡ€ΠΎΠ±ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈΠ»ΠΈ Π΄Π²ΠΎΠΉΠ½ΠΎΠ΅ Ρ…Π΅ΡˆΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅). πŸŸ Π Π°Π·ΠΌΠ΅Ρ€ Ρ…Π΅Ρˆ-Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ ячССк (Π±Π°ΠΊΠ΅Ρ‚ΠΎΠ²) Π² массивС. ΠžΠΏΡ‚ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ Ρ€Π°Π·ΠΌΠ΅Ρ€ зависит ΠΎΡ‚ количСства ΠΊΠ»ΡŽΡ‡Π΅ΠΉ ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠΎΠΉ Ρ…Π΅Ρˆ-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. ΠžΠ±Ρ‹Ρ‡Π½ΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€ выбираСтся простым числом для ΡƒΠΌΠ΅Π½ΡŒΡˆΠ΅Π½ΠΈΡ вСроятности ΠΊΠΎΠ»Π»ΠΈΠ·ΠΈΠΉ. 🚩Как Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Ρ…Π΅Ρˆ-Ρ‚Π°Π±Π»ΠΈΡ†Π° πŸŸ Π’ΡΡ‚Π°Π²ΠΊΠ° элСмСнта Π₯Сш-функция вычисляСт индСкс для ΠΊΠ»ΡŽΡ‡Π°. Если ячСйка пуста, Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ записываСтся Π² Π½Π΅Ρ‘. Если ячСйка занята (коллизия), примСняСтся Π²Ρ‹Π±Ρ€Π°Π½Π½Ρ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ ΠΊΠΎΠ»Π»ΠΈΠ·ΠΈΠΉ. 🟠Поиск элСмСнта Π₯Сш-функция вычисляСт индСкс для ΠΊΠ»ΡŽΡ‡Π°. ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡΠ΅Ρ‚ΡΡ ячСйка ΠΏΠΎ этому индСксу. Если ΠΊΠ»ΡŽΡ‡ΠΈ ΡΠΎΠ²ΠΏΠ°Π΄Π°ΡŽΡ‚, возвращаСтся Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅. Если ΠΊΠ»ΡŽΡ‡ΠΈ Π½Π΅ ΡΠΎΠ²ΠΏΠ°Π΄Π°ΡŽΡ‚ (коллизия), примСняСтся ΠΌΠ΅Ρ‚ΠΎΠ΄ Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ ΠΊΠΎΠ»Π»ΠΈΠ·ΠΈΠΉ Π΄ΠΎ нахоТдСния Π½ΡƒΠΆΠ½ΠΎΠ³ΠΎ ΠΊΠ»ΡŽΡ‡Π° ΠΈΠ»ΠΈ пустой ячСйки (Ρ‡Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ отсутствиС ΠΊΠ»ΡŽΡ‡Π°). 🟠УдалСниС элСмСнта Π₯Сш-функция вычисляСт индСкс для ΠΊΠ»ΡŽΡ‡Π°. Π­Π»Π΅ΠΌΠ΅Π½Ρ‚ удаляСтся, послС Ρ‡Π΅Π³ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ Π΄Ρ€ΡƒΠ³ΠΈΡ… элСмСнтов для прСдотвращСния Ρ€Π°Π·Ρ€Ρ‹Π²Π° Ρ†Π΅ΠΏΠΎΡ‡Π΅ΠΊ ΠΈΠ»ΠΈ Π½Π°Ρ€ΡƒΡˆΠ΅Π½ΠΈΡ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Π² ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΎΠΉ адрСсации. Π‘Ρ‚Π°Π²ΡŒ πŸ‘ ΠΈ Π·Π°Π±ΠΈΡ€Π°ΠΉ πŸ“š Π‘Π°Π·Ρƒ Π·Π½Π°Π½ΠΈΠΉ
202
16
πŸ€” Π’ Ρ‡Ρ‘ΠΌ Ρ€Π°Π·Π»ΠΈΡ‡ΠΈΠ΅ ΠΌΠ΅ΠΆΠ΄Ρƒ LeftJoin , RightJoin ΠΈ InnerJoin ? Π’ SQL, JOIN ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ для объСдинСния строк ΠΈΠ· Π΄Π²ΡƒΡ… ΠΈΠ»ΠΈ Π±ΠΎΠ»Π΅Π΅ Ρ‚Π°Π±Π»ΠΈΡ† Π½Π° основС логичСского ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΡ ΠΌΠ΅ΠΆΠ΄Ρƒ Π½ΠΈΠΌΠΈ. Π’ΠΎΡ‚ различия ΠΌΠ΅ΠΆΠ΄Ρƒ LEFT JOIN, RIGHT JOIN ΠΈ INNER JOIN: 🟠`INNER JOIN` INNER JOIN Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚Π΅ строки, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΠΌΠ΅ΡŽΡ‚ совпадСния Π² ΠΎΠ±Π΅ΠΈΡ… Ρ‚Π°Π±Π»ΠΈΡ†Π°Ρ…, ΡƒΡ‡Π°ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… Π² соСдинСнии. SELECT A.*, B.* FROM TableA A INNER JOIN TableB B ON A.id = B.id; 🟠`LEFT JOIN` (ΠΈΠ»ΠΈ `LEFT OUTER JOIN`) LEFT JOIN Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ всС строки ΠΈΠ· Π»Π΅Π²ΠΎΠΉ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ ΠΈ ΡΠΎΠ²ΠΏΠ°Π΄Π°ΡŽΡ‰ΠΈΠ΅ строки ΠΈΠ· ΠΏΡ€Π°Π²ΠΎΠΉ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹. Если совпадСний Π½Π΅Ρ‚, Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ всё Ρ€Π°Π²Π½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ Π²ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒ строки ΠΈΠ· Π»Π΅Π²ΠΎΠΉ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ с NULL значСниями для столбцов ΠΈΠ· ΠΏΡ€Π°Π²ΠΎΠΉ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹. SELECT A.*, B.* FROM TableA A LEFT JOIN TableB B ON A.id = B.id; 🟠RIGHT JOIN (ΠΈΠ»ΠΈ RIGHT OUTER JOIN) RIGHT JOIN Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ всС строки ΠΈΠ· ΠΏΡ€Π°Π²ΠΎΠΉ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ ΠΈ ΡΠΎΠ²ΠΏΠ°Π΄Π°ΡŽΡ‰ΠΈΠ΅ строки ΠΈΠ· Π»Π΅Π²ΠΎΠΉ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹. Если совпадСний Π½Π΅Ρ‚, Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ всё Ρ€Π°Π²Π½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ Π²ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒ строки ΠΈΠ· ΠΏΡ€Π°Π²ΠΎΠΉ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ с NULL значСниями для столбцов ΠΈΠ· Π»Π΅Π²ΠΎΠΉ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹. SELECT A.*, B.* FROM TableA A RIGHT JOIN TableB B ON A.id = B.id; INNER JOIN SELECT Employees.name, Departments.dept_name FROM Employees INNER JOIN Departments ON Employees.dept_id = Departments.dept_id; LEFT JOIN SELECT Employees.name, Departments.dept_name FROM Employees LEFT JOIN Departments ON Employees.dept_id = Departments.dept_id; RIGHT JOIN SELECT Employees.name, Departments.dept_name FROM Employees RIGHT JOIN Departments ON Employees.dept_id = Departments.dept_id; Π‘Ρ‚Π°Π²ΡŒ πŸ‘ ΠΈ Π·Π°Π±ΠΈΡ€Π°ΠΉ πŸ“š Π‘Π°Π·Ρƒ Π·Π½Π°Π½ΠΈΠΉ
222
17
πŸ€” КакиС минусы Π΅ΡΡ‚ΡŒ Ρƒ индСкса? βž–Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ пространство Π½Π° дискС Π˜Π½Π΄Π΅ΠΊΡΡ‹ Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‚ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ мСста Π½Π° дискС для хранСния. Π§Π΅ΠΌ большС Π΄Π°Π½Π½Ρ‹Ρ… Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅, Ρ‚Π΅ΠΌ большС мСсто Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ‚ индСкс. Если Ρ‚Π°Π±Π»ΠΈΡ†Π° содСрТит большоС количСство индСксов, это ΠΌΠΎΠΆΠ΅Ρ‚ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΡ‚ΡŒ объСм Ρ…Ρ€Π°Π½ΠΈΠΌΡ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ…. βž–Π—Π°ΠΌΠ΅Π΄Π»Π΅Π½ΠΈΠ΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ записи Вставка, ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ ΠΈ ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅ Π΄Π°Π½Π½Ρ‹Ρ… Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅ с индСксами Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ для обновлСния индСксов. Π­Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ сущСствСнно Π·Π°ΠΌΠ΅Π΄Π»ΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ Π΄Π°Π½Π½Ρ‹Ρ…, особСнно Π² Ρ‚Π°Π±Π»ΠΈΡ†Π°Ρ… с большим количСством индСксов. βž–Π‘Π»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ управлСния АдминистрированиС ΠΈ оптимизация индСксов Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… усилий. НСобходимо пСриодичСски ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡ‚ΡŒ ΠΈ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ индСксы, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ ΠΈ падСния ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ. НСэффСктивноС использованиС индСксов ΠΌΠΎΠΆΠ΅Ρ‚ привСсти ΠΊ ΡƒΡ…ΡƒΠ΄ΡˆΠ΅Π½ΠΈΡŽ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ запросов. βž–ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ с Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠ°ΠΌΠΈ ΠŸΡ€ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ Π΄Π°Π½Π½Ρ‹Ρ… индСксы ΠΌΠΎΠ³ΡƒΡ‚ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ, Ρ‡Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΊ ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚Π°ΠΌ ΠΈ сниТСнию ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Π² условиях высокой конкурСнтности. βž–ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ с Π²Ρ‹Π±ΠΎΡ€ΠΎΠΌ индСксов ΠΠ΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹ΠΉ Π²Ρ‹Π±ΠΎΡ€ ΠΊΠΎΠ»ΠΎΠ½ΠΎΠΊ для индСксирования ΠΌΠΎΠΆΠ΅Ρ‚ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π΅ ΡƒΠ»ΡƒΡ‡ΡˆΠΈΡ‚ΡŒ, Π½ΠΎ ΠΈ ΡƒΡ…ΡƒΠ΄ΡˆΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ запросов. Π˜Π½Π΄Π΅ΠΊΡΡ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ Ρ‚Ρ‰Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΠΏΠΎΠ΄ΠΎΠ±Ρ€Π°Π½Ρ‹ ΠΈ настроСны Π² соотвСтствии с Ρ‚ΠΈΠΏΠΈΡ‡Π½Ρ‹ΠΌΠΈ запросами ΠΊ Π±Π°Π·Π΅ Π΄Π°Π½Π½Ρ‹Ρ…. βž–Π ΠΈΡΠΊ избыточности Π˜Π·Π±Ρ‹Ρ‚ΠΎΡ‡Π½Ρ‹Π΅ ΠΈΠ»ΠΈ Π΄ΡƒΠ±Π»ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠ΅ индСксы ΠΌΠΎΠ³ΡƒΡ‚ привСсти ΠΊ Π½Π΅Π½ΡƒΠΆΠ½ΠΎΠΌΡƒ расходу рСсурсов ΠΈ сниТСнию ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ Π΄Π°Π½Π½Ρ‹Ρ…. βž–ΠΠ΅ΡΡ„Ρ„Π΅ΠΊΡ‚ΠΈΠ²Π½ΠΎΡΡ‚ΡŒ для ΠΌΠ°Π»Ρ‹Ρ… Ρ‚Π°Π±Π»ΠΈΡ† Π’ Π½Π΅Π±ΠΎΠ»ΡŒΡˆΠΈΡ… Ρ‚Π°Π±Π»ΠΈΡ†Π°Ρ… Π½Π°ΠΊΠ»Π°Π΄Π½Ρ‹Π΅ расходы Π½Π° ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΡƒ индСксов ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΡ€Π΅Π²Ρ‹ΡˆΠ°Ρ‚ΡŒ Π²Ρ‹ΠΈΠ³Ρ€Ρ‹Ρˆ Π² ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ запросов. Π’ Ρ‚Π°ΠΊΠΈΡ… случаях индСксы ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ нСэффСктивными. βž–Π‘Π»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΏΡ€ΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΈ структуры Π΄Π°Π½Π½Ρ‹Ρ… ИзмСнСниС структуры Ρ‚Π°Π±Π»ΠΈΡ† (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΈΠ»ΠΈ ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ»ΠΎΠ½ΠΎΠΊ) ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΎΠ²Π°Ρ‚ΡŒ пСрСстройки ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… индСксов, Ρ‡Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Ρ‚Ρ€ΡƒΠ΄ΠΎΠ΅ΠΌΠΊΠΈΠΌ процСссом. Π‘Ρ‚Π°Π²ΡŒ πŸ‘ ΠΈ Π·Π°Π±ΠΈΡ€Π°ΠΉ πŸ“š Π‘Π°Π·Ρƒ Π·Π½Π°Π½ΠΈΠΉ
222
18
πŸ€” Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ нормализация Π±Π°Π· Π΄Π°Π½Π½Ρ‹Ρ…? Нормализация Π±Π°Π· Π΄Π°Π½Π½Ρ‹Ρ… - это процСсс ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ Π΄Π°Π½Π½Ρ‹Ρ… Π² Π±Π°Π·Π΅ Π΄Π°Π½Π½Ρ‹Ρ… для ΠΌΠΈΠ½ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ избыточности Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ обСспСчСния ΠΈΡ… цСлостности. ЦСль Π½ΠΎΡ€ΠΌΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ - ΡΡ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΡΡ‚Ρ€Π°Π½ΠΈΡ‚ΡŒ Π°Π½ΠΎΠΌΠ°Π»ΠΈΠΈ обновлСния, вставки ΠΈ удалСния Π΄Π°Π½Π½Ρ‹Ρ…. Нормализация достигаСтся ΠΏΡƒΡ‚Π΅ΠΌ разбиСния Π±ΠΎΠ»ΡŒΡˆΠΈΡ… Ρ‚Π°Π±Π»ΠΈΡ† Π½Π° Π±ΠΎΠ»Π΅Π΅ ΠΌΠ΅Π»ΠΊΠΈΠ΅, связанных ΠΌΠ΅ΠΆΠ΄Ρƒ собой ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΡΠΌΠΈ, Ρ‡Ρ‚ΠΎ ΡƒΠΏΡ€ΠΎΡ‰Π°Π΅Ρ‚ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Π΄Π°Π½Π½Ρ‹ΠΌΠΈ ΠΈ Π΄Π΅Π»Π°Π΅Ρ‚ ΠΈΡ… Π±ΠΎΠ»Π΅Π΅ логичСски связанными. πŸš©Π—Π°Ρ‡Π΅ΠΌ Π½ΡƒΠΆΠ½Π° нормализация πŸŸ Π£ΡΡ‚Ρ€Π°Π½Π΅Π½ΠΈΠ΅ избыточности Π΄Π°Π½Π½Ρ‹Ρ… Нормализация позволяСт ΠΌΠΈΠ½ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΄ΡƒΠ±Π»ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π΄Π°Π½Π½Ρ‹Ρ…, Ρ‡Ρ‚ΠΎ экономит пространство ΠΈ ΡƒΠΏΡ€ΠΎΡ‰Π°Π΅Ρ‚ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Π±Π°Π·ΠΎΠΉ Π΄Π°Π½Π½Ρ‹Ρ…. πŸŸ ΠžΠ±Π΅ΡΠΏΠ΅Ρ‡Π΅Π½ΠΈΠ΅ цСлостности Π΄Π°Π½Π½Ρ‹Ρ… Нормализация ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ‚ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Ρ‚ΡŒ Ρ†Π΅Π»ΠΎΡΡ‚Π½ΠΎΡΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Ρ…, обСспСчивая ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠ΅ ΠΈ Π΅Π΄ΠΈΠ½ΠΎΠΎΠ±Ρ€Π°Π·Π½ΠΎΠ΅ Ρ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅ Π΄Π°Π½Π½Ρ‹Ρ…. πŸŸ Π£ΠΏΡ€ΠΎΡ‰Π΅Π½ΠΈΠ΅ структуры Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ… Π Π°Π·Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π΄Π°Π½Π½Ρ‹Ρ… Π½Π° логичСскиС Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ Π΄Π΅Π»Π°Π΅Ρ‚ структуру Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ… Π±ΠΎΠ»Π΅Π΅ понятной ΠΈ ΡƒΠ΄ΠΎΠ±Π½ΠΎΠΉ для использования. 🟠ИзбСТаниС Π°Π½ΠΎΠΌΠ°Π»ΠΈΠΉ Π΄Π°Π½Π½Ρ‹Ρ… Нормализация ΠΏΡ€Π΅Π΄ΠΎΡ‚Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΈΠ΅ Π°Π½ΠΎΠΌΠ°Π»ΠΈΠΉ ΠΏΡ€ΠΈ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠΈ, вставкС ΠΈ ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠΈ Π΄Π°Π½Π½Ρ‹Ρ…. πŸš©ΠžΡΠ½ΠΎΠ²Π½Ρ‹Π΅ Ρ„ΠΎΡ€ΠΌΡ‹ Π½ΠΎΡ€ΠΌΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ πŸŸ ΠŸΠ΅Ρ€Π²Π°Ρ Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½Π°Ρ Ρ„ΠΎΡ€ΠΌΠ° (1NF) Π£Π΄Π°Π»Π΅Π½ΠΈΠ΅ ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΡΡŽΡ‰ΠΈΡ…ΡΡ Π³Ρ€ΡƒΠΏΠΏ Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅. ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ столбСц Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π°Ρ‚ΠΎΠΌΠ°Ρ€Π½Ρ‹Π΅ (Π½Π΅Π΄Π΅Π»ΠΈΠΌΡ‹Π΅) значСния. ВсС записи Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΌΠΈ. πŸŸ Π’Ρ‚ΠΎΡ€Π°Ρ Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½Π°Ρ Ρ„ΠΎΡ€ΠΌΠ° (2NF) Π’Π°Π±Π»ΠΈΡ†Π° Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ Π² 1NF. Π£Π΄Π°Π»Π΅Π½ΠΈΠ΅ частичной Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠΉ зависимости: ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Π½Π΅ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠΉ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ зависим ΠΎΡ‚ ΠΏΠ΅Ρ€Π²ΠΈΡ‡Π½ΠΎΠ³ΠΎ ΠΊΠ»ΡŽΡ‡Π°. πŸŸ Π’Ρ€Π΅Ρ‚ΡŒΡ Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½Π°Ρ Ρ„ΠΎΡ€ΠΌΠ° (3NF) Π’Π°Π±Π»ΠΈΡ†Π° Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ Π² 2NF. Π£Π΄Π°Π»Π΅Π½ΠΈΠ΅ Ρ‚Ρ€Π°Π½Π·ΠΈΡ‚ΠΈΠ²Π½ΠΎΠΉ зависимости: всС Π½Π΅ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹Π΅ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ зависимы ΠΎΡ‚ ΠΏΠ΅Ρ€Π²ΠΈΡ‡Π½ΠΎΠ³ΠΎ ΠΊΠ»ΡŽΡ‡Π°, Π° Π½Π΅ ΠΎΡ‚ Π΄Ρ€ΡƒΠ³ΠΈΡ… Π½Π΅ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹Ρ… Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠ². πŸŸ Π‘ΠΎΠΉΡ-Кодд Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½Π°Ρ Ρ„ΠΎΡ€ΠΌΠ° (BCNF) УсилСниС 3NF: каТдая Π΄Π΅Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π½Ρ‚Π° Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ ΠΊΠ°Π½Π΄ΠΈΠ΄Π°Ρ‚ΠΎΠΌ Π½Π° ΠΊΠ»ΡŽΡ‡, Ρ‡Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Π² любой Π½Π΅Ρ‚Ρ€ΠΈΠ²ΠΈΠ°Π»ΡŒΠ½ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠΉ зависимости X -> Y, X Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ ΡΡƒΠΏΠ΅Ρ€ΠΊΠ»ΡŽΡ‡ΠΎΠΌ. πŸŸ Π§Π΅Ρ‚Π²Π΅Ρ€Ρ‚Π°Ρ Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½Π°Ρ Ρ„ΠΎΡ€ΠΌΠ° (4NF) Π’Π°Π±Π»ΠΈΡ†Π° Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ Π² BCNF. УстранСниС ΠΌΠ½ΠΎΠ³ΠΎΠ·Π½Π°Ρ‡Π½Ρ‹Ρ… зависимостСй: Ρ‚Π°Π±Π»ΠΈΡ†Π° Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Π° ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ ΠΌΠ½ΠΎΠ³ΠΎΠ·Π½Π°Ρ‡Π½Ρ‹Ρ… зависимостСй, ΠΊΠΎΠ³Π΄Π° ΠΎΠ΄ΠΈΠ½ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ зависит ΠΎΡ‚ Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π°. πŸŸ ΠŸΡΡ‚Π°Ρ Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½Π°Ρ Ρ„ΠΎΡ€ΠΌΠ° (5NF) Π’Π°Π±Π»ΠΈΡ†Π° Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ Π² 4NF. УстранСниС ΡΠΎΠ΅Π΄ΠΈΠ½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… зависимостСй: Π΄Π°Π½Π½Ρ‹Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ Ρ€Π°Π·Π±ΠΈΡ‚Ρ‹ Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ каТдая Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ‚ΡŒ ΡΠΎΡ…Ρ€Π°Π½ΡΠ»Π°ΡΡŒ. πŸš©ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ примСнСния Π½ΠΎΡ€ΠΌΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ πŸŸ ΠŸΠ΅Ρ€Π²Π°Ρ Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½Π°Ρ Ρ„ΠΎΡ€ΠΌΠ° Если Ρƒ вас Π΅ΡΡ‚ΡŒ Ρ‚Π°Π±Π»ΠΈΡ†Π° с ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΡΡŽΡ‰ΠΈΠΌΠΈΡΡ Π³Ρ€ΡƒΠΏΠΏΠ°ΠΌΠΈ, Ρ‚Π°ΠΊΠΈΠΌΠΈ ΠΊΠ°ΠΊ нСсколько Ρ‚Π΅Π»Π΅Ρ„ΠΎΠ½Π½Ρ‹Ρ… Π½ΠΎΠΌΠ΅Ρ€ΠΎΠ² для ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°, Π²Ρ‹ создаСтС ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΡƒΡŽ Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ для Ρ‚Π΅Π»Π΅Ρ„ΠΎΠ½ΠΎΠ² ΠΈ связываСтС Π΅Π΅ с Ρ‚Π°Π±Π»ΠΈΡ†Π΅ΠΉ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠ². πŸŸ Π’Ρ‚ΠΎΡ€Π°Ρ Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½Π°Ρ Ρ„ΠΎΡ€ΠΌΠ° Если Ρƒ вас Π΅ΡΡ‚ΡŒ Ρ‚Π°Π±Π»ΠΈΡ†Π° Π·Π°ΠΊΠ°Π·ΠΎΠ² с ΠΊΠΎΠ»ΠΎΠ½ΠΊΠ°ΠΌΠΈ "Π½ΠΎΠΌΠ΅Ρ€ Π·Π°ΠΊΠ°Π·Π°", "Π½Π°Π·Π²Π°Π½ΠΈΠ΅ Ρ‚ΠΎΠ²Π°Ρ€Π°" ΠΈ "Ρ†Π΅Π½Π° Ρ‚ΠΎΠ²Π°Ρ€Π°", Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Π΅ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ для Π·Π°ΠΊΠ°Π·ΠΎΠ² ΠΈ Ρ‚ΠΎΠ²Π°Ρ€ΠΎΠ², Ρ‡Ρ‚ΠΎΠ±Ρ‹ Ρ†Π΅Π½Π° Ρ‚ΠΎΠ²Π°Ρ€Π° зависСла Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΡ‚ Ρ‚ΠΎΠ²Π°Ρ€Π°, Π° Π½Π΅ ΠΎΡ‚ ΠΊΠΎΠΌΠ±ΠΈΠ½Π°Ρ†ΠΈΠΈ Π·Π°ΠΊΠ°Π·Π° ΠΈ Ρ‚ΠΎΠ²Π°Ρ€Π°. πŸŸ Π’Ρ€Π΅Ρ‚ΡŒΡ Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½Π°Ρ Ρ„ΠΎΡ€ΠΌΠ° Если Ρƒ вас Π΅ΡΡ‚ΡŒ Ρ‚Π°Π±Π»ΠΈΡ†Π° сотрудников с ΠΊΠΎΠ»ΠΎΠ½ΠΊΠ°ΠΌΠΈ "ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ сотрудника", "Π½Π°Π·Π²Π°Π½ΠΈΠ΅ ΠΎΡ‚Π΄Π΅Π»Π°" ΠΈ "имя Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΈΠΊΠ° ΠΎΡ‚Π΄Π΅Π»Π°", Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Π΅ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ для сотрудников ΠΈ ΠΎΡ‚Π΄Π΅Π»ΠΎΠ², Ρ‡Ρ‚ΠΎΠ±Ρ‹ имя Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΈΠΊΠ° ΠΎΡ‚Π΄Π΅Π»Π° зависСло Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΡ‚ ΠΎΡ‚Π΄Π΅Π»Π°, Π° Π½Π΅ ΠΎΡ‚ сотрудника. Π‘Ρ‚Π°Π²ΡŒ πŸ‘ ΠΈ Π·Π°Π±ΠΈΡ€Π°ΠΉ πŸ“š Π‘Π°Π·Ρƒ Π·Π½Π°Π½ΠΈΠΉ
203
19
πŸ€” Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ git ? Π­Ρ‚ΠΎ распрСдСлённая систСма контроля вСрсий, разработанная Линусом Π’ΠΎΡ€Π²Π°Π»ΡŒΠ΄ΡΠΎΠΌ Π² 2005 Π³ΠΎΠ΄Ρƒ. Она ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Π° для отслСТивания ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ Π² исходном ΠΊΠΎΠ΄Π΅ Π²ΠΎ врСмя Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ обСспСчСния. Git позволяСт нСскольким Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°ΠΌ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π½Π°Π΄ ΠΎΠ΄Π½ΠΈΠΌ ΠΈ Ρ‚Π΅ΠΌ ΠΆΠ΅ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠΌ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ, Π½Π΅ опасаясь ΠΏΠΎΡ‚Π΅Ρ€ΡΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Ρƒ ΠΈΠ»ΠΈ ΠΏΠ΅Ρ€Π΅Π·Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ измСнСния Π΄Ρ€ΡƒΠ³ Π΄Ρ€ΡƒΠ³Π°. πŸš©ΠžΡΠ½ΠΎΠ²Π½Ρ‹Π΅ понятия ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ πŸŸ Π Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ (Repository) Π­Ρ‚ΠΎ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ для ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ хранятся всС Ρ„Π°ΠΉΠ»Ρ‹ ΠΈ история ΠΈΡ… ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ. πŸŸ ΠšΠΎΠΌΠΌΠΈΡ‚ (Commit) Зафиксированный снимок Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ состояния Ρ„Π°ΠΉΠ»ΠΎΠ² Π² Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΈ. ΠšΠΎΠΌΠΌΠΈΡ‚Ρ‹ ΠΎΠ±Ρ€Π°Π·ΡƒΡŽΡ‚ ΠΈΡΡ‚ΠΎΡ€ΠΈΡŽ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°. πŸŸ Π’Π΅Ρ‚Π²ΡŒ (Branch) ΠžΡ‚Π΄Π΅Π»ΡŒΠ½Π°Ρ линия Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ. Π’Π΅Ρ‚Π²ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π½Π°Π΄ Ρ€Π°Π·Π½Ρ‹ΠΌΠΈ функциями ΠΈΠ»ΠΈ исправлСниями Π±Π΅Π· Π²ΠΌΠ΅ΡˆΠ°Ρ‚Π΅Π»ΡŒΡΡ‚Π²Π° Π² ΠΎΡΠ½ΠΎΠ²Π½ΡƒΡŽ ΠΊΠΎΠ΄ΠΎΠ²ΡƒΡŽ Π±Π°Π·Ρƒ. 🟠БлияниС (Merge) ΠŸΡ€ΠΎΡ†Π΅ΡΡ объСдинСния ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ ΠΈΠ· ΠΎΠ΄Π½ΠΎΠΉ Π²Π΅Ρ‚Π²ΠΈ Π² Π΄Ρ€ΡƒΠ³ΡƒΡŽ. ΠžΠ±Ρ‹Ρ‡Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΠΈ Π½ΠΎΠ²Ρ‹Ρ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ΠΈΠ»ΠΈ исправлСний ΠΈΠ· ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Ρ… Π²Π΅Ρ‚Π²Π΅ΠΉ Π² ΠΎΡΠ½ΠΎΠ²Π½ΡƒΡŽ Π²Π΅Ρ‚Π²ΡŒ. 🟠Клон (Clone) Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΊΠΎΠΏΠΈΠΈ ΡƒΠ΄Π°Π»Ρ‘Π½Π½ΠΎΠ³ΠΎ рСпозитория Π½Π° локальной машинС Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°. πŸŸ Π€ΠΎΡ€ΠΊ (Fork) Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΊΠΎΠΏΠΈΠΈ Ρ‡ΡƒΠΆΠΎΠ³ΠΎ рСпозитория (ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Π½Π° ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ΅ Π²Ρ€ΠΎΠ΄Π΅ GitHub) для внСсСния собствСнных ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ Π±Π΅Π· воздСйствия Π½Π° ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π»ΡŒΠ½Ρ‹ΠΉ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚. πŸŸ Π—Π°ΠΏΡ€ΠΎΡ Π½Π° слияниС (Pull Request ΠΈΠ»ΠΈ Merge Request) Запрос Π½Π° Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ ΠΈΠ· ΠΎΠ΄Π½ΠΎΠΉ Π²Π΅Ρ‚Π²ΠΈ Π² Π΄Ρ€ΡƒΠ³ΡƒΡŽ, часто ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹ΠΉ Π² ΠΊΠΎΠ»Π»Π°Π±ΠΎΡ€Π°Ρ‚ΠΈΠ²Π½Ρ‹Ρ… ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ°Ρ… (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, GitHub, GitLab). πŸŸ Π Π΅ΠΌΠΎΡ‚ (Remote) Π£Π΄Π°Π»Ρ‘Π½Π½Ρ‹ΠΉ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ связан с Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΌ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠ΅ΠΌ. ΠžΡΠ½ΠΎΠ²Π½Ρ‹Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡ‚Π²ΡƒΡŽΡ‚ с Π½ΠΈΠΌ для синхронизации Π΄Π°Π½Π½Ρ‹Ρ…. πŸš©ΠžΡΠ½ΠΎΠ²Π½Ρ‹Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ 🟠git init Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Π½ΠΎΠ²ΠΎΠ³ΠΎ локального рСпозитория. 🟠git clone [URL] ΠšΠ»ΠΎΠ½ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΡƒΠ΄Π°Π»Ρ‘Π½Π½ΠΎΠ³ΠΎ рСпозитория Π½Π° Π»ΠΎΠΊΠ°Π»ΡŒΠ½ΡƒΡŽ ΠΌΠ°ΡˆΠΈΠ½Ρƒ. 🟠git add [Ρ„Π°ΠΉΠ»/ΠΏΠ°ΠΏΠΊΠ°] Π”ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ Π² индСкс (стадия ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΊΠΈ ΠΊ ΠΊΠΎΠΌΠΌΠΈΡ‚Ρƒ). 🟠git commit -m "Π‘ΠΎΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅" Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΊΠΎΠΌΠΌΠΈΡ‚Π° с Π·Π°Π΄Π°Π½Π½Ρ‹ΠΌ сообщСниСм. 🟠git status ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° состояния Ρ„Π°ΠΉΠ»ΠΎΠ² Π² Ρ€Π°Π±ΠΎΡ‡Π΅ΠΌ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅ ΠΈ индСксС. 🟠git log ΠŸΡ€ΠΎΡΠΌΠΎΡ‚Ρ€ истории ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ². 🟠git branch Π£ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ вСтвями (созданиС, просмотр, ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅). 🟠git checkout [Π²Π΅Ρ‚ΠΊΠ°/ΠΊΠΎΠΌΠΌΠΈΡ‚] ΠŸΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ΠΌΠ΅ΠΆΠ΄Ρƒ вСтвями ΠΈΠ»ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‚ ΠΊ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½ΠΎΠΌΡƒ ΠΊΠΎΠΌΠΌΠΈΡ‚Ρƒ. 🟠git merge [Π²Π΅Ρ‚ΠΊΠ°] БлияниС ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠΉ Π²Π΅Ρ‚ΠΊΠΈ с Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ. 🟠git pull ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ ΠΈΠ· ΡƒΠ΄Π°Π»Ρ‘Π½Π½ΠΎΠ³ΠΎ рСпозитория ΠΈ слияниС с Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ Π²Π΅Ρ‚ΠΊΠΎΠΉ. 🟠git push ΠžΡ‚ΠΏΡ€Π°Π²ΠΊΠ° ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ ΠΈΠ· локального рСпозитория Π² ΡƒΠ΄Π°Π»Ρ‘Π½Π½Ρ‹ΠΉ. Π‘Ρ‚Π°Π²ΡŒ πŸ‘ ΠΈ Π·Π°Π±ΠΈΡ€Π°ΠΉ πŸ“š Π‘Π°Π·Ρƒ Π·Π½Π°Π½ΠΈΠΉ
197
20
πŸ€” Π’ Ρ‡Ρ‘ΠΌ Ρ€Π°Π·Π½ΠΈΡ†Π° InnerJoin ΠΈ RightJoin ? Π­Ρ‚ΠΎ Π΄Π²Π° Ρ‚ΠΈΠΏΠ° объСдинСния Ρ‚Π°Π±Π»ΠΈΡ† Π² SQL, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ для получСния Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΠ· Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… Ρ‚Π°Π±Π»ΠΈΡ† Π½Π° основС условий соСдинСния. ОсновноС Ρ€Π°Π·Π»ΠΈΡ‡ΠΈΠ΅ ΠΌΠ΅ΠΆΠ΄Ρƒ Π½ΠΈΠΌΠΈ Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊΠΈΠ΅ строки Π²ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‚ΡΡ Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠΉ Π½Π°Π±ΠΎΡ€ Π΄Π°Π½Π½Ρ‹Ρ…. 🚩`INNER JOIN` INNER JOIN Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚Π΅ строки, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΠΌΠ΅ΡŽΡ‚ ΡΠΎΠ²ΠΏΠ°Π΄Π°ΡŽΡ‰ΠΈΠ΅ значСния Π² ΠΎΠ±Π΅ΠΈΡ… Ρ‚Π°Π±Π»ΠΈΡ†Π°Ρ…, ΡƒΡ‡Π°ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… Π² соСдинСнии. Если Π½Π΅Ρ‚ совпадСния, строки Π½Π΅ Π²ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‚ΡΡ Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠΉ Π½Π°Π±ΠΎΡ€ Π΄Π°Π½Π½Ρ‹Ρ…. SELECT A.*, B.* FROM TableA A INNER JOIN TableB B ON A.id = B.id; 🚩`RIGHT JOIN` (ΠΈΠ»ΠΈ `RIGHT OUTER JOIN`) RIGHT JOIN Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ всС строки ΠΈΠ· ΠΏΡ€Π°Π²ΠΎΠΉ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ (TableB) ΠΈ ΡΠΎΠ²ΠΏΠ°Π΄Π°ΡŽΡ‰ΠΈΠ΅ строки ΠΈΠ· Π»Π΅Π²ΠΎΠΉ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ (TableA). Если совпадСния Π½Π΅Ρ‚, строки ΠΈΠ· ΠΏΡ€Π°Π²ΠΎΠΉ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ всС Ρ€Π°Π²Π½ΠΎ Π²ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‚ΡΡ Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ с NULL значСниями для столбцов ΠΈΠ· Π»Π΅Π²ΠΎΠΉ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹. SELECT A.*, B.* FROM TableA A RIGHT JOIN TableB B ON A.id = B.id; πŸš©ΠžΡΠ½ΠΎΠ²Π½Ρ‹Π΅ различия 🟠INNER JOIN Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ строки с ΡΠΎΠ²ΠΏΠ°Π΄Π°ΡŽΡ‰ΠΈΠΌΠΈ значСниями Π² ΠΎΠ±Π΅ΠΈΡ… Ρ‚Π°Π±Π»ΠΈΡ†Π°Ρ…. Π˜ΡΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ строки Π±Π΅Π· совпадСний. 🟠RIGHT JOIN Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ всС строки ΠΈΠ· ΠΏΡ€Π°Π²ΠΎΠΉ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ (TableB) ΠΈ ΡΠΎΠ²ΠΏΠ°Π΄Π°ΡŽΡ‰ΠΈΠ΅ строки ΠΈΠ· Π»Π΅Π²ΠΎΠΉ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ (TableA). Π’ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ строки ΠΈΠ· ΠΏΡ€Π°Π²ΠΎΠΉ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹, Π΄Π°ΠΆΠ΅ Ссли Π½Π΅Ρ‚ совпадСний, с NULL значСниями для столбцов ΠΈΠ· Π»Π΅Π²ΠΎΠΉ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹. Π‘Ρ‚Π°Π²ΡŒ πŸ‘ ΠΈ Π·Π°Π±ΠΈΡ€Π°ΠΉ πŸ“š Π‘Π°Π·Ρƒ Π·Π½Π°Π½ΠΈΠΉ
205