Михаил Непряхин: Максим привет Как видно слышно пожалуйста. Отпишитесь чайки
Михаил Непряхин: спасибо
Михаил Непряхин: так сегодня будем разбираться, Как работать с Грей эмиграциями
Михаил Непряхин: вот но перед этим Давайте Еще глянем
Михаил Непряхин: на паттер который встречается ков Гоу довольно часто когда работаете с библиотеками какими-нибудь
Михаил Непряхин: То очень часто конфигурация Этих библиотек происходит Через этот Патруль пад называется опшин на и
Михаил Непряхин: типично как выглядит сернатура. То есть отработать с какой-нибудь функцией Или конструктора, Или просто с какой-нибудь Функцией
Михаил Непряхин: а У которой Есть какая опциональность то Есть можно вот Так запустить а можно По Другому запустить и и
Михаил Непряхин: Вы видите в конце вот это троеточие
Михаил Непряхин: и то есть могут быть обязательные какие-то аргументы, но вот с тремя точками это опциональный аргумент ну не касательно того паттерна опшена а вообще как бы с тремя точками вот у нас есть возможность когда Мы вот эти три точки указываем это значит аргумент может быть
Михаил Непряхин: аргументов может быть несколько или аргумента может вообще не быть то есть как бы три варианта нисколько один или несколько и
Михаил Непряхин: и типа удобно что вот можно По дефолту какой-то аа, конфликт загрузить
Михаил Непряхин: наверное если вы ничего не указываете то Там просто какой то Дефолтный автор какой конфликт задумал вот он такой бот но вы опционально можете какие То опции переопределить этот дефолт
Михаил Непряхин: и значит вот Сейчас разберемся как оно Устроено как оно работает
Михаил Непряхин: значит смотрите у нас есть сервер например, на сервере
Михаил Непряхин: и у него есть какие то настройки адрес
Михаил Непряхин: ну Вот то есть около хост подразумевается порт
Михаил Непряхин: дефолт на его значение восемьдесят восемьдесят
Михаил Непряхин: и по пять секунд там то есть вот это дефолтное дефолтное значение для этого сервера
Михаил Непряхин: и когда создаются. Конструкторы, новый Экземпляр этого сервера
Михаил Непряхин: то Мы вот просто Создаем его с духовными значениями а дальше Перебираем вот Этот вот
Михаил Непряхин: опшенс аргумент который может если, его Нет допустим ничего Не передали вы то Мы в этот цикл форм просто Не попадаем и соответственно Никакие опции Не Променяются дополнительно
Михаил Непряхин: если он Там один То Мы его вызываем один Раз и Переопределяем вот Одну из этих Настроек ну Или Там Несколько и мы можем Например переопределить все Настройки но в зависимости от того какие нам дали возможности
Михаил Непряхин: Допустим Здесь какие у нас есть Возможности переопределить адрес порт
Михаил Непряхин: Тайм Аут робот таймут ну короче Все Можем переопределить с помощью Опшенов Э принято опции называть
Михаил Непряхин: Со словом видит То есть начинается выезд.
Михаил Непряхин: То есть вот оно типично значит возвращается общем как, Правило ну Так и называют Авторы и эта опция она начинается За слово виз
Михаил Непряхин: значит Что такое опшин Посмотрим Что такое обшин это функция как объект первого Класса то есть и
Михаил Непряхин: Причем функция не просто пустая а Она Должна быть с одним аргументом сервером вот Этим Нашим
Михаил Непряхин: Так Смотрим значит вот уис адер
Михаил Непряхин: Мы здесь в опции, Можем передать аа, адрес
Михаил Непряхин: Делом создаем Новый сервер
Михаил Непряхин: и Вот так Вот видит кадр и передаем сюда что Вот он будет на порту Не около. Хоста а в Двадцать семь ноль ноль один
Михаил Непряхин: а переопределяем как бы дефолт и и
Михаил Непряхин: как это сработает значит вот Мы передали аргумент адрес нам Возвращается функция
Михаил Непряхин: Сигнатура, ее здесь соответственно соблюдается что аргументом Этой функции будет сервер
Михаил Непряхин: и внутри Этой функции Мы просто Берем и прямо по полю
Михаил Непряхин: Переопределяем поле то есть вот это поле говорим оно хоть, такое Которое мы здесь в документе передали
Михаил Непряхин: и получается смотрите когда мы здесь создали Воз дефолтными какими то настройками уже наш сервер
Михаил Непряхин: уже после этого мы эти функции и прогоняем
Михаил Непряхин: то есть у нас здесь слайс опшенов а общем это функция
Михаил Непряхин: здесь у нас сама функция общем
Михаил Непряхин: и все что Мы здесь делаем вызываем эту Функцию аргумент Этой функции он уже за
Михаил Непряхин: в замыкании то есть у нас смотрите это получается Замыкание
Михаил Непряхин: когда Мы тут аргументом передаем адрес он захватывается замыканием
Михаил Непряхин: и он Там уже Внутри есть
Михаил Непряхин: и Поэтому все что нам остается сделать это просто эту функцию вызвать
Михаил Непряхин: и соответственно все опшины имеют одну сигнатуру и просто Мы берем передаем туда наш сервер Вот он наш сервер и с этим сервером происходит то Что. Вот здесь Написано то Есть ну все равно Что. Мы сделали
Михаил Непряхин: все равно что Мы так сделали то Есть там только Вот здесь бы Допустим адрес, передавали адрес, ну Стрингада
Михаил Непряхин: то Есть вот Мы сделали что-то подобное только в обобщенном стиле опциональном что адрес. Передавать не обязательно А он опциональный можно передать можно не передать
Михаил Непряхин: встречается как ни. Странно довольно часто
Михаил Непряхин: люди гошники реально любят этот патрон
Михаил Непряхин: и он в стандартной библиотеке тоже довольно часто Встречается
Михаил Непряхин: так значит Отвернем То есть вот здесь я переопределил вообще все то есть переопределил порт тайм-о теперь. Определил оба.
Михаил Непряхин: А и начать проверну
Михаил Непряхин: ну тут у меня он просто в мейне ничего не происходит я просто севера создал я его даже не вызываю а ну я печатаю да то есть я печатаю ну вода я печатаю что я переопределил переопределив эти вещи да-да-да
Михаил Непряхин: вот значит в чем минус этого патрона
Михаил Непряхин: о том что он громоздко выглядит
Михаил Непряхин: дело в том что это вот здесь я его вызвал
Михаил Непряхин: ну вот у нас библиотечный код он находится здесь же где и вызов этого конструктора а вообще так-то это было бы в отдельном пакете и этот пакет как-то бы назывался ну например, я бы назывался
Михаил Непряхин: и смотрите что происходит а вот У всех вот У этих опций Тоже, нужно добавлять вот этот вот кто-то про сервер
Михаил Непряхин: и Оно начинает Выглядеть. Громоздко и и
Михаил Непряхин: читаемость Эммм Ну читаем и страдает короче говоря читаем и страдают
Михаил Непряхин: Поэтому этот паттерн я недолюбливаю То Есть я сам Ну как, Бы Раньше понимал Что это принято в Принципе и Всегда конфигурацию делал вот с помощью опшенов
Михаил Непряхин: но есть Гораздо более Удобный способ аа делать Конфеты
Михаил Непряхин: ну есть еще вариант через патрон гилдер сделать как бы тоже Окей тоже нормально вот но это все-таки
Михаил Непряхин: вы немножечко ну как бы сложнее Громоздкие более громоздко получалось конструкция и как бы просто есть библиотеки в которых патрон билдер ну как бы хорош
Михаил Непряхин: ну вот если вот дефолт так говорить то мне больше нравится вот просто через патруль конфик
Михаил Непряхин: но если так его можно назвать
Михаил Непряхин: короче говоря когда у нас есть какой то конструктор он принимает этот самый конфликт
Михаил Непряхин: э можно конечно опционально его сделать прием то есть если Мы понимаем что ну у нас и Так дефолтные опции а не Хорошие, вот можно сделать больше опциональным
Михаил Непряхин: и
Михаил Непряхин: ну получается что у нас вот он эта структура конфига она у нас Всегда перед глазами мы ее просто берем и заполняем над теми значениями Которые нам нужно
Михаил Непряхин: и в общем-то если, нам нужно ее Расширить тут легко Добавляются поля ничего не Меняется в сигнатуре
Михаил Непряхин: и здесь история Похожая Мы создаем дефолтное значение а Потом проверяем Если к нам пришла структура конфига
Михаил Непряхин: и Там в этих полях. Не Зеровелью То Мы переопределяем Наш дефолтный конфликт на тот который к нам пришел
Михаил Непряхин: ну и да выглядит вот в этом месте чуть более громоздко и с каждой добавленной опцией придется здесь дописать ю
Михаил Непряхин: а здесь Видите как бы Мы экономим на этом и у нас конструктор короткий и но
Михаил Непряхин: господи зачем нам нужен короткий конструктор на эта библиотека библиотека должна быть удобно в использовании
Михаил Непряхин: а вот как она Там под капотом устроена Это абсолютно пофигу и Поэтому то что Мы как бы вот этот и имеем чуть больше кодов конструкторы зато у нас в месте вызова получается более Лаконичный код
Михаил Непряхин: смотрите у нас вот мы создаем структуру конфига и заполняем те поля которые нам нужны
Михаил Непряхин: и передаем дальше в конструктор ну. И в общем-то то есть все то же самое
Михаил Непряхин: но в коде оно все равно Читается лучшее ну? Вывод из Этого Импорта что У всех Опций приходится импортировать название пакета и оно в Конечном итоге Читается не так хорошо То есть смотрите мусор получается вот в этом месте
Михаил Непряхин: сервер Всегда, повторяется видит Всегда, повторяется
Михаил Непряхин: аргумент получается ну в виде аргумента а не в виде вот этого как бы поля Структуры и ну там Чисто Мое Мнение что Вот это Вот читается лучше, чем Вот это Вот
Михаил Непряхин: Вот ну как бы дело ваше, можете использовать и то и то в жизни как бы Встречаться и то и то Но весь конфикт Этого преображения он построен вот на этом патруне
Михаил Непряхин: и плюс видите здесь сочетание такое что
Михаил Непряхин: конфиги они уже сразу со всеми, этими
Михаил Непряхин: опциями для получения переменных из янв из фарва доотвенга или из переменных окружения и Поэтому мы конфиги руками даже и не конфигурировали хорошо как бы тоже удобно
Михаил Непряхин: блогера блогера У Меня, ну У Меня, Всегда, Всегда, Всегда, я передаю конфликт вот
Михаил Непряхин: ну например, можно его иногда сделать опциональным то есть можно Было бы здесь сделать троеточие например и тогда. И Нет
Михаил Непряхин: Не требовал бы обязательно передачу этого конфликта
Михаил Непряхин: но как бы это так как Не так сложно передать этот конфликт Везде в Коде это тоже выглядит довольно-таки лаконично в Плане что ну вот Мы делали блогер и нид передали его конфликт
Михаил Непряхин: а что Мы Там пг икс передали его конфет
Михаил Непряхин: вот а в интеграционных тестах но соответственно Мы этот конфликт в явном виде видим и
Михаил Непряхин: оно здесь просто одной структурой да как бы сразу, весь конфликт задается и
Михаил Непряхин: тоже опять же Мое личное мнение что вот в интеграционном тесте такой конфликт он читается лучше, чем если, бы мы это делали общинами ну то есть представляете насколько код был бы здесь сложный и замусоренный
Михаил Непряхин: это нам бы если, бы Мы это делали бы с Помощью опшенов, нам бы все равно пришлось придумать структуру конфига и только Там вот уже на уровне инициализации слоев Мы бы из этого конфига еще этого в общем передавали бы выч двойная Работа получала бы
Михаил Непряхин: Так а есть а что Если хотим, передать озеруэлью ноль Например, ну я здесь и Отличить ноль от азербайджана
Михаил Непряхин: делается так ну Сейчас где у меня там есть У меня сестры и Сестренки ну короче
Михаил Непряхин: где вот Сейчас указатель если нужно Различить
Михаил Непряхин: то есть если бы если Значение не Передано оно бы от Него
Михаил Непряхин: если значение пустая Строка то оно будет, Задано но оно будет, в виде пустой строки Поэтому как бы и это встречается
Михаил Непряхин: на апдейтах чаще всего это ручка которая об эти данные вот обычно там встречаются
Михаил Непряхин: такие структуры ну собственно у нас тоже та же самая история на дтп если посмотреть ручку обдает, видеть все опциональные поля которые могут в которых надо отличать а типа вот пользователь он Там свой Возраст занулил Или он его просто Не передал типа надо его Сейчас обновить в Ноль
Михаил Непряхин: Или ничего с Ним Делать Не надо его просто Не передали чтобы Отличить Зероэлью От Непередного значения Используется этот указатель
Михаил Непряхин: Так купшин нашей Страны выглядит как будто Кот Ради Куда
Михаил Непряхин: Вот короче кто то вел, моду в гошном коде на опшины и они вот прямо, популярны то есть особенно, начинающие
Михаил Непряхин: ну вот люди кто начинает писать свою библиотеку они чаще всего выбирают патронопшена
Михаил Непряхин: а не конфик либо биллнер по мнедок ну какой там такой он еще сложный для вот понимания вот когда человек заходит то сидите здесь используются функции как объект первого Класса, и когда ты читаешь вот это вот
Михаил Непряхин: очень эээ ты видишь конструктор видишь что Он принимает опшины
Михаил Непряхин: но Список всех Опшенов Он где-то разбросан По файлу и ты короче как дурачок там находишь сперва вот что-то за Тип потом Там Что у нас возвращает этот Тип
Михаил Непряхин: и Находишь тогда уже эти функции и просто даже Банально и
Михаил Непряхин: так ладно если здесь вопросов нет
Михаил Непряхин: такая важная тема которую тоже надо было светить идем дальше уйдем подгрем
Михаил Непряхин: ну основная База у, нас понятно что позгрыс мы держим и
Михаил Непряхин: то есть у нас приложение двадцать шесть
Михаил Непряхин: то есть классическое приложение у нас выглядит так Что у нас есть Два инстинкта и они крутятся, в губернетисе
Михаил Непряхин: Эти инстанции они Без стоит вопрос где Держать стоит ну топ один это подвис а подвис революционно баз данных
Михаил Непряхин: аа и даже неважно нужны нам транзакции Не нужны на транзакции Там почти Всегда, все везде используется подкрас
Михаил Непряхин: а Монго ну то Есть Там Не Знаю это девяносто пять процентов случаев
Михаил Непряхин: а еще четыре, процента или три процента я бы дал монгел.
Михаил Непряхин: Редко Но встречается мы Эти три процента дадим и и надежная база данных
Михаил Непряхин: и Два процента ну или там, тоже плюс минус три процента это эс три
Михаил Непряхин: остри чаще всего используют для хранения Файлов
Михаил Непряхин: монго Использует Если вдруг У леда Или У вас ну вы Допустим пишете, сервис и У вас дофига экспертизы в монго и вы до Этого работали с Монго Тоже Как бы и если в Компании разрешено использовать Монго короче Это должны. Прямо, Звезды сойтись чтобы заюзать базу, Монго я там встречал
Михаил Непряхин: ну на двух проектах я строча у Монго и в целом оно там было не особо оправдано что же Можно было все закрыть по зверю
Михаил Непряхин: Вот и просто Всегда Всегда почти Всегда просто используется подряд для того чтобы что-то хранить
Михаил Непряхин: так значит во-первых как Мы Работаем с Поздрой Мы Работаем через библиотеку Пг
Михаил Непряхин: Трикс Это Драйвер Для работы с подвисом Так двенадцать тысяч
Михаил Непряхин: двенадцать Звездочек Популярная реаль у нее уже
Михаил Непряхин: а пятая версия, Поэтому там важно кто-то Еще Не перешел с четвертый многие на четвертые сидят Но как бы вот уже видно Что пятое. Точно актуально надо Переходить
Михаил Непряхин: и когда устанавливаете соответственно оно Здесь даже и Не показано да ну просто надо Слэш пятая. Версия указывать чтобы установилась именно пятый твикс
Михаил Непряхин: автор Реально крутой талантливый и вот этот вот джек
Михаил Непряхин: джек си он ну прям Реально профессионал в этой теме очень хорошо кто именно разбирается в тренерах
Михаил Непряхин: есть. Какие-то альтернативы но они менее популярны и вот певикс По большому счету победил
Михаил Непряхин: значит есть версия с обычным коннекшеном вот если вот ну просто южную Библиотеку это один коннекшн
Михаил Непряхин: вот но здесь же есть пейнтбол,
Михаил Непряхин: и Прегрекс пул, он всеми, Не используется то Есть Мы Тоже Всегда используем подэкспул надо нам
Михаил Непряхин: параллельность какая-то Не надо Всегда прыгать с пул и все без вариантов
Михаил Непряхин: Он повторяю Там У Него Так и транзакции работают ну и Там все остальные функции Только У нас получается, Есть ул из Коробки
Михаил Непряхин: значит чтобы примерно Так Понимать это как это работает присмотрите в других языках принято использовать вот наше приложение
Михаил Непряхин: и если у нас значит пазгря возраст у нас есть
Михаил Непряхин: и мы обычно Не ходим напрямую в поисках ну на других языках, да а у нас есть и
Михаил Непряхин: баун сер, а и Или Как Он Там называется Он чего-то типа того короче пуллер какой-то
Михаил Непряхин: для того чтобы Мы могли из нашего предложения делать очень много запросов а он их все собиравбачи
Михаил Непряхин: и имел несколько постоянных коннекшенов,
Михаил Непряхин: допустим четыре коннекшина постоянных он имел по зверя и вот это вот большое количество коннекшенов превращал и
Михаил Непряхин: в гоу у Нас такой проблемы Нет и этот погребаум все равно он не нужен потому что у Нас приложение и Так
Михаил Непряхин: когда Мы используем когда Мы используем пгрекспул,
Михаил Непряхин: он и Так Поднимает Внутри Нашего приложения этот пул, коннекшенов
Михаил Непряхин: а дефолт Там четыре поднимается но как бы этого на самом деле очень много за глаза вот они постоянно коннечно поднимаются и все и все приложения которые вы делаете из разных ручек Там Не важно Сколько рпц во Сколько вы обрабатываете оно все равно все
Михаил Непряхин: вот обрабатываются бочуются и Работают с этими четырьмя коннекшиными которые переиспользуют Поэтому Мы здесь тоже экономим на этих Сетевых задержках на каких-то личных прослойках они нам. Просто Не нужны
Михаил Непряхин: ну Мы можем отрегулировать это значение там поставить десять двадцать сколько Хотите,
Михаил Непряхин: де фунт на четыре если ничего не менять
Михаил Непряхин: так как я понимаю нет смысла использовать прогресспу если под возраст выделено однодро
Михаил Непряхин: и имеет смысл все равно использовать потому что и
Михаил Непряхин: так ну куда-то глянем сколько там духовный борт, вот Сейчас глянут спугались испуг когда Канапин создается
Михаил Непряхин: а вот видите Я даже в примерах Я даже не пул использую а просто использую этот коннекшн обычный. Вот но в приложении у нас будет
Михаил Непряхин: пул, шаз высокоблянин
Михаил Непряхин: Парсинг, конфек
Михаил Непряхин: мне просто кажется, Что. Он как Будто, бы это
Михаил Непряхин: там используется гол макс прокс и он Делает если Одно, ведро. То один коннекшн в пуле и будет Но просто все равно важно же переиспользовать коннекшн нельзя как близкий вопрос к коннешнл Но каждый Раз, Умирает как Раз, заново
Михаил Непряхин: создается а если. У нас пул, то даже если. У нас в пуле Один, коннекшн он его Переиспользует а это как бы хорошо
Михаил Непряхин: когда Мы теперь Используем чудо Поэтому он в Любом случае.
David R: А пул. Там выше создавался двести двадцать восьмая стака фото вот-вот ниже ниже вот она.
Михаил Непряхин: Танк это да Ну короче можете не пул.
Михаил Непряхин: Сейчас надо по здесь есть перемены Сейчас Мы по ней посмотрим
Михаил Непряхин: вот она де форт макс конс энфорт минконс ноль эээ
Михаил Непряхин: чем даже не ищется по нему
Михаил Непряхин: так к нам сепию вот смотрите он говорит значит макс коннекшн вот дефолтная значит их остается четыре дальше он
Михаил Непряхин: а проверяет нам. Сипию Сколько. Он о себе, ее ядер
Михаил Непряхин: и если нам. Себею ядер больше чем Коннекшн Тогда Он переопределяет значит Духовность вам будет четыре неважно Сколько У вас ядер будет четыре поставлено Ну короче говоря
Михаил Непряхин: Оно все нормально работает с этим Проблем, Нет Поэтому можно Не, париться, и я просто Вижу вот иногда Люди вот зачем-то используют просто каннешн Но это ну
Михаил Непряхин: почти никогда Не Смысл потому Что когда перформанс Там звук У вас будут какие-то Пиковые нагрузки привет с Пульсера. Себя все равно лучше, Показывать вот потом неважно Сколько ядер Всегда едет по весь пул
Михаил Непряхин: да так да Что еще важно сказать У нас Есть Ом У нас есть его рынка хочу называться Горм
Михаил Непряхин: есть Прям целый сайт. С Шашлым Идем на Гитхаби. Сколько нагиет Хабби. Тут Чува Сломал
Михаил Непряхин: Понятно
Михаил Непряхин: и как Можно заметить она супер популярная тридцать восемь тысяч звезд ну как бы Это дофига
Михаил Непряхин: дело в том Что когда люди переходят с другого языка
Михаил Непряхин: ну Не знаю там спетона сжавы и у них там Была у рэмка то они как бы Хотят в Голову Тоже использовать его рэмку но дело в том Что в гоу у нас нагрузки Гораздо больше мы пишем сервера
Михаил Непряхин: и и ну Даже если на каких-то ранних этапах у нас какие-то Маленькие нагрузки орам Еще Вывозят То и
Михаил Непряхин: и а пайтоном это Гораздо более урезанный вариант каравенький
Михаил Непряхин: ну и вообще как бы видите когда мы хотим, автоматизировать запросы при традиционной базе данных у нас неизбежно Появляются наклонные расходы в виде каких-то дополнительных, запросов в виде непрозрачности вообще что происходит
Михаил Непряхин: и как Бы выглядит звучит неплохо типа Мы берем объект и говорим и
Михаил Непряхин: о рем она дает нагрузки ну типа Там в Два в Три Раза в зависимости От сложности таблиц и
Михаил Непряхин: короче Она Не масштабироваться никак и Любой проект, который он высоконагруженный он Рано Или поздно Доходит до точки когда аура выпиливают и переписывает все на чистую Эскель ну с помощью Библиотеки Пг икс то есть Мы когда по Гриксом Работаем мы почти Всегда Работаем с Чистым и Сквеем
Михаил Непряхин: А кто Не привык Так делать. То кажется как Будто бы это Плохо ну смотрите во-первых эскюэль и
Михаил Непряхин: и Сквер отлично работает с мвд то есть ну как бы все Эти университе отлично Шарят
Михаил Непряхин: вы Сквеле просто русским языком пишете абсолютно чего угодно пишут и вы Там потом только редактируете его
Михаил Непряхин: Поэтому даже если, вы не знаете эхель Ну во-первых в Любом случае нужно пройти какие-то Тренажеры Не Знаю их очень много хоть степик хоть вообще чего угодно ничего Не идете их ровно Там два-три хороших точно есть
Михаил Непряхин: и и а так и
Михаил Непряхин: и Не все отлично Разбираются а вот Не растительным в нем отлично понимают любые запросы все Что вы хотите. Вы можете написать
Михаил Непряхин: и плюс когда Мы Работаем с Подвигсом У нас из Кюэль запрос Всегда, перед Глазами Мы Его Видим Мы
Михаил Непряхин: Четко Понимаем Что Наш Кот Делает а Что Он Не Делает когда Же Вы Работаете с его Рамкой Вы Не понимаете Что происходит то есть ну вот сколько запросов было сделано
Михаил Непряхин: ну понятно что часто вам кажется, что он должен быть один запрос а их на самом деле Два и часто когда вы видите перед Собой и
Михаил Непряхин: вот.
Михаил Непряхин: Так начну Давайте теперь про сам пог икс поговорим значит как с ним работать у нас
Михаил Непряхин: что мы создаем вот коннекшн и
Михаил Непряхин: ну? Можем. Проверить пин к нему да то есть как бы опять же так важно делать когда создаете коннекшн неплохо пингнуть
Михаил Непряхин: хм я не забываю это делать но
Михаил Непряхин: улучши получить ошибку в этом месте прямо, на создании андактора, Чем, идти дальше если, у нас нет подключения к базе данных
Михаил Непряхин: так Сейчас посмотрим пингую или нет ну это я здесь не пигую то есть я здесь просто создаю вот Это вот
Михаил Непряхин: Соединение, Но я Реально Не, проверяю оно живу. Или Нет То есть когда уже в Процессе работы приложения Оно проверится. Поэтому Неплохо Пингвинуть прямо здесь
Михаил Непряхин: А и Дальше значит Мы Работаем с Скверем Так как Он есть и
Михаил Непряхин: Единственное Что. Конечно вы можете и создавать таблицы и индексы делать в эсквеле ну вот как здесь я создаю таблицу клейтебу но создание изменения таблиц и индексов
Михаил Непряхин: оно живет в миграциях здесь просто пример чтобы можно было запустить единым файлом и все работало вот в домиграции мы Сейчас. Тоже дойдем
Михаил Непряхин: и основная функция которую мы будем использовать основной метод это пикэк значит группы грикса, их всего три
Михаил Непряхин: а это вот экза который делает какую-то выполняет произвольный исковый запрос
Михаил Непряхин: так Сейчас Найдем где здесь должен быть где нибудь интерфейс
Михаил Непряхин: а нашествие себя Найду
Михаил Непряхин: Вот значит Вот сигнатура, значит их зэк
Михаил Непряхин: ну понятно, Что Всегда, передается Контекст, чтобы если вдруг Контекст, умер. Кончился чтобы Мы не Катили ресурсы Завершились здесь Сейчас
Михаил Непряхин: дальше передается и скверный запрос то есть вот здесь прямом Текстом и сквель
Михаил Непряхин: и аргументы ну это имеются в виду аргументы кискализапроса то есть мы Можем
Михаил Непряхин: оставить Плей-холдеры в эсковель Запросе и они будут Заполнены через за вот эти вот аргументы а если, Мы сразу, же удоставляем значение передаем ну тогда вот этот аргумент остается Пустым мы Ему не передаем ничего национальной звезды
Михаил Непряхин: возвращается комонтек и ошибка но в ком Онтеги у нас здесь мы Можем посмотреть просто Результат какой-то так и
Михаил Непряхин: значит Второй вариант относится к вера это к единичным Запросам когда Возвращается орнастрока и соответственно когда
Михаил Непряхин: ой Наоборот перепутал вот Одна строка значит запрос когда мы хотим? Вернуть одну Строку
Михаил Непряхин: ну здесь Сигнатура. Та же самая значит возвращаться а эта самая строка
Михаил Непряхин: и ну это интерфейс и Мы просто используем скан сканируем результат в нашу структуру
Михаил Непряхин: тебе как известно кажется, прямо, Там деказируем
Михаил Непряхин: вот и квеери это когда Мы возвращаем ну Хотим, Вернуть несколько строк тогда возвращается интерфейс роуз
Михаил Непряхин: и здесь Мы по нему иерируемся с помощью аннекста
Михаил Непряхин: и сканируем результаты в нашей перемены Которые мы сюда здесь подставим и главное Не забывать Что его еще надо клоунзить
Михаил Непряхин: от моего когда все прочитали строки Мы его в конце, закрываем ну можно на ошибку вот проверить петя и эта штука Тоже, есть комонтек это типа ну текста сообщения от базы
Михаил Непряхин: это не знаю, никогда не пользовался
Михаил Непряхин: выли из источника они пользоваться этим Тоже, никогда не показалось
Михаил Непряхин: вот то есть тут, все все сном обычно насканется
Михаил Непряхин: а вот ну и это Как бы три Метода
Михаил Непряхин: с Которыми Мы Взаимодействуем с базой
Михаил Непряхин: и соответственно если у нас селекты но они попадают либо, сюда либо, сюда
Михаил Непряхин: а все остальное Там апдейты инстерты делиты они соответственно через, экзамен Делают,
Михаил Непряхин: так Ну здесь меня Там надо по транзакции
Михаил Непряхин: я понял что горм плохо но часто ли у нас торжественно рабочий Проект ну встречается на одном Из десяти и встречается горм
Михаил Непряхин: потому что ну какие-то люди неопытные начинали проект или просто на крутой легайся старый
Михаил Непряхин: то есть в ка компании обязательно где нибудь гором
Михаил Непряхин: бывает что встречаться какое же мнение про раскрыликс и из крюси ну смотрите это как сказать Сша. Давайте найдем
Михаил Непряхин: Почему может там пример бот Из крыльсив встречал. На Одном проекте Идея конечно Интересная
Михаил Непряхин: Это бы хороший вопрос опять. Же, Да
Михаил Непряхин: а смотрите здесь шестнадцать шестнадцать тысяч Звездочек Из кверси и Это
Михаил Непряхин: примеры будут нет но вот жалко Я Не, Люблю когда в библиотеке его нет здесь примеров Ничего У них Там сайт есть шас
Михаил Непряхин: Ммм докс какой нибудь ну смотрите во Первых значит вы берете эсквель анонтируйте его и после этого
Михаил Непряхин: вы выполняете команду и из вашего Эсквеля генералса генерация прямо методы каких-то хороших. Примеров Шас
Михаил Непряхин: какой Раз, ну да Но здесь вот какого-то хорошего Примера, я не, вижу чтобы показать Иваново Сейчас Нарисую
Михаил Непряхин: начтись Эскиэль
Михаил Непряхин: си короче говоря значит в чем Идея У нас Есть сквер Кот
Михаил Непряхин: и Мы ну в миграциях Мы Там выдержим
Михаил Непряхин: и Мы его кроме того что пишем обычный Там криэйтей был Мы еще можем его аннотировать специальными
Михаил Непряхин: А специальным текстом который понимает Извельи
Михаил Непряхин: Идея скрести Что Мы просто берем из Квель и из него генерим
Михаил Непряхин: адаптеры то есть У нас Адаптация. Как бы Генерица
Михаил Непряхин: вот Мы Сейчас у нас жизнь вот эта аптерата ну там сходи, в базу, достань из базы и вот как бы, и из этого изысквеля сразу генерация. Адаптеры и Мы все равно должны писать То есть Не могут За нас все сгенерить но часть Генерица
Михаил Непряхин: но Так как. В Обычном искеле недостаточно информации для того чтобы качественно сгенерировать адаптацию приходится этот обычный эскель аннотировать
Михаил Непряхин: с своим собственным. Синтаксисом вот Этим эсквельсишным.
Михаил Непряхин: Ну мне Не нравится, вот это потому что
Михаил Непряхин: вы вынуждены то есть смотрите она обязывает этот библиотека обязывает вас ее учить Мне это вообще не нравится, когда так происходит
Михаил Непряхин: и и Там очень много функционалов
Михаил Непряхин: она имеет ну Там костылину все случаи жизни То есть вы Там просто дополнительные синтаксы спишите нажимаете Кнопку Генерировать У вас генерация вот эти адапторы. Которые тем Не менее все равно вы Не можете использовать до конца ну то есть там какие-то модельки Генерация, грубо говоря Если посмотреть на наши доктор
Михаил Непряхин: автозрисовый томклеет профайл.
Михаил Непряхин: Значит Ищутная для детошка вот оно эту ложку вот эту сгенерит как отдельную структуру
Михаил Непряхин: Сейчас может что-нибудь По удачнику например, ну вот смотрите вот гет профайер да
Михаил Непряхин: значит Что сгенерится. Ну вот эта штука она
Михаил Непряхин: как. Бы Там она Будет Генеральная уже это Будет просто. Константа
Михаил Непряхин: значит вот эта вот структура сгенериться За вас это дто Тоже. Подставится То есть Не надо будет вот этот Код писать
Михаил Непряхин: и оно само а вот это вот декодирование Тоже с генерица
Михаил Непряхин: ну как Будто бы неплохо звучит потому что действительно если посмотреть на адаптацию работы с базой данных вот селек да ну он довольно-таки объемный как бы много текста
Михаил Непряхин: и если За нас это сделает библиотека с генериет как Будто бы это звучит неплохо Но чтобы она более-менее что-то Вменяемость с генерила приходится использовать много аннотаций, в Скрекоде и
Михаил Непряхин: очень высокий порог Входа для Нового Разработчика если он Не знает из сквельси и попадает на Проект, Использования скверси ну все он обречен на то чтобы очень долго выполнять любую небольшую доработку и он будет плеваться
Михаил Непряхин: вот поэтому я Так посмотрел на это ну интересная Идея Но в целом мне не зашла не Нравится
Михаил Непряхин: а насчет Эскверикс ну просто альтернативный тоже драйвер Эсквеликс который тоже популярен семнадцать тысяч.
Михаил Непряхин: Звездочек
Михаил Непряхин: Сейчас сказал примерчик ну Он в общем то Очень Похож на п икс только Он Он по-моему Совместим Со стандартным драйвером
Михаил Непряхин: и он немножечко и и по Так
Михаил Непряхин: Так вот значит возвращаемся да значит мы написали наш скорее запрос вот его передали вик зэк
Михаил Непряхин: а ну и все То есть Нуртеги здесь Распечатали тексты Сообщения если Нет ошибки значит все-таки
Михаил Непряхин: ну и тут так дроб Ты был ну это я оставил, вот мало если, захотите, поиграться тут посоздавать таблицы вот если, вам это важно вы можете использовать этот
Михаил Непряхин: файлик Сейчас просто посмотрим креит индекс тоже опять, Же это делается в миграциях Ну, вот инер Например, да
Михаил Непряхин: Ну, пишем соответственно инфорд в таблицу узера вставляем ней Мейдж с плейхолдерами
Михаил Непряхин: да кстати обратите внимание. Естьхолдеры так Ну ка здесь есть можно
Михаил Непряхин: чем так подсвечиваться некрасиво таблицы видимо не что ли не знаю
Михаил Непряхин: короче говоря у нас есть поискхолдеры у доллар один дома Два и это просто вот они вы сюда передаете перемены они вставляются соответственно
Михаил Непряхин: на имя яйчук
Михаил Непряхин: и когда Я Делаю югэк у меня здесь и квель Я Передаю два аргумента это имя и возраст соответственно они поставят Сюда в эти поисколдеры и в итоге ставятся, в эти столкцы в таблицу юзера
Михаил Непряхин: если вы не будете использовать поэтхолдеры то у вас возможно
Михаил Непряхин: сделать ботинскую Ленинграцию то Есть они защищают От иск ее линнекции Грубо говоря экранируют какие-то опасные символы и просто Превращаются в текст Не скрывали. Ли они акции становится невозможной поэтому вот эти вот происхолдеры
Михаил Непряхин: при цертах все надо использовать так Что У нас здесь
Михаил Непряхин: ага, ну вот собственно я хотел вам показать Одну из Проблем посмотрите когда Мы Хотим, вставить пачку. Значений
Михаил Непряхин: и Мы работаем с чистым сквеем
Михаил Непряхин: То у нас возникают некоторые проблемы в конкретинации строк то есть нам приходится их делать потому что ну
Михаил Непряхин: как иначе то есть появляются вот какие-то вот такие вот аппенды
Михаил Непряхин: что мы хотим, три значения вставить нам надо и поихолдеры из пейнтболеры добавить и просто вот аргументы мы заводим связь аргументов
Михаил Непряхин: а потом вот эти все аргументы туда Передаем ну, и все вот эти вот аргументы они потом Встают но вот эти вот поисколдеры которые потом Вставляются в эту Табличку мьюзизер снеймей
Михаил Непряхин: вот как Бы Один. Из моментов когда Неудобно работать с певиксом ну, имеется в виду не с паниксом а с чистым сквером
Михаил Непряхин: Как, это решается
Михаил Непряхин: леша и с помощью сторонних библиотек Сейчас чуть позже прогулку поговорим которая Как, Раз, этот момент позволяет, автоматизировать
Михаил Непряхин: так про Апдейт про ну с абдельвитами все Окей здесь обычно Никаких Проблем Нет как бы Чистый скель все хорошо
Михаил Непряхин: эти тоже Штуки в поисках воды встают
Михаил Непряхин: Так с деллитом тоже все окей никаких Проблем, Не бывает селектомию
Михаил Непряхин: селекто мне смотрите как работаем то есть ну мы тут достаем все из таблицы юзерс
Михаил Непряхин: используем Жених зэк метод Акваре
Михаил Непряхин: и вот как я сказал появляется вот этот цикл, значит мы используем во-первых некст когда мы иерируемся по строкам которые получили
Михаил Непряхин: и и много разных Оптимизаций, под капотом которых нет вскрыликсе
Михаил Непряхин: и сканируем из этих строк то есть нам надо получить, айди имя и возраст Мы заводим эти перемены и передаем сюда в скан э в правильном порядке естественно
Михаил Непряхин: передаем ну как в селекте Там Ну мне тут Звездочка Ну Грубо говоря Там таблица у меня значит идет, сперва Иди потом меня потом возраст соответственно я здесь Тоже в правильном порядке их передаю
Михаил Непряхин: и они их на них ласконируются ну и все дальше я уже их Имею.
Михаил Непряхин: А какбы происходит декодинг Или они У меня там уже есть
Михаил Непряхин: М может показаться что этот момент можно Автоматизировать на самом деле да его Можно Автоматизировать
Михаил Непряхин: ээ тоже в голку есть возможность завести вот под это дело, структуру и
Михаил Непряхин: в страктегах указать какие колонки мы Хотим, портить то есть типа это не уарем но чуть больше автоматизации но Тем не менее когда вы вот так вот руками делаете сканы
Михаил Непряхин: хоть и кода получается больше но Тем не менее У вас полный контроль и Вы легко можете сделать какие То Небольшие, изменения оптимизации Поэтому как бы круто Что Голову. Дает возможность на таком, низком уровне именно вот со скрелем работать
Михаил Непряхин: так Мы хотим, заселетьте одну, строку
Михаил Непряхин: с вером да ну тоже заранее готовим вот Эти, поля, Куда Мы будем сканировать данные
Михаил Непряхин: эти вот пгетапы это обертки для того чтобы отделить ниу значения вернее нууууу чтобы нулы отделить то есть Там Мы можем проверять на вылет и если оно фоукс то значит значение было ну и Мы Так можем Отличить ну от ненула Озеровелью
Михаил Непряхин: ин восемь на самом деле это и не шестьдесят четыре просто
Михаил Непряхин: асгревой это подгреговый тип ин восемь в позгре это восемь бай
Михаил Непряхин: вот по нашему пошному это инн шестьдесят четыре,
Михаил Непряхин: и Ну точно Так же вот Мы в них сканируем и потом Можем У Каждого проверить
Михаил Непряхин: аа валидно ли оно
Михаил Непряхин: то есть вот отойди мы можем проверить валидно инвалидное и Если валидно то дальше использовать ну здесь я ничего не проверяю я просто сразу, вывожу то есть я здесь не отличаю зерова или незорвали если, вот ноль я не пойму а До зеркалью или нуму Было в таблице
Михаил Непряхин: вот если, нужно отличить тогда проверять через метод валит и
Михаил Непряхин: транзакция, так транзакция, амбла тут уже много ладно давайте сделаем перерывчик, в шестом проське. Роу снегг Это Фичь одной строки избд
Михаил Непряхин: и Не совсем Это Не совсем так
Михаил Непряхин: оон Не будет по одной фече Он все равно запрос Сделает к базе как есть
Михаил Непряхин: и база батчим. Вернет эти данные то есть она вернула пятьдесят строк
Михаил Непряхин: и мы уже ну драйвер уже эти Пятьдесят Строк имеют и Некст это не фечь По одной Строке из базы это именно просто перебор вот здесь вот как бы уже вронтами строки у нас уже есть
Михаил Непряхин: то есть в драйве они уже есть они уже получены из баз данных просто мы их
Михаил Непряхин: Нам, рубатам по одной
Михаил Непряхин: Так в Чем, Плох стандартной Драйве Расклеились Голову. Там Что Нет пуа да Ну, естественно Там Нет пуа и Ну, его никто не использует все используют Пеликс все просто Погибликс используется десять из десять случаев ну может быть Там
Михаил Непряхин: в очень. Редких. Случаях использую вы можете увидеть Горм, вот эсквеликс
Михаил Непряхин: может один, Раз виделся все Время Искрились и один, Раз виделся в Свое, Время голый Скрип Вообще ни разу Не видел
Михаил Непряхин: а если в базе столько острог забросили Сколько выбрал этот момент вот вот Там вот не могу сказать Сколько но Там какая То оптимизация есть
Михаил Непряхин: все сто строк сразу не попадут то есть вот там уже включают работу вот этот райвер п икс и он будет какими-то бочами получать запросы из базы и отдавать их нам
Михаил Непряхин: то есть но как какие там именно дефолты если это важно то надо уже читать Кот по грикса мне это Ни разу не было нужно Поэтому тут не могу сказать
Михаил Непряхин: но апгрейк с этим хорошо умеет работать именно Так чтобы Не было там тети тормозов и как-то все было плавно
Михаил Непряхин: Я эффективна так вам Давайте перерожден, две Минутки
Михаил Непряхин: или кто
Михаил Непряхин: так Продолжаем значит про транзакции здесь и от самого коннекшена у нас есть э
Михаил Непряхин: три метода которые нам нужны для Транзакций
Михаил Непряхин: так Сейчас Посмотрим Это у нас
Михаил Непряхин: где ты бунтерфейс увидеть ты икса
Михаил Непряхин: воттон вот у нас для транзакции нужно чтобы начать транзак нужен грин и он возвращает объект транзакции
Михаил Непряхин: Если Все хорошо Том где Он Камит Он Только Ошибку Возвращает
Михаил Непряхин: и если что-то идет Не Так То происходит ролл. Бэк Тоже, Только Ошибка Возвращает и и
Михаил Непряхин: Можно сделать ролл. Бэк аа несколько Раз
Михаил Непряхин: и даже если у нас уже закоченная
Михаил Непряхин: транзакция то вызов Роллбека он никак ее Не Отменит и как Бы ээ ну все Окей ну Так и Написано что это Безопасно
Михаил Непряхин: вот можно в конце э любой транзакции Всегда, робок вызывать и в зависимости От того что если все было хорошо то ничего Не произойдет если уже комит был вызван рафбек ничего Не меняет
Михаил Непряхин: а если, камита не было то тогда роббек сделает возврат сделать робот
Михаил Непряхин: вот и в коде это выглядит следующим образом
Михаил Непряхин: значит вот начинаем транзакцию делаем бегин получили объект транзакции
Михаил Непряхин: сразу же в дифферере делаем робот
Михаил Непряхин: он весь этот бог вызовется в конце. Функции
Михаил Непряхин: как деструктор то есть он в самом конце вызовет Поэтому вот все что изнутри это ничего не начнет выполняться здесь и Сейчас но здесь и Сейчас мы уже говорим значит в любом случае сделаешь роубек
Михаил Непряхин: и если транзакция Уже была Закрыта если камид был удачно вызван вот здесь ботками вызван
Михаил Непряхин: то Там вернется. Ошибка Что транзакция закрыта и вот здесь Она нас Не интересует то Есть, Мы говорим
Михаил Непряхин: если ошибка Не нем то Есть, если ошибка Есть,
Михаил Непряхин: то мы бы хотели ее залогировать но мы бы хотели исключить ошибку если, это ошибка вот эта транзакция закрыта то есть, комит был успешно Вызван и Поэтому Мы говорим ирассвист То Есть, если ошибка У нас
Михаил Непряхин: вот Это Что ты эксглост Но восклицательный знак Но Это Не Она
Михаил Непряхин: то мы хотим? Это дело залогировать а это мы реагировать Не хотим? Эту Ошибку нужно фига как Бы ну Она и так будет почти Всегда возникать потому Что Мы будем Всегда Делать роббек а когда Ботка мид успешен и вот только когда он Не успешен тогда Мы этого героя
Михаил Непряхин: дальше от Транзакций смотреть уже от Транзакций Мы вызываем микзек потому что вот этот объект вначале транзакции возвращается интерфейс У Него есть эти три Методы которые нам нужны для работы вот он ыкзек который для всего остального
Михаил Непряхин: для всех запросов кроме
Михаил Непряхин: и селекта одной строки отселект одной строки и селекта много строк то Есть а вот это уже все остальное
Михаил Непряхин: как видите тут Есть Всякие Препоры там вот Еще чего-то ну Мы это руками Никогда не работаем с этим Потому что. Это уже Там
Михаил Непряхин: и это уже Там
Михаил Непряхин: на низком Уровне с этим работать. И мне Никогда Не приходилось работать. С Этими методами То Есть Всегда. Это для транзакции Эти. Три метода ну классические и Эти. Три метода для работы с
Михаил Непряхин: спрос с запросами
Михаил Непряхин: а если База поддерживаться. И в Поиске транзакциях можно сделать второй Раз ээ биген Не знаю, Не Нет экспертизы по этому вопросу
Михаил Непряхин: звезда надо самим вам вот проверить ну или чаще же идти спросить Думаю ответит,
Михаил Непряхин: так ну да вот короче мы начали. Транзакцию сделали, два раза язык
Михаил Непряхин: сделали, два раза ничего от строк и закомителем
Михаил Непряхин: и когда будем выходить эти функции сработает роллбек и либо откатит либо подтвердит зэмедит
Михаил Непряхин: так сразу, же если вдруг вам Нужен уровень изолированности Какой То определенный То есть по дефолту у нас уровень изоляции в гоу
Михаил Непряхин: Ну в привилегии спас грей это
Михаил Непряхин: рыбка метод то есть вот это три танкомитед он здесь есть я вот не знаю вообще в погребе его можно руками выставить или Нет потому что в позгре вот дефолтный уровень из рации это Редко митед что транзакция видит закоченные данные
Михаил Непряхин: а незакомеченные данные она Не видит вот Поэтому возможность просто для совместимости как-то добавили совместимость со сквером вот Мы можем руками увеличить,
Михаил Непряхин: уровень изолированности до рипита говорит и до устере вази был ну типа репита говорит нам говорит что Повторяющиеся чтения
Михаил Непряхин: и все запросы выполняем в транзакциях как Будто бы они не параллельные а
Михаил Непряхин: последовательно вот короче говоря вот если Мы хотим, повысить уровень изоляции то отменить с помощью опции вот это дело
Михаил Непряхин: и и Мы ее передаем эту Опцию,
Михаил Непряхин: в бегине ну а Дальше Дальше все то же самое
Михаил Непряхин: Так можно Пожалуйста, Вкратце. Объясническую Транзакцию, для чего вы деваться. Я просто только слышу Эндаков,
Михаил Непряхин: ну смотрите вкратце у нас база данных революционная она нас э поддерживает
Михаил Непряхин: вернее не поддерживает а соответствует соответствует асит значит асит это омарность операции а си
Михаил Непряхин: а консистенты сдал,
Михаил Непряхин: си консистентность и это уровень изоляции ну вот про который то что, вам говорил и иди ну надежность дюрабилите или как-то то есть Ммм
Михаил Непряхин: база данных дает гарантии что, операции будут выполнены все или не одной дает гарантии Что
Михаил Непряхин: данные будут в консистентном состоянии Что если мы из одной таблицы Что то Деньги списали добавили в другую таблицу то из одной таблицы очну будет а второе прибудет
Михаил Непряхин: уровень изолированности это то Что вот между Собой транзакцией мы можем
Михаил Непряхин: аа изолировать между Собой для того Чтобы
Михаил Непряхин: ну повысить как бы, у нас же база данных она Поддержит параллельную работу
Михаил Непряхин: а но э где есть параллелизм там есть гонка данных и вот в общем то это решается с Помощью уровня изолированности
Михаил Непряхин: и по Сути мы управляем блокировками можем всю таблицу заблокировать можем строку заблокировать а можем сказать что
Михаил Непряхин: ну там ничего страшного главное чтобы только за комиченные данные следующая транзакция видела ну а дюрбилити это то что У нас есть гарантия что если база данных нам ответила ок, типа вот мы записали туда данные база сказала ок, то мы считаем что они правда Сохранились
Михаил Непряхин: и Сперва данные попадают в лок файл а потом они уже Сохраняются реальные таблицы и если даже электричество отключат то, в оккупай в локфайле эти, данные все равно будут
Михаил Непряхин: вот короче говоря и
Михаил Непряхин: революционная база данных это уже отдельная большая тема и в любом случае здесь вам ну как бы мы в рамках курсов не можем ее осветить и охватить,
Михаил Непряхин: мы смотрим просто как с этим работать вот Но
Михаил Непряхин: в любом Случае Если какие-то глупые Вопросы, Есть равно задавайте Ну Если вы считаете Что Они глупый имеется в виду Но в любом случае вам придется дать Самому поизучать традиционные базы данных э скиэль и подлес
Михаил Непряхин: а вопрос был в Контакт что такое то чего делается ну
Михаил Непряхин: грубо Говоря у нас есть Денежные финансовые Операции нам надо с одного счета у клиента списать а Второму положить и деньги же не могут взяться Ниоткуда и Деньги не должны исчезать Никуда
Михаил Непряхин: такой транзакции просто дают гарантии что у нас данные будут в конституционном состоянии Ну его буква си вот она как Раз про это и говорит
Михаил Непряхин: Так просто башка, запросов Которые должны или за Разом не рухнется не один, в Любом случае ошибки ну да да да
Михаил Непряхин: так по идее со запроса это и есть транзакция жида а и да
Михаил Непряхин: но Мы еще можем руками и сказать
Михаил Непряхин: какой кусочек мы Хотим? Сделать это марлен
Михаил Непряхин: то есть Мы можем сказать что две операции э, должны быть
Михаил Непряхин: атамарными они обе. Или должны выполниться то есть вот мы тут дева минсерд делаем менцер данных м
Михаил Непряхин: данные добавляем в таблицу короче либо они обе, добавятся, либо ни Одна из них Не добавится допустим добавили вот эту Строку
Михаил Непряхин: и все Окей борьба за ответила Окей добавляем следующую Строку в таблицу и база ответила ошибкой
Михаил Непряхин: Это значит что, мы вот здесь вот
Михаил Непряхин: а завершаем Работу ну, тут мы должны сделать режиссером дату пишем влог делом ретерн вот эти вот ошибки нашей,
Михаил Непряхин: и у нас сработает ронбек который откатит вот эту вот
Михаил Непряхин: э строку которая добавилась туда то есть грубо говоря там на уровне таблицы помечается вот строка добавилась она физически добавилась но она помечена что транзакция, не закачена то есть мы находимся в подвижном состоянии
Михаил Непряхин: и только когда Мы добавили эту Строку. Тоже, Мы Делаем комитет
Михаил Непряхин: и вот с этих Строк Которые Мы добавили Снимается Флажочек что эти данные они были не замечены то есть мы их комимем и соответственно данные уже
Михаил Непряхин: атамарно как бы вот записались в таблицу
Михаил Непряхин: так ну надеюсь кратце Объясним, и не задушил бакендеров. Наших вот так
Михаил Непряхин: а знать какие команды Правом жб надо знать
Михаил Непряхин: ну и да ну как бы это какие команды это Уже просто э Сквель, это вы просто эскивалитренажер проходите ну Там Не знаю за Неделю вы скорее осваиваете, в Любом
Михаил Непряхин: в тренажеры потому что там основные какие-то Команды они простые все ну положить данные достать данные Крутка короче условно а То что там сложное чего-то Но это Уже бывает редко и все равно все забудете главное просто грубо говоря не надо эскивель
Михаил Непряхин: запоминать что То Там надо знать его возможности, вот то же. Самое какое то у меня обучение да я же. Вам понимаю что вы же. Не, запомните все но вы должны Знать какие есть возможности,
Михаил Непряхин: и если. Что потом быстренько загуглить Или зайти и
Михаил Непряхин: все запоминать То если. Вы будете постоянно с Чем То Работать конечно вы это выучите но никто не ждет от вас что вы все будете знать
Михаил Непряхин: а так так
Михаил Непряхин: дальше значит какой моментик у нас Для облегчения работы Со скрипом есть Билдеры То есть знаете У оремов Нет Ну как бы есть да Но они
Михаил Непряхин: Нет с Ними никто Не работал есть биллдеры из сквер билдера значит Два популярных из киева из квиддира первый эскуировал
Михаил Непряхин: ну и
Михаил Непряхин: довольно популярен значит
Михаил Непряхин: вот Мне тут конечно беда я закрываю Год значит семь тысяч звездочек довольно популярная Библиотека но вот даже по Годам видно что она старая и она Не обновляется
Михаил Непряхин: А для скриж билдера ну может быть конечно он уже законченный и с ним все хорошо но короче заброшенная библиотека но очень часто используется на проектах
Михаил Непряхин: ну в общем-то смотрите тут вот вместо того чтобы писать чистый эскель можно использовать биллеры и вот в таком плане значит что вот селек Мы пишем конкретно даже вот уже Внутри селекта аргументом типа Звездочку
Михаил Непряхин: фром вот так вот пишется Там то же самое ну Ради, джоинов чаще всего используют в библиотеке, чтобы попроще было как-то
Михаил Непряхин: а ну как будто бы кажется, людям что через, биллдеры оно будет, Выглядеть. Читаеме чем, когда вот
Михаил Непряхин: просто Мы Будем получать вот такой запрос короче говоря биллдеры могут Сбиудить вот этот вот наш, скрытый запрос
Михаил Непряхин: и на выходе У билдера Всегда это вот строка которую Мы потом передаем вот сюда хоть, какую-нибудь
Михаил Непряхин: без транзакции вот сюда который Мы потом передаем то есть вот эту строку можно заранее Еще Сбилдить дополнительной библиотекой
Михаил Непряхин: и интерес представляет только и а билдинг
Михаил Непряхин: бабачки инсертов вот когда надо вставить в таблицу типа миллионы строк тогда биллдер оказывается ну довольно полезно и удобен. Во всех. Остальных Случаях с Голым и с крылем работать ээ Лучше и приятнее ну кроме сквирова есть еще вторая библиотека иголку
Михаил Непряхин: которая все-таки хоть, как-то а поддерживается
Михаил Непряхин: и развивается и возможности у нее Гораздо больше чем из Купева Но на менее популярном Эти Две тысячи Шестьсот звездочек но она хотя Бы как-то
Михаил Непряхин: да ну тоже Заброшенное оказывается ну короче говоря биллдеры как видите что-то хорошее они какие-то заброшенные и
Михаил Непряхин: а значит где я использую голку Там где мне надо ставить много строк значит вот пример с иннивертом
Михаил Непряхин: Мне в конечном итоге смотрите я все равно буду работать сикзеком
Михаил Непряхин: просто для экзотика Мне нужно Сбиудить вот этот вот эсквель большой, длинный
Михаил Непряхин: значит А Сейчас я его запишу найд
Михаил Непряхин: запуститься не забывайте
Михаил Непряхин: так шастаться Без Прыг коннекшн мне Он не нужен ээ И здесь дело ну
Михаил Непряхин: ну вот короче говоря и я хочу сделать и Ни черт
Михаил Непряхин: аа трех строк значит У меня, Есть Таблица юзеры
Михаил Непряхин: и я хочу вставить э, три пользователя с именем Или с Возрастом вот элис двадцать боб тридцать чарли сорок
Михаил Непряхин: и для того чтобы не континировать Строки.
Михаил Непряхин: И получить, и гранирование
Михаил Непряхин: То есть смотрите я же эти данные от пользователей получаю да например, пользователь у меня регистрируется и типа говорит что вот в поле он там в браузер в бил элис я эти данные получил
Михаил Непряхин: и чтобы он туда ни проббросил какую-то искали запрос не сделать какую-то инъекцию То есть это вид А Так значит есть такой вид А Так кто называется из Скю венеции
Михаил Непряхин: когда Мы можем от пользователя получить, данные не провалидировать их и сразу, вставлять данные и тем самым получить, исколеникцию ну по запросу вот у меня, в десятом комнате есть примеры из кенеции значит Там под капотом
Михаил Непряхин: происходит экранирование всех опасных символов и в конечном итоге Мы имеем безопасный Исковый запрос который просто передаем на
Михаил Непряхин: в Наш прогрекс и выполняем
Михаил Непряхин: и вот вот с помощью такого, вот нехитрого Кода Мы получаем в итоге вот Инженер инту юзерс в кавычках и Вот эти вэльюс видите они уже подставлены
Михаил Непряхин: и их тут может быть типа полмиллиона
Михаил Непряхин: Вот чтобы не заниматься конкретинацией строк
Михаил Непряхин: а Потому что в противном случае это же вам пришлось бы руками писать значит вот есть биудель Которые позволяют это делать Поэтому просто знать о Их возможностях и Их наличии важно когда вы вдруг захотите, работать Там с большим количеством министертов алгаритов что-нибудь такое вот но на селектах
Михаил Непряхин: они скорее не нужны чем нужны потому, что смотрите вот Сейчас тот Вернул вот селект
Михаил Непряхин: значит Мы говорим, что фром юзерс Там селект вот это Это где ну и значит у нас
Михаил Непряхин: Это будет и значит должен быть возраст больше Двадцати гетто я типа гейтзен
Михаил Непряхин: эко ану типа больше или равно двадцати вот и имя должно быть и квол, элис
Михаил Непряхин: ну типа видите как бы читается как будто бы но мало того вы искрыли должны знать выше и вот этот вот язык запроса нужно знать потому Что он тут все Там ведь их
Михаил Непряхин: на Пустых интерфейсах короче там в Веселух вообще тут Ошибки бывают прямо. Жесточайшие, То есть как бы я Вот много с Этой фигней работал еще более-менее как бы ориентируясь на когда Там какой-то человек Залазит кто Там дело не имел с биллерами и это прям ему очень больно вот это читать и важно почитать делать какие-то Правки
Михаил Непряхин: Или Искать Баги Поэтому институты уордер еще Добавляются что имя и дз Мы добавляем короче
Михаил Непряхин: все Кроме Сложных. Больших. Инертов делается просто с помощью обычного, изкрыли запроса если вдруг там оправдано действительно вот эту вот чтобы кон континентацию не делать то можно сделать с помощью билдера
Михаил Непряхин: вот Джульеттап дейд ну. Вот так вот обдеет выглядит где-то Например, надоелит Модели тут, покороче
Михаил Непряхин: вот Есть тут, у меня пример сидера значит вот допустим я хочу Фейковыми, данными забить таблицу когда то, бывает нужно
Михаил Непряхин: и здесь Действительно Удобно использовать биллдер потому что У Меня, большое количество строк и вот как Бы я Малым Количеством Кода могу
Михаил Непряхин: сделайте инерт этих таблиц то, Есть вот эту тысячу строк фейковых данных сделал
Михаил Непряхин: получил, из них и кель всего здесь у меня уже иск есть я его в викке, передаю и у меня эти тысячи строк улетает одним Запросом в базу,
Михаил Непряхин: Вот ну и работать быстро.
Михаил Непряхин: Аа Так значит с Голку все ну Давайте еще Искренне к с явлениям значит к примерчик
Михаил Непряхин: ну. Вот это надо запускать конечно надо трогать руками
Михаил Непряхин: Мы Же представим что Вот нам пользователь сослал инъекцию искрыли-некцию То есть кавычку Там только запятой потом берет идро, и от нашу таблицу Пользователей и дальше типа все комментарий
Михаил Непряхин: вот Если Мы Возьмем и этот наш, код полученный от пользователя
Михаил Непряхин: вставим в Эскюэль Не с помощью плейхолдера Номер Один
Михаил Непряхин: ровнос Номер Один то есть вот Это поиск, холдер вот он экранирует данные
Михаил Непряхин: если мы просто его как виде строки вставим Ну или то же самое что вот
Михаил Непряхин: Через плюс мы это сделаем просто так сказал катенируем
Михаил Непряхин: то мы получим сквелиннекцию и у нас таблица нпнется запрос в итоге будет такое что вот селект типа достань все из таблицы кровь в профайл где имя равно
Михаил Непряхин: а такое-то
Михаил Непряхин: потом точка запятой последующая инструкция а следующая инструкция Дропнем всю таблицу с профилями а все что остальное там комментарий
Михаил Непряхин: вот и Поэтому очень важно не забывать использовать плейхолдеры
Михаил Непряхин: Доллар один ну и они там Еще же увеличиваются то есть все они должны быть там синклементом плюс один плюс один плюс один плюс один
Михаил Непряхин: вот Поэтому когда-то если вы это руками будете делать и больше поставлять большое количество строк мало того вам надо инкриминировать ну и конкретировать совета а гулку взоваться это все сделают то есть если вы передадите вот этот плохой код
Михаил Непряхин: в гулку Ммм!
Михаил Непряхин: Тысячу ну! Тут селект профиль да где нейм равен вот Этот нукаж то же самое Значит на выходе Будет запрос Выглядеть. Вот Так вот
Михаил Непряхин: Вр короче вот Все Что передал пользователю вот эту инъекцию она вся Обернулась А вот здесь
Михаил Непряхин: вот она кавычка меня вернулась
Михаил Непряхин: то есть вот это вот все оно будет просто как одно поле рассматриваться видите как бы и инъекции не произойдет
Михаил Непряхин: и то же самое когда Мы делаем через поездхолдер ну здесь Мы не можем посмотреть потому что это передается уже туда Внутри библиотеки но как бы Поверьте мне Там и
Михаил Непряхин: тоже Будет все нормально То Есть плей-холдер Он экранирует, подобным Же образом все инъекции
Михаил Непряхин: как Есть пример как создать синдро записи где есть связи между улицами, и по меньшим ключом да естественно есть пример значит
Михаил Непряхин: вот пример вот
Михаил Непряхин: а вот сидор, вот здесь у нас как Раз, было заполнение,
Михаил Непряхин: данными чуть, позже посмотрим ну хорошо вот здесь вот как Раз, то
Михаил Непряхин: несколько таблиц и там есть внешние Ключи
Михаил Непряхин: тек
Михаил Непряхин: дальше в следующий момент значит У нас эээ миграции они
Михаил Непряхин: уже Я жду к эмиграции да Давайте Про миграцию Поговорим значит
Михаил Непряхин: во Первых Есть такая философия инфостраг чая скотт то Есть инфраструктура как Кот
Михаил Непряхин: и в рамках Этой же философии то как выглядит наша база
Михаил Непряхин: оно должно быть записано отражено в коня
Михаил Непряхин: и чтобы удобно с этим работать и наблюдать эволюцию придумали миграции
Михаил Непряхин: то. Есть Мы конечно же можем в коде с помощью экзеков но от какой-то здесь У меня были примеры
Михаил Непряхин: создавать таблицы создавать индексы ну вот можно создать таблицу таким образом, по таблице, создастся то есть там создали таблицу если она не существует Назови ее юзерс и тут айдишни будет праймериз и возраст
Михаил Непряхин: вот но это неправильно а правильно Создавать вот такие вот файлики которых
Михаил Непряхин: ну Отображать эволюцию изменения наших таблиц
Михаил Непряхин: значит мы будем работать с библиотекой мигрейд Сейчас мы найдем Ца Написано на гоу и
Михаил Непряхин: ну также на Других языках тоже кто использует
Михаил Непряхин: на самом деле для Миграции Очень. Много разных библиотек эээ в Джава Два инструмента. Популярных есть для миграции
Михаил Непряхин: Поэтому если вы знаете Какой Это инструмент миграции то Крыш может его юзать ну Там в пять проектах Или если другого инструмента Нет вот если вы Приходите на Проект То Там скорее всего будет мигрейт значит
Михаил Непряхин: Это Сивай То есть, комнат военно-прикешен в котором
Михаил Непряхин: ну самая главная функция это в миграции накатить миграции откатить Ночью покажи мигрейт вот значит устанавливается,
Михаил Непряхин: с Помощью гоуин. Стал ну Там здесь вот здесь инструкция здесь есть
Михаил Непряхин: сэмэк ментыш а и у меня она есть в этом гоу озера в май файли
Михаил Непряхин: а вот мигрэйн стал вот просто устанавливаете вот Этой строкой
Михаил Непряхин: библиотека миграции поддерживает не Только погре а также другие базы данных
Михаил Непряхин: крик хаус Май скриэль ну конечно Там много много много разных баз, вот но вот вы можете указать с Тэгами это стратегия
Михаил Непряхин: и и вот в интеграционных тестах я так передаю теге
Михаил Непряхин: а чтобы Только интеграционные тесты запустились а здесь просто тэк витепоскас и грубо говоря в бинарнике оказывается Только то что нужно для библиотеки пользы
Михаил Непряхин: вот оказывается у вас бинарник в папке голубин
Михаил Непряхин: и дальше вот вы можете ее называться мигрейт значит основные функции, это создать миграцию то есть создать вот эти вот Два файла значит один накатить миграцию а второй откатить миграцию
Михаил Непряхин: дальше гулту Перейти к конкретной версии ну версия здесь это вот она автоматически это просто
Михаил Непряхин: Год месяц время секунды ты и получается номер миграции и и апп, это
Михаил Непряхин: накатите миграции вот сколько есть миграции в пробке накатить их все даун откатить их все дроп
Михаил Непряхин: и не использует роб форс это если какие-то проблемы с миграциями произошли
Михаил Непряхин: и напечатать версию какая сейчас версия эмиграции
Михаил Непряхин: м ну нас больше всего интересует апп и даун то есть накатите эмиграции откатите эмиграции когда вы пишете миграцию от ну во Первых Мы ведем транзакции
Михаил Непряхин: зачем для того чтобы если, вдруг несколько Инстинктов решили там накатывать миграции для того чтобы все-таки они были атомарными
Михаил Непряхин: и Мы здесь создаем таблицу со звездами индекс
Михаил Непряхин: и Мы создаем противоположную э миграцию операцию
Михаил Непряхин: Мы тоже в транзакции группы индекс дропаем базу,
Михаил Непряхин: ну можно было просто Дрогнуть базу, так как бы для порядка индекс так друг над Собой и и
Михаил Непряхин: что у нас тут какая Разница есть душа
Михаил Непряхин: а на другую я к другую ожидаю я тут создаю базу, таблицу в эпоху создаю десять сдвиг Таблице банана
Михаил Непряхин: вот и короче говоря я тебе покажу как телефоны создавать вот есть, в майк файли
Михаил Непряхин: Удобная вот мне играет клеет а майкл греет значит делаете мэйк мигрид понимаете час
Михаил Непряхин: вводится название базы данных о миграции
Михаил Непряхин: вот вот создаются два Файма и где а оно-то создалось
Михаил Непряхин: да оно здесь создалось да вот создается короче два файла и вы просто руками тут, вписываете ну то что вы хотите, изменить в ваших таблицах и обратную операцию этому действию
Михаил Непряхин: и Таким образом у вас получается ну вот у нас здесь в проекте да то есть
Михаил Непряхин: вот еномы Мы создали табрид мы создали
Михаил Непряхин: потом мы что сделали потом изменили таблицу и мы заменили таблицу профаю значит мы добавили колонку контакты с джейсоном би
Михаил Непряхин: и потом Мы создали еще Одну таблицу с какими-то Свойствами вот
Михаил Непряхин: с ключом ее идей и какими-то Трями и таким образом У нас перед глазами есть история миграции как будто Что происходило с базой данных
Михаил Непряхин: ну вот эти вот дауны конечно это так скорее знаете типом
Михаил Непряхин: ну в реальной жизни никто да он не делает на продуктовой базе данных просто как Бы так принято писать ну скорее это Для разработки Для локальной Чтобы быстро чего-нибудь откатить или вообще быстро все откатить и быстро все накатить вот Как я это делаю в интеграционных тестах то есть тут для того чтобы Сбросить миграции Я например,
Михаил Непряхин: просто ведь делаю все даун и все ап и получается Что Я отменяюсь эмиграции а потом снова их накатываю и у Меня получается чистая база данных
Михаил Непряхин: потому что когда я откатываю вот я все тропаю тропаю андропою и все у Меня получается Чисто базданных а потом опять, накатываю на катор накатываю и Она У Меня опять, возданных с этими данными Которые Нужны
Михаил Непряхин: Так Сейчас Давайте зайдем да
Михаил Непряхин: надо Табличку
Михаил Непряхин: так ну вот у меня на миграции накачанным новотеки подкачу
Михаил Непряхин: а тут также у меня есть Команда мигрэйд даун вот типа я откатился Эмиграции, сделал вот Эти даун и у Меня все таблицы на крючо Не исчезли у меня таблицы нету
Михаил Непряхин: аа Но есть одна таблица схема микрейшенс и здесь у нее есть вот как версия и флажок дерли
Михаил Непряхин: теперь грязные и не грязные вот потом накручи накатываю
Михаил Непряхин: девы ап и вот методы блоге что, вот накратилось вне три эмиграции этой миграции которая была ну вот эти вот у меня как бы вот они три
Михаил Непряхин: и таблицы
Михаил Непряхин: что мы видим значит мы видим версию какая версия последняя вот она двадцать шестая вот она последняя и дерти фолз ну? Типа да она Не грязная типа она чистая все хорошо
Михаил Непряхин: Случается так что мы чего нибудь косячим и Миграция Не может накатиться и тогда Здесь получается
Михаил Непряхин: аа Дерте его тру типа она грязная что Миграция Успешно Не накатилась и для того чтобы и
Михаил Непряхин: Ну Мы конечно просто делаем исправляем то что нам нужно
Михаил Непряхин: и накатываем следующее дело мигрейд ап Только уже с важком слэшкомфорс
Михаил Непряхин: шас
Михаил Непряхин: вернее не с флажком форс а просто Грим форс и версию и она досюда докатывается, вот ну Или мы просто все Сносим
Михаил Непряхин: делаем полностью даун и накатываем ее снова
Михаил Непряхин: вот но для того чтобы это как бы когда вы столкнетесь с этим первый Раз просто вы все равно будете
Михаил Непряхин: как сказать нам придется залезть вот Сюда на Эту Страничку посмотреть что Там Делать в случае Если Миграция завершилась неудачно и просто как Вы знаете что Решается это с Помощью форс и
Михаил Непряхин: вот этот флажок если, он получил все тру То, как бы у вас там миграции все заблокированы Вы ничего не можете делать, вот Пока руками не укажете с Помощью форса к какой именно миграции вы хотите, прийти
Михаил Непряхин: а ну перед этим мы должны эту миграцию исправить
Михаил Непряхин: и в целом идея миграции в том что чтобы
Михаил Непряхин: не Было Конфликтов когда несколько Людей. Работают надданной таблицей, для того чтобы видеть
Михаил Непряхин: вот этот порядок в каких ну кто какие изменения исторические применял
Михаил Непряхин: и это такой подход скорее и
Михаил Непряхин: есть еще гуз, библиотека такая и так
Михаил Непряхин: не совсем, понял, откуда берутся данные которые попадают в миграции окей так для скрини границы используйтелинтер а
Михаил Непряхин: но я форматирую, просто этим ну есть Же здесь он этот код
Михаил Непряхин: будет Некоторый формат код просто делаю форматирование и все но вот тут Же и так подсветится эдришка и так подсветит и если здесь будет какой-то косяк и никаких Лент роттов пользователь не использует а если в провожении соединения с несколькими вазами для какого соединения Будет использоваться миграции
Михаил Непряхин: а ну смотрите как бы у вас миграции либо их они не накатились
Михаил Непряхин: и тогда у вас приложение Будет ошибками сыпать вы будете обращаться к каким то данным таблицам которых Нет
Михаил Непряхин: вот и но и принято миграции встраивать в пайплайн, вся сиди
Михаил Непряхин: и Поэтому когда у вас выкатывается, приложение автоматически выкатываются эмиграции Все которые здесь есть Поэтому если вы добавили сюда миграцию ну не может быть такого чтоб она не выкатилась она просто автоматически выкатывается и У вас база данных Всегда Находится в состоянии вот этом вот
Михаил Непряхин: а и
Михаил Непряхин: и когда вы вокально запускаете хотите, проверить вы также Тоже делаете миграции Но вот Не играет апп, ну вот как Раз, здесь у меня все эти команды
Михаил Непряхин: вот мегаэтап, миграй даун Которыми мне часто приходится пользоваться. Они просто вот Из этой папки берут и все накатывают и вы Тоже, можете проверить там вся убедиться но работать не работает
Михаил Непряхин: интеграционные тесты автоматически тоже накатываются в Эмиграции.
Константин Шум: То если идет, приложение Два соединения две конфигурации
Константин Шум: то есть есть один хост есть второй хост
Константин Шум: и как в миграциях указать конкретное соединение.
Михаил Непряхин: А просто на уровне ся сиди смотрите там как выглядит история вот
Михаил Непряхин: вот микроэтап нам надо сделать здесь передается урок ээ где находится база данных а он у меня здесь вот у роботов просто
Михаил Непряхин: такой вот
Михаил Непряхин: соответственно если, вам надо на оба, хоста накатить миграции вы в поеплане просто сперва на один хост их накатываете а потом на второй хвост их накатываете и они у вас в консистентном одинаковом состоянии находятся
Михаил Непряхин: ну. Это в любом Случае в Пайплане должно Быть Встроено
Михаил Непряхин: Так да Пусть Даже Мастера свои. В любом Случае надо как-то ну да ну короче во все слои вы естественно тоже надо накатить миграции то есть это понятно что
Михаил Непряхин: это будет ээ естественно это будет не атамарно сделано тут по очереди сделано может случиться ситуация, мастер выкатили свое, ее почему-то не Получилось вот но это уже разруливать руками придется
Михаил Непряхин: эмиграция нужна для перемещения базы из одного, места такой не не смотрите вот
Михаил Непряхин: здесь короче не про это речь называется миграция
Михаил Непряхин: но это про миграцию не и
Михаил Непряхин: и тоже там поднять такую же базу, данных вам же мало миграции накатить вам надо Еще данные перелить и Поэтому как бы речь, именно просто про Состояние таблиц полей динамов.
Михаил Непряхин: Когда вы создадите другую Базу в Другом месте То вам в любом случае придется данные это скопировать но там Поэтому это не про это то, есть речь именно про состояние чтобы как бы отобразить вот это состояние таблиц в коде
Михаил Непряхин: так для Редактирования Скорее да да
Михаил Непряхин: что это такое короче с этим хоть как. Надо поработать то есть Ну вот попробуйте что нибудь подобавляете таблицы
Михаил Непряхин: а подропать их какие-то колонки удалять и да и а
Михаил Непряхин: так с миграциями понимаю что с миграциями Здесь немножко сложновато и Здесь придется да придется все равно зайти вот сюда вот это вот прочитать найти здесь где там
Михаил Непряхин: википедия у них это есть как там что называется дис кашинс шашлыми
Михаил Непряхин: ну наверное вот в ряд мире
Михаил Непряхин: ой Нет не людьми как это
Михаил Непряхин: ну хорошо здесь у них внутри есть ссылки
Михаил Непряхин: а У них тут по-моему Внутри какая-то своя это так вот есть как с этим работать и
Михаил Непряхин: если, вы просто как бы вот разрабатываете вам не надо много файлов
Михаил Непряхин: то есть вы там внутри себя пока наоборот не запушили вы не делите это на разные файлы но когда уже у вас база оказывается. Запушенная на про ну то приходится, изменение Делать с помощью вот этих миграций
Михаил Непряхин: ну есть еще практика когда все эмиграции там проходят несколько лет для того чтобы не. Разбираться в этих больших количествах файлов
Михаил Непряхин: их просто схлопывают в одном состоянии какое Сейчас. И оставляют
Михаил Непряхин: ну просто в одном файле текущей стоит чтобы видеть чего там хочешь как хульба-то выглядит потому что когда у вас все много файлов и они вот такие все черезальтеры то, не очень понятно, как бы не очень удобно это ну конечно вы просто заходите в таблицы и смотрите Что Там оно в каком состоянии Находится
Михаил Непряхин: а Так
Михаил Непряхин: когда я накатываю мимиграйт ап о чем я ничем не обновилась Самого отры таблицы ну вот у меня тут Две таблицы значит вот есть у меня с Профилями есть вторая таблица
Михаил Непряхин: Проперти а вот они Там как так выглядят
Михаил Непряхин: и для того чтобы удобнее было и
Михаил Непряхин: попозже на следующий. Раз про пропрофилирование посмотрим ну например, хочу я запомнить базу, данных вот миллионам пользователей я говорю вот значит Тысячу, литераций, хочу и за одну, итерацию я забавляю Тысячу,
Михаил Непряхин: о филиппом профайл база данных и
Михаил Непряхин: так давайте, запустим тут Наверное запустится
Михаил Непряхин: вот ну там какое то время Сейчас понадобится чтоб оно в базу записалось
Михаил Непряхин: так сама миграция раскатывает дефолтную базу данных на сервере с набором таблиц промеродоходными данными из Родмина Ну да
Михаил Непряхин: вот но двадцать, две секунды очень миллион юзеров у меня вставлялся двадцать, две секунды
Михаил Непряхин: мне этот еще профайл Снимал при этом ну и все и У нас получается Что Сейчас есть, таблица а
Михаил Непряхин: а заполненная рандомными данными с миллионами пользователей
Михаил Непряхин: и таким образом вы можете делать даже какие то нагрузочные тесты ну в плане смотрите Всегда Интересно если, вы вот делаете изменения в какой то большой таблице
Михаил Непряхин: то важно бы такое же количество строк сколько есть напротив у себя вокальное поднять то есть там с какими-то Фейковыми, данными, а дальше уже вы Можете делать.
Михаил Непряхин: На запросы Сейчас этот вид Строка
Михаил Непряхин: вот значит дальше вы делаете, селект а Так чего бы там вернее так, не затевар эйдж больше
Михаил Непряхин: так, что больше восемнадцати статус акций ну допустим такой запрос так, и
Михаил Непряхин: Ммм фромнадза у меня эта база данных профайл
Михаил Непряхин: Так ну и вот и дальше уже вы можете добавлять анавайс Оликсплей новостяк сплэйн вот и
Михаил Непряхин: план запроса соответственно понимать и
Михаил Непряхин: ну в любом Случае Это рано Или поздно понадобится нас обеих Тоже, спрашивают как профилировать базу, данных вот Это либо эксплейн запрос когда Мы видим план запроса как он будет выполняться базой данных
Михаил Непряхин: а сколько Времени он занимает нуу в попугаях он сколько Времени занимает и еще кибер фитчан вайс это когда выполняется реальный запрос и мы видим реальный План то есть как Бы мало того теоретическую оценку мы видим прям вот что план был такой
Михаил Непряхин: а фактическое время выполнение, было шестьдесят семь или секунд суть как бы тут, реальное время выполнения прикольнее и соответственно вы Ими за северную Базу данных можете понимать как Лучше сделать изменения
Михаил Непряхин: с данными для того чтобы не прострелить себе, ногу, и чтобы действительно было быстро вот а именно, по плану ну мы здесь не будем, разбираться, это уже
Михаил Непряхин: надо изучать пасгрем и
Михаил Непряхин: в общем там Можно это изучать бесконечно есть отдельная Профессия дибией кто занимается Только Базами данных
Михаил Непряхин: а значит ты немножко. Простите Посмотрим как он тут устроен
Михаил Непряхин: Так Ну Создаю коннекшн не пул просто обычный. Коннекшн делаю количество федерации сколько украл Переменной и генериру Бач Профилей
Михаил Непряхин: ну вернее из права генерал это адишники и потом эти предвидюшники, в бач профиля Их и генериру
Михаил Непряхин: потом я Их всех, ин сердю.
Михаил Непряхин: И добавляю к Ним эти свойства во Второй таблицу и Тоже. Инртю а вот
Михаил Непряхин: а конкретно как я профиль и создаю
Михаил Непряхин: Это делается с помощью голку видите здесь рекорд то есть прямо, вот конкретные с помощью Фейковых данных вот это библиотека для генерации Фейковых данных
Михаил Непряхин: ну удобное рается мне создаете бачи со свойствами создали бычи вот ну а сами э вызовы
Михаил Непряхин: они контакт блабла это здесь для Джейсон Би,
Михаил Непряхин: так это неинтересный ин, Стюард происходит тоже Кстати в голку через голку я генерирую, самую сквель вот читайте у Меня Там тысяча, вбаче я сюда Передвию Бач значит Я Тысячу Профиля здесь Передаю Поучаю скеель Делаю экзек и записываю Их
Михаил Непряхин: Вот и допустим видя Как в голку выглядит когда Мы Хотим, работать Вот с какими нибудь
Михаил Непряхин: Вот это Сарреем я Полчаса работаю с массивом опять. Же свой синтаксис и и
Михаил Непряхин: это оправдано только ну вот когда я Допустим сидер пишу если я пишу
Михаил Непряхин: и продакшнэнди код то уголку я никогда не использую потому что ну редко когда надо такие бочами чего-то вставлять бывает если надо тогда конечно голкуюзе или только на интерты а так во всех остальных случаях это
Михаил Непряхин: ну вот кричит у Меня да Что здесь обычно не сказали запрос ну. Так Что надо не вставить в таблицу профайл
Михаил Непряхин: этире поля они все соответственно вот через плейхолдеры через знак доллара
Михаил Непряхин: так контакты они у меня Джейсон би насколько я понимаю Раз я актриса не Всегда, заталкиваю а Сейчас глянем
Михаил Непряхин: да контакты Джейсон, би Поэтому я их сюда оставляю уже там видеть жельсона.
Михаил Непряхин: И дальше эти аргументы я сперва сам и сквель передаю а потом уже эти аргументы и вот эти все айди ими возраст они подставятся вот эти пейсхолдеры
Михаил Непряхин: и в базы данных ставится
Михаил Непряхин: и видите как бы вот допустим зачем я здесььюзен кэлвин си которая будет, что-то генерить Потому Что ну здесь и Так Это все лаконично и мало Написано
Михаил Непряхин: ну У Меня здесь из двух таблицы стоит создание профиля Поэтому я здесь еще создаю свойство так же Час происхолдера и в экзамене потом записываю удаление профайрова тоже простое короткое
Михаил Непряхин: ну у меня здесь Софт делит мягкое Удаление Не Чарльз делито чарльза бдейт и тэт
Михаил Непряхин: часто бывает Так что Мы данные никогда Не удаляем а просто помещаем что они удалены
Михаил Непряхин: ну если там по Закону к нам Обратились и сказали удалите жестко То давную жесткудали
Михаил Непряхин: так с гетом ну как Я уже показывал здесь довольно много текста потому что мы должны подготовить агаты ложку
Михаил Непряхин: в которую данные мы загрузим а потом из Этой детошки мы еще и должны сделать уже переменная
Михаил Непряхин: и я их сразу тут с Указателями делаю и передаю
Михаил Непряхин: вот и профайл иди
Михаил Непряхин: профайлайди а ну да я тут конкретно один профайл достаю соответственно у Меня, тут один фейсхолдер вот он где айди равно вот этому моему прохай войди
Михаил Непряхин: и дальше у Меня, возвращается профиль и я его соответственно сканирую, вот в эти вот тесты
Михаил Непряхин: можно конечно и вот так вот все через, запятую здесь вот сюда вот передать но как, бы вот это вот читается немножечко хуже чем вот это вот поэтому я предпочитаю вот так вот ну и присутствует удобно ведь и тут, же важен. Порядок
Михаил Непряхин: Поэтому Ммм если. Вы нарушите этот порядок решка ничего не Подсветит
Михаил Непряхин: работать ничего не Будет вот Поэтому я Предпочитаю. Чтобы визуально можно было на одном Экране, сравнить
Михаил Непряхин: по полям все ли нормально ну понятно дело Что Ошибка Будет просто ничего Не будет работать Но
Михаил Непряхин: тем не Менее просто для удобства
Михаил Непряхин: Так Ну, и все дальше еще тут Из особенностей значит у нас есть Ошибка ир ну роуз Это когда хороший нотаунд я просто оборачиваю свою кастную ноут фаунд
Михаил Непряхин: для того чтобы наверх в юскейсы не протекала вот эта вот абстракция мозгивая то есть и и и
Михаил Непряхин: и и ну это вторая таблица у меня соответственно
Михаил Непряхин: ой не вторая версия мне надо сделать Анмаршинг,
Михаил Непряхин: этих данных потому Что у Меня, там чесон би то есть просто я вам тут показал пример на все Случаи жизни значит здесь есть Джейсон Би
Михаил Непряхин: здесь есть из и классная функция так ну Апдейт
Михаил Непряхин: обладает Только особенность в том Что
Михаил Непряхин: ну У Меня есть такой упрощенный обед типа просто, все что Ко Мне передали я это все и обновляю
Михаил Непряхин: Ну. Тоже получается не длинный небольшой и значит Еще одна Особенность
Михаил Непряхин: у меня все поля они все методы они умеют работать из транзакции, и Без
Михаил Непряхин: и достигается это за счет того что я Кладу, а смотрите когда я создаю этот аа структуру нашу архитектуру
Михаил Непряхин: а чего мне вообще где вся, Подсветка вот почему оно все слетевшее я не понимаю ты заключишь войнешь каштанно
Михаил Непряхин: значит э смотрите когда я создаю пеликспул то вот я его получаю
Михаил Непряхин: ну он тут создается Там Настройки передаются от этого Юзер, пасмурда хоста имя базы а и
Михаил Непряхин: парсис дель сен и дальше создается вот Новый пул. Я его и возвращаю
Михаил Непряхин: ну и в конце ведь ее надо его корзить Поэтому у Меня, п грекспул.
Михаил Непряхин: Где он Там новый здесь мы закрываем в самый последний момент ну базу данные туда в конце закрывают
Михаил Непряхин: базан самое главное
Михаил Непряхин: и Я этот прыг с пул Я его Не использую Дальше в адаптерах а Я его Кладу в пакет транзакций то есть я инициативу транзакции
Михаил Непряхин: и смотрите у меня здесь синглтон то есть у меня тут, есть стоит то в этой библиотеке
Михаил Непряхин: то есть вот он пул это как бы указатель на пул коннекшенов
Михаил Непряхин: он находится только в Этой библиотеке транзакшн а вот в пакете транзакшн и соответственно у меня методы
Михаил Непряхин: от базы данных адапторная вот эти вот они умеют, работать и из транзакции все и без транзакции
Михаил Непряхин: и вопрос лишь в том а в контексте, есть транзакция или Нет
Михаил Непряхин: то есть смотреть чего откроет профайл ну Всегда, же у нас везде контекст пробрасывается Поэтому в контексте мы можем проббросить транзакцию
Михаил Непряхин: и для того чтобы выполнить запрос наш вот Я делаю трай экстракт те икс из Контекста то есть я пытаюсь достать транзакцию из контекста
Михаил Непряхин: если транзакция ну его здесь У Меня оказывается либо транзакция либо просто Чистый пул, коннекшнат
Михаил Непряхин: ну транзакции тоже конечно пул, ну просто надо было как назвать на Золота
Михаил Непряхин: и дальше выполняется егэ уже вот то Что оказывается, здесь а здесь оказывается интерфейс от игры Кьюти
Михаил Непряхин: и просто я достаю из контекста
Михаил Непряхин: транзакцию вот Она у меня, структура транзакции ну видите какой-то вот опять же вот вопрос был что Класть контекст ну вот транзакцию еще можно Класть контекст потому что в этом случае По-другому никак Не сделать
Михаил Непряхин: чтобы Так же удобно было и если, удалось достать из контекста транзакцию соответственно я эту транзакцию возвращаю
Михаил Непряхин: если, не, удалось то возвращается вот этот пул, коннекшенов который вот здесь в библиотеке вот он как стоит вот он здесь имеется
Михаил Непряхин: и возвращается вот интерфейс с этими тремя методами нашими любимыми и с которыми мы уже и делаем все остальные вещи
Михаил Непряхин: здесь еще в библиотеке есть флаг из юни тест для того чтобы можно было в юни тестах указать его и чтобы
Михаил Непряхин: а отключить чтобы оно не падала ну а и
Михаил Непряхин: потому что если этот флаг активен то
Михаил Непряхин: да тут это для Врата надо ну Сейчас посмотрим
Михаил Непряхин: вот и соответственно у Меня все Методы вот и они Всегда, пытаются из контекста достать эту транзакцию Если Получилось работать в транзакций Не получилась работа с обычным полом
Михаил Непряхин: ну и все как бы все методы видите они все универсальные когда Вы смотрите по Ним ну как бы
Михаил Непряхин: и непонятно же Там сразу акции Не работают ни транзакцией Поэтому они просто вот У меня вот этот интерфейс позгровый То Есть все методы они и транзакционные Если передан контекст в контекст транзакции и обычные Если там Транзакций. Нет
Михаил Непряхин: в скейсах это выглядит следующим образом вот Мы Создаем профиль значит хотим, сделать транзакцию
Михаил Непряхин: а Мы вот Берем функции, вот этот транзакшн раб
Михаил Непряхин: и То, что внутри нее Это будет все в транзакции
Михаил Непряхин: и соответственно вот Мы в транзакции хотим, создать профиль и создать свойства
Михаил Непряхин: Сперва в таблице, реально Создается таблица запись с профилем
Михаил Непряхин: а ну просто помечено Что транзакция незакомичена Дальше создается Еще в Другой Таблице Строка
Михаил Непряхин: и тоже помечено Что она Не закочена и эти обе строки получаются незакомиченные
Михаил Непряхин: и если ошибки здесь Не было то происходит комитет
Михаил Непряхин: а Внутри ну мы имеем и аа взять дело вначале бегин бегин я делаю
Михаил Непряхин: просто из обычного контекста да от пула а пул он вот здесь вот у Него стоит он он и Так есть
Михаил Непряхин: ээ я Делаю Беги Получаю Транзакцию ну Делаю ровбек Сразу же Всегда, уж неважно завершилась удачно незавершилась срок, как это произойдет
Михаил Непряхин: А дальше здесь Я Выполняю вот Эту функцию которую в аврапе Я Ей передал
Михаил Непряхин: а здесь это просто функция значит как объект Черного Класса, Принимается которая просто только контекст передается и возвращается ошибка
Михаил Непряхин: а и
Михаил Непряхин: как видите, вот это в кейсе вот эти два метода, вот они внутри Этой функции и передаются то есть я просто их передаю в функции это получается как замыкание
Михаил Непряхин: да и вот оно соответственно выполняется дальше я выполняю саму Вот эту функцию и эти два метода выполняются и камичу если. Все хорошо если ошибка здесь была
Михаил Непряхин: Я ее проверяю и если ошибка будет то я возвращаюсь и происходит роллбек и транзакции получается откатываются
Михаил Непряхин: значит это если Вы тут ни фига Не поняли
Михаил Непряхин: то это нормально потому Что это капец как сложно и Я вам это Сейчас Рассказал
Михаил Непряхин: просто чтобы хоть, что-то Примерно осталось
Михаил Непряхин: это Еще раз Мы Скорее, всего Коснемся и еще Поговорим Про это
Михаил Непряхин: но желательно Чтобы вы тут почитали код
Михаил Непряхин: именно вот то что связано с транзакциями
Михаил Непряхин: и попытались понять как оно работает
Михаил Непряхин: но благодаря этому у нас получается
Михаил Непряхин: Эээ не протекает ни как Возраст в наш из кейс вот отношусь к Есть да то Есть основная наша бизнес Войка
Михаил Непряхин: что Мы на вот от контролера Получили метод Этогошку,
Михаил Непряхин: создали профиль и дальше Мы Сохранили в базу
Михаил Непряхин: атамарно к ассистентно в транзакции в две таблицы Мы сохранили у нас это две разные таблицы таблицы прожили таблица Проперти вот оно здесь таблицы прошли таблицы Проперти сперва сюда сохранили потом сюда сохранили
Михаил Непряхин: проверили Что Ошибки. Нет и тогда Закомители и оно пометилось Что вот оно ассистент Атамарно значит сохранилось
Михаил Непряхин: и Мы видим визуально что это в транзакции находится
Михаил Непряхин: и Мы если, захотим убрать эту транзакцию Мы просто вот это убираем вот этот код
Михаил Непряхин: ну не одну, тот актер надо будет немножко. Поменять но оно Тоже будет работать ты видишь как бы оно работает универсально не Так и Так
Михаил Непряхин: Э просто в этом случае в Контексте Транзакции не будет и все как бы Ничего не произойдет а в этом случае в Контексте была транзакция
Михаил Непряхин: откуда она Там будет потому Что вот она здесь создалась транзакция и она Так
Михаил Непряхин: кого-то она в контекст положилась вот в этом месте Мы взяли на транзакцию и положили в контекст
Михаил Непряхин: в прошлый, Раз рассказывал про контекст о контексте сфелью и уже здесь в этом контексте есть транзакция
Михаил Непряхин: и вот этот контекст он уже Содержит. Транзакцию и вызывается вот эта функция
Михаил Непряхин: а вот эта функция когда вызовется вот там в транзаев Там, в Контексте уже Будет транзакция и вот этот весь, код Поэтому Будет происходить с транзакцией
Михаил Непряхин: а и так имплементировали ли вы
Михаил Непряхин: ээ в гол юниорк потом не знаю чего за патрум
Михаил Непряхин: могу сказать и если простыми словами шутят что-то заявив о форк
Михаил Непряхин: Или Можно читать ваш пример и есть если Вы Вкратце Объясните разойюнету форк
Михаил Непряхин: то ээ я не очень понимаю виторс да.
Илиас Эззахид: Гу голосом ну как я его понимаю то в целом есть а некого уж пример Что будет
Илиас Эззахид: э трандакцией делать а там оно и и
Илиас Эззахид: делать фасад для этого при этом.
Михаил Непряхин: Да да да да то есть идея в том чтобы абстрагироваться да Что У нас смотрите вот если мы Импорт и смотрим где импрорта доктора, его Нет
Михаил Непряхин: может он Есть где-нибудь здесь Есть импорт-дактора, Нет ли Им проте-дактора, понимаете потому что Мы А через интерфейс Работаем
Михаил Непряхин: и все и У нас Она как бы получается чистая Архитектура опять Же как бы Это как сказать
Михаил Непряхин: это Не чистая Архитектура Ради чистой архитектуры да просто Я вам показываю как Бы
Михаил Непряхин: флажки Которые указывают на то что вас хорошо
Михаил Непряхин: э построено приложение с Точки зрения инверсии зависимостей Что у вас этот лоу куплен хороший Что нету связи с адаптами от такого то Что у вас вся связь Она только через интерфейс
Михаил Непряхин: и круто что вот как будет довольно таки малой кровью Мы можем это Один из вариантов то есть вы когда поработаете в жизни увидите может там Еще парочку. Примеров как это можно Делать но Он самый. Удачный
Михаил Непряхин: Он самый очень мало кода
Михаил Непряхин: и это очень изящное решение это мной написано Ни у кого, не украл. Здесь То Что Я видел. Мне не Нравилось То есть и
Михаил Непряхин: очень Хорошо выглядит Адаптация опять Же мало кода все что Я Видел. На Ютубе У коллег
Михаил Непряхин: такую Порнографию устраивают из этого для того чтобы Это как-то можно было
Михаил Непряхин: отдельно работать либо еще разные Методы Делают, вот метод для транзакции метод для Транзакций, короче Ммм этот подход он прям вот классный что он очень простой
Михаил Непряхин: а вот и вы такую вот берете и транзакцию получаете вот так вот абстрактно он очень круто
Михаил Непряхин: так давайте, Еще Вопросы, есть Давайте
Михаил Непряхин: это все для того чтобы много кода Не писать
Михаил Непряхин: Нет Это все для того чтобы получить абстрактные кирпичики развод кирпичик второй кирпичик
Михаил Непряхин: Но дело в том Что он вот нужна Абстракция над кирпичиками
Михаил Непряхин: вы просто бах добавляете сверху абстракцию и получается хорошо читаемый Кот и понятно, Что Он делает
Михаил Непряхин: и вопрос Даже Не в том Что мы мало коды Пишем А в том Что Он ну Он ремонтопригодный
Михаил Непряхин: Он легко изменяемый он легко переносимый и это
Михаил Непряхин: но гораздо важнее чем То Что он малословный ну условно тоже хорошо как бы Что не Так много места занимает ну как там Работать ошибку надо тут возвра, сделать все равно как бы какой-то Код есть а просто, Альтернативный Же какой вариант это пришлось бы тогда
Михаил Непряхин: оба эти хадаптера делать и и сюда бы вы Передали и профайл и Проперти
Михаил Непряхин: а ну Не знаю там ты икс как мне дальше что-то в транзакции, тут конечно эта штука уже была бы Не, нужна вот это было бы вот Так вот
Михаил Непряхин: ведь это еще ну меньше да как будто бы
Михаил Непряхин: мммм меньше года Мы написали но смотрите Что Мы тогда сделали Мы взяли и делегировали значит адапты ро
Михаил Непряхин: сделать нам транзакцию над этими двумя докторами ну Не с авторами а с двумя таблицами но
Михаил Непряхин: Мы потеряли ремонтопригодность Мы соединили Эти две операции а может быть они нам когда нибудь в отдельности понадобятся, ну может и нет но нам вдруг да
Михаил Непряхин: и мы поручили как бы
Михаил Непряхин: Мы Убрали часть логики Видите все таки Мы делаем два Сетевых Похода да то Есть как бы Ну, какие то Мы где вам два две осмысленные операции Мы Создаем две таблицы
Михаил Непряхин: и Мы тут ее скрыли за одной функцией и это все делает адаптор как бы это отдали на Отку по автору Гораздо круче когда Мы это делаем У себя в логике
Михаил Непряхин: и Мы имеем два отдельных кирпичика независимые а если Мы захотим сделать транзак или что-то еще
Михаил Непряхин: мы взяли и добавили Две строки и все продолжают работать
Михаил Непряхин: а если бы это была одна функция то Нам пришлось Бы Делать изменения Там
Михаил Непряхин: и Мы скрыли От Читателя Какую То важную Информацию Что, делает наша Ручка а здесь Мы Видим, все как на ладони Мы делаем Небольшие, атомарные
Михаил Непряхин: аа изменения Мы работаем с конкретными кирпичиками и Это все просто Читается оно Ремонтопригодно оно легко переиспользоваться Оно не Связано Между Собой Оно имеет низкую связанность Оно имеет Правильную Инверсию зависимостей
Михаил Непряхин: и ну короче Я уже много всего сказал да Так
Михаил Непряхин: а поучаствовать с родителям. Также можно сделать ну да да с родителями так же можно сделать но просто
Михаил Непряхин: э с рэди сам ну много Еще где есть транзакций да но как бы в и пользуйтесь
Михаил Непряхин: ваш пример подакс нарянь ну да да можете брать в продакшн тащить и у вас работать
Михаил Непряхин: так вопрос про миграции если у нас большая таблица и мы знаем что эмиграции заблокируют таблицу Некоторое время Например три минуты как Избежать даунта приложения
Михаил Непряхин: ну это уже сложный вопрос то есть здесь тогда по-хорошему надо Иметь две таблицы разных
Михаил Непряхин: и чтобы не Было простое вы тогда должны накатить эти миграции в той базе данных
Михаил Непряхин: а потом переключить трафик на нее
Михаил Непряхин: и обновить вторую базу, данных да ну то Есть
Михаил Непряхин: если Прямо Так важны Эти три минуты простое Но Это правда Я Не видел чтобы Так заморачивались. Обычно просто. Делаются Самые Низкие Низкие Пиковые часы нагрузки Ну типа все равно У вас когда-нибудь есть
Михаил Непряхин: низко низкое время когда У вас мало запросов к приложению
Михаил Непряхин: и Не знаю в три часа Ночью в четыре часа в Утра
Михаил Непряхин: и Просто в это время вы встаете накатываете Эту Миграцию, и все У вас минимальный Простой ну как бы он все равно есть да но никто его не Заметит
Михаил Непряхин: если у вас прямо, вообще Круглые сутки большой нагрузки и не дай бог чтобы Там три минуты оно все зависело ну тогда решается Только двумя Базами поднимайте рядом вторую базу, и
Михаил Непряхин: и потом бесшевно переключаете ну еще и при этом льюте данные в обе базы чтобы у вас они чтобы данные были констентные он как бы я говорю я и ни Разу не Видел чтобы так заморачивались,
Михаил Непряхин: да или это даже это скорее даже не кэллнер а блюгрин типа когда у вас есть две среды ты скажи кораблю клин подход. Когда у вас есть
Михаил Непряхин: а в продакшене Всегда,
Михаил Непряхин: как сказать как и вы Имеете в продакшене Две версии ну и
Михаил Непряхин: одного и того Же просто одна Из них активна текущая Куда Льется трафик Но вторая она тоже боевая и вы просто в любой момент можете взять и переключить на нее и Она тоже будет работать и Поэтому вы можете очень быстро,
Михаил Непряхин: взять и переключить на вторую рабочую версию полную копию вашего приложения всего и базой всего остального если, вдруг оно не работает вы Раз быстро переключайтесь на другую соответственно здесь то же. Самое вы просто берете вторую версию вашего приложения Полностью все обновляете
Михаил Непряхин: и бесшумно переключайтесь но это если, вы Не Хотите даун тайма то вы должны платить За это,
Михаил Непряхин: памятью дисковым пространством, то есть как Бы только так надежность она обеспечивается За счет ресурсов
Михаил Непряхин: так смотрите давайте во-первых и
Михаил Непряхин: вот хотя бы на текущий момент но особенно, фронтейдеров интересуют поняли ли вы фронтейнеры что такой миграции.
dmitriy: Можно вопрос сразу помирать с Ним тогда,
dmitriy: ну так для укрепления больше а получается Миграция, у нас используется например, для какой-то инициативы базы например, пустой
dmitriy: и например, ну к примеру если у нас в таблице, добавляется новое поле какое-то это тоже миграция.
Михаил Непряхин: Да да да поле добавляется поле удаляется ну. Колонка да Колонка добавляется Колонка удаляется
Михаил Непряхин: и Индекс добавляется Эти индексы тоже индексы тоже делаются через. Эти миллионы Миграции
Михаил Непряхин: Сейчас найдем А нету тут индексов Ну, короче говоря индексы тоже накатываются через. Эмиграции А Ну, вик за приблизительно
Михаил Непряхин: вот Создание, индекса тоже, происходит в миграции вот Поэтому да как бы это по сути вот как бы
Михаил Непряхин: история такая вот что вообще какие изменения происходили с базой
Михаил Непряхин: ну как бы вопрос не про данные конкретно а именно вот про о поля по таблице
Михаил Непряхин: и давайте. Тогда Второй вопрос по транзакции вот то что я рассказываю про транзакцию и
Михаил Непряхин: ну это же какую то обратную связь близко к Мински все ли Окей
Михаил Непряхин: и Вопросы, в теме по теме может быть есть еще Ухода.
David R: Можно вопросик.
Михаил Непряхин: Давайте.
David R: Для Меня как для человека который пришел из бетона немного? Непривычного? В питоме я
David R: и Описывал всю структуру таблицы изначальную потом натравливал там олимпик например тот же самый аля мигратор натравливал на эту схему базы данных он не, создавал
David R: уже вот этот вот файл, Миграции потом я уже эти Миграции накатывал на базу, там их
David R: а тут получается изначальную полностью таблицу со всеми, его полями свойствами всем всем Мы сразу пишем в файл, миграции ручками Так лет.
Михаил Непряхин: Да да это так ну смотрите значит я встречал команды
Михаил Непряхин: а как бы вот смотреть в мигратор и это все равно же вот увы видно что Это что То такое сбоку То есть как Будто бы
Михаил Непряхин: а он не обязывает использовать Именно мигрейт и именно этот подход и я встречал джавистов Которые хорошо Знали инструмент
Михаил Непряхин: эээ вот то что вот вы сказали это тоже автоматизация до этого дела и у джавы есть а
Михаил Непряхин: че то странный джорджо мигрешин вот смотрите у них есть флай вей вот значит есть флай уэй
Михаил Непряхин: оон ну это прямо, Там комбайны То Есть Там Юай у них Есть То Есть
Михаил Непряхин: аа ну Или Флай Нет еще Есть аа на эу
Михаил Непряхин: лику и бейс еще если, к любой свод
Михаил Непряхин: вот он точно с Юаем вот и то Есть короче У Людей представляете как бы Есть два инструмента для миграции
Михаил Непряхин: и они в них хорошо Разбирались
Михаил Непряхин: они Там с Юаром с какой-то Автоматизацией и тогда, Ну они просто его и использовали то есть они ну знали этот инструмент и у них все Было с ним Окей
Михаил Непряхин: Поэтому
Михаил Непряхин: если Это ваш спецпроект наверное если вы знаете хорошо какой-то инструмент миграции вы просто берете его используете ученики, Проблем
Михаил Непряхин: вот если, вы приходите в Команду
Михаил Непряхин: Там Будет, Блин мигрейт ну почти Всегда и иногда будет гусь и
Михаил Непряхин: сиявай там другой там даже Не сияет по-моему просто Исхода, выполняется
Михаил Непряхин: и Поэтому ми играет как бы ну в любом случае вы с ними столкнетесь в работе. Ну а если вы не собираетесь работать то писать под проекты Используйте тот мигратор который знаете очень Без Проблем.
Илиас Эззахид: Можно Еще один вопрос за год.
Михаил Непряхин: Давайте.
Илиас Эззахид: А у вас был опыт, продакшн го писать Там в юфанкшн в миграции.
Михаил Непряхин: Еще раз какие фанкшн а.
Илиас Эззахид: Включи фанкшн миллион.
Михаил Непряхин: Это типа хранимые процедуры решимости.
Илиас Эззахид: Да и.
Михаил Непряхин: И и Ну, типа под запретом как бы считается что Это
Михаил Непряхин: Ну, размытие бизнес логики то есть понятно что иногда можно сделать суперкрутую Оптимизацию но я ни разу не встречал что бы это удалось кому То защитить и это было оправдано
Михаил Непряхин: типа просто как только на обсуждение выносится Задавать хранения процедуры союзам
Михаил Непряхин: все сразу. Короче как Будто. Бы какой-то Коллективный Негативный опыт есть У всех с этим и типа Нет никаких ранних Процедур Мы либо Думаем как Бы Это сделать заранее хранить так чтобы Не делали храмы процедуры
Михаил Непряхин: либо мы-то просто фронтами преображения делаем чтобы в бизнесе это Было видно ну, типа знаете можно сравнить хранимые Процедуры с мидом варами
Михаил Непряхин: как мидоувары скрывают от вас часть логики неявными неявными и и и
Михаил Непряхин: а по транзакции понятно, как работает контекст не очень понятно,
Михаил Непряхин: вот вот я вас скорее про это про контекст увидите там, и короче если, еще важно про транзакции и про контекст
Михаил Непряхин: если, вы попытаетесь разобраться Но не получится и надо Будет еще Эду объяснить скажите и можем прямо, порисовать
Михаил Непряхин: прям ну там, как-то еще более подробно потому что в целом контекст такая штука сложная а тут когда транзакция в контексте и между слоями она передается в контексте ну я согласен что, ни фига не просто
Михаил Непряхин: то понятно что, тут, все было чисто в общих чертах просто понимать Примерно как оно Устроено и все равно надо начинать изучение эсквеля а дальше уже возвращаются к этим примерам видите примеры, прямо, суперклассические, суперпростые суперпонятные вы хоть как Только начнете работать с базой данных и
Михаил Непряхин: такие детские ну вот прямо, вот
Михаил Непряхин: просто упрощено вылизано уже просто донельзя.
Михаил Непряхин: Все вотмут максимально просто так хочу простые команды кди федора джонни ну да
Михаил Непряхин: теперь взаимно специально ждал когда до этого рука дойдем да то есть Вот Сейчас уже прям обязательно крутите смотрите пробуйте запускаете делаете небольшие, изменения
Михаил Непряхин: а так. Про поговорить с программистами Прошлого Поколения они расскажут нужно сохранять бизнес Стройку ну Да-да-да может Быть Вот из-за этого какая-то память Поколения короче Храни мою процедуру от Него Сейчас, они прям к ним отношение какое то очень такое напряженное
Михаил Непряхин: вот и еще здесь вот про сидр тоже его можете у себя покрутить посмотреть вот эти штуки по изменять то Есть вот важно скорее просто попробовать поломать вот это все Так сломать так сломать посмотреть какие при этом будут ошибки
Михаил Непряхин: и получить представление и
Михаил Непряхин: работали с базой данных Если У вас до этого Не было То Это прямо, Реально сложно Так
Михаил Непряхин: а Ладно тогда все думали Что недолго получилось да
Михаил Непряхин: Баз данных просто в жизни целиковая тема и Она длинная большая
Михаил Непряхин: Так Ладно ну все тогда давайте до четверга сюда спасибо всем, пока.