Первый конспект лекции с HighLoad был встречен позитивно, поэтому продолжаю.

Второй лекцией выбрал интересный материал, который нашел отклик как по конспекту, так и в зале. На мой взгляд, этот доклад может быть интересен всем, особенно начинающим специалистам.

В докладе затронуты вопросы:

  • Кем собственно мы хотим стать?
  • Надо-ли оно нам?
  • Теоретические навыки
  • Практические навыки (технические)
  • Практические навыки (нетехнические)

image

БД — вещь простая, а люди сложные, поэтому советы могут не всем подойти.

Сам следовал не всем советам.

Карта навыков сегодня (завтра может измениться):

image

Любой роли полезно иметь навыки из соседних областей.

Облака добавились недавно. В них добавляется зона ответственности по бюджетированию.

Надо ли оно нам?


  • Скучно точно не будет. БД — это интересно.
  • Пока есть данные, будут и базы. Они могут стать другими, но они точно будут.
  • DBA — как сантехник, но в тепле и за клавиатурой.

Получить хорошее профильное образование почти нельзя. Нет такого образования. Но есть ВУЗы, которые этому хорошо учат. Но выйдя из ВУЗа вы не станете спецом.

Нужно уметь быстро осваивать разные профессии.

Задачи, которые надо уметь быстро решать (экзамен в идеальном мире на dba):

  • На время починить базу (увиденную в первый раз). В чем проблема не понятно, но все «тормозит»
  • Экзаменаторов 10, а лучше 20-30
  • 3 спрашивают в slack «ну как»
  • Ещё трое по телефону
  • 1 требует залогировать время
  • 3 внедряют скрам прямо сейчас :) (минутка юмора)

Базовые требуемые знания (теория):


  • Реляционная алгебра (минимум, не более 40 часов на изучение)
  • B-tree в разных видах и формах (глубокие знания нужны только если стоит задача писать свою бд)

Хорошая вводная книга: Новиков, Домбровский, настройка приложений баз данных.

Суть: Субд — это Фреймворк, позволяющий работать с данными:
  • Универсально
  • Надежно
  • Производительно

(!) Как оно делает — нужно знать досконально.

Практические технические навыки (!) (Важно и обязательно)


  • Concurrency control
    • 2 phase locking
    • Deadlock detection
    • Multi version concurrency control

  • Recovery
    • Write ahead log
    • Redo
    • Undo

  • Distributed transactions
    • 2-фазный коммит
    • Distributed recovery


Читать минимум википедию. Лучше книжку — G. Weikum, G. Vossen, Tranactional Informatino Systems: Theory, Algorithms, and the Practice of Concurrencty Control and Recovery.
Если тяжело, в первый раз можно не читать про объекты и поисковые структуры. Потом перечитывать.

Подводные камни


  • Не путать 2pl и 2pc (двухфазовое блокирование и двухфазный коммит).
  • Не противопоставлять 2pl и mvcc.
  • Это пессимистические алгоритма шедулинга транзакций — они самые распространённые, но мир ими не ограничен.

Отвыкать читать книги и читать документацию. Хороших книг по практике мало, они редко и недолго up to date.

Как читать документацию?


Если хотя бы один раз прочитать документацию к каждому параметру конфига (например, postgresql.conf и тп), вы станете намного круче. Это касается любой БД.
Рекомендация завести себе тестовый сервер и экспериментировать, как влияют разные параметры.

Как решать проблемы


  • Cпокойно реагировать (keep calm!)
  • Ищем причину: do not tune the query / know your data! — думаем как устроен запрос, а не пытаемся решить «в лоб»
  • Учите (заранее) средства диагностики (top, iostat, perf и тп)
  • Пишите post mortem!

Практические нетехнические навыки:


  • Учитесь говорить, писать и читать по-русски и по-английски
  • Делайте доклады, учите коллег, выступайте на митапах, подавайтесь на Highload!
  • Учитесь общаться с девелоперами (и не только с ними)

Учитесь все это делать одновременно.

Комментарии (12)


  1. Hixon10
    12.11.2018 00:48
    +1

    Спасибо за конспект!

    Кстати, Илья вместе с ksdaemon сделали замечательный выпуск подкаста на эту же тему — sdcast.ksdaemon.ru/2018/11/sdcast-92


  1. gnus212
    12.11.2018 11:26

    Спасибо! Изложено хорошо!


  1. gotz
    12.11.2018 13:20

    Спасибо за конспект! Рекомендованной в посте книжки нет в продаже, а вот кто подскажет, насколько актуальна сейчас книга Дейта «SQL и реляционная теория. Как грамотно писать код на SQL»? Что вообще читать по базам в 2018?


    1. yushkevichv Автор
      12.11.2018 13:48

      Я гуглил в магазине по названию. Может быть есть переиздания. По своей ссылке увидел как минимум электронный вариант. Бумагу люблю больше, но электронная книга лучше, чем ничего.
      По актуальности не подскажу, но я больше просто бэкенд-разработчик. С базами сталкиваюсь, естественно, но не так часто (и много), как DBA.

      На доклад пошел, так как сам хочу подтянуть свои знания по БД. Ну и расширить кругозор.
      Наверно, будет более правильно попробовать привлечь к обсуждению hydrobiont


    1. hydrobiont
      12.11.2018 14:03
      +3

      Нет в продаже которой книжки? Вроде и та и та есть, Новиков-Домбровская имхо только электронная осталась.

      Книжка Дейта которую вы помянули — это хороший фундаментальный учебник, не очень понятно нужно-ли его читать — слишком оторвано от жизни и практически-важных особенностей разных бд. Это примерно как Кнут — великий учебник, не очень понятно зачем нужный практикующему профессионалу в 2018 году (при всей его крутости).

      Например аналогичные темы гораздо лучше охватывает вот такая книжка Маркуса Винанда


      1. gotz
        12.11.2018 14:34

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


    1. gsl23
      12.11.2018 16:28

      У разных БД разные литературные «классики») Например, каждый Ораклист знает кто такие Том Кайт и Джонатан Льюис) Думаю, правильней сразу искать литературу по нужной субд, общие аспекты там тоже рассмотрены, а дьявол он как обычно в деталях. Может вы вообще Nosql хотите)
      Кстати, название у статьи слишком общее — как минимум, не хватает слово реляционным, а иначе будут немного другие советы.


      1. yushkevichv Автор
        12.11.2018 16:30

        Название статьи сформировано по названию доклада.

        А какой из перечисленных пунктов, на ваш взгляд, не подходит для «не реляционных» баз? Посмотрел еще раз список. Глаз не зацепился.


        1. gsl23
          12.11.2018 16:50

          Ээмм… да как-бы плюс-минус все.
          Реляционная алгебра — без комментариев.
          Многие nosql не поддерживают ACID(или поддерживает частично), какие уж тут redo(aka wal), да undo.
          B-tree тоже скорей исключение для мира nosql, тут скорей актуальней hash table


          1. yushkevichv Автор
            12.11.2018 16:57

            Я с опаской буду комментировать. Мое мнение, что важно и нужно владеть технологиями на стыке. Для БД (по крайней мере сейчас) реляционные отношения (они же тоже разные бывают) являются некоторой основной и вокруг них строится многое. Возможно, нереляционные БД не используют всех возможностей. А многие вещи необходимо реализовывать на уровне приложения, а не БД. Но знать это необходимо, если мы говорим о твердом базисе.
            Иначе можно свести к «я только на ООП пишу код, поэтому про возможности других способов (функциональное, аспектное например) даже читать не буду». Вроде бы не верно это. Тема действительно холиварная, поэтому это исключительно мое IMHO.


      1. hydrobiont
        12.11.2018 16:35

        Это конспект доклада, понятное дело тут нет всех-всех деталей. В самом докладе я говорил что книжки по коммерческим базам данных это в некоторой степени исключение, особенно Оракл — у них не быстрый релиз цикл самой базы, они могут позволить себе актуальную книжку Кайта к новой версии или сразу после.

        не хватает слово реляционным, а иначе будут немного другие советы.


        Здесь я конечно немного рискую включить трольский режим, но чтобы стать спецом по бд, реляционные это необходимый минимум. Знание как реляционные работают хорошо помогает понять как работают все остальные, да и понять границы их применения тоже.