Что я узнал и создал во время летней стажировки в Cozy.

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

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

Я получаю степень бакалавра компьютерных наук в Портлендском государственном университете. Школьный консультант посоветовал мне подать заявку на стажировку через ELI. Несмотря на то, что шансы попасть на ограниченное количество стажировок казались невысокими, я все равно подала заявку. После серии групповых интервью с ELI, затем индивидуальных интервью и технических собеседований в портлендских компаниях, связанных с ELI, я приземлился в Cozy; одна из ведущих технологических компаний Портленда по данным ELI.

«Чем вы хотите пройти стажировку?» - спросил Роб, технический директор Cozy и мой летний менеджер. Меня удивил его вопрос. Я ожидал, что мне скажут, чем я буду заниматься, что было стандартом на других работах и ​​в школе.

Мы пришли к соглашению, что я буду работать над серверной разработкой программного обеспечения с упором на оптимизацию запросов PostgreSQL Cozy. Эта работа направлена ​​на ускорение работы веб-сайта Cosy. Я выбрал эту задачу, потому что, независимо от различных типов баз данных SQL, язык не слишком сильно меняется, и я могу рассчитывать на то, что каждая установленная система будет иметь медленные / проблемные запросы.

Работа, которую я сделал

Позвольте мне рассказать вам об этом процессе. Всякий раз, когда вы находитесь на веб-сайте Cozy, щелкая по нему, эти щелчки генерируют запросы (точные запросы информации) с сервера, а часто также и из базы данных. Это называется «запрос». В зависимости от того, как написан код, запрос может возвращать информацию относительно быстро или медленно. Моя работа заключалась в том, чтобы найти в коде, откуда генерируются эти медленные запросы, и исправить их.

Медленный запрос подобен окольному вопросу и получению длинного, растянутого и окольного ответа; на экстраполяцию важной информации из ответа уйдет много времени. Быстрый запрос - это как если бы вы задали простой и точный вопрос и получили ответ на свой вопрос без всякой чепухи.

Не вдаваясь в подробности, вот шаги, которые я предпринял, чтобы определить, это шаги, которые я предпринял, чтобы определить, можно ли исправить рассматриваемые запросы (что, к сожалению, не все из них).

Шаг 1. Найдите инструмент для определения медленных запросов. Сначала я использовал pgBadger, который извлекает из postgres.log. Журнал создается базой данных Postgres. Однако, если у вас есть база данных Postgres, я рекомендую вам настроить таблицу pg_stat_statements на своем сервере и использовать мое приложение pgPerformance, которое я разработал в конце моей стажировки. Подробнее об этом позже.

Шаг 2. Ищите медленные запросы. Мы искали отдельные запросы, выполнение которых занимает больше секунды, но если были повторяющиеся запросы, выполнение которых занимало больше миллисекунды, мы также проанализировали их.

Шаг 3: Выполните explain analyze по запросу. В psql (не используйте pgcli, интервал испортит следующий шаг) введите explain analyze <your query here>; и возьмите объяснение, которое распечатывается. Это объяснение даст вам разбивку того, на что ваша база данных тратит свое время.

Шаг 4: Вставьте объяснение в объяснение.despesz.com и проанализируйте результаты. Обратите внимание на эксклюзивную колонку. Когда в этом столбце много числа, вы знаете, что эту часть запроса нужно ускорить. Иногда отсутствует конкретная часть с высоким эксклюзивным числом, и в этом случае важно понимать, какие типы поиска являются медленными (например, последовательный поиск, частичные выборки) и как их ускорить.

Шаг 5. Исправьте проблемный запрос. Это может означать что-то столь же простое, как добавление индекса, но вы должны быть готовы переписать SQL-запрос.

Шаг 6. Сравните скорость вашего нового запроса со скоростью исходного запроса, используя тот же процесс, что и на шаге 3. Если вы добавили индекс, вы просто повторно запустите исходный запрос. Обязательно выполните запрос дважды. Первый запуск обычно медленный, и мы хотим узнать кэшированную скорость.

Примечание. В том случае, если скорость не улучшилась, вы можете застрять на том, что вы получили из исходного запроса. Это может означать, что необходимо будет перестроить архитектуру или общую структуру кода. Если вы видите значительное увеличение скорости, переходите к шагу 7.

Шаг 7. Преобразуйте запрос из SQL в код, соответствующий вашей системе. Cozy использует язык программирования Ruby и гем Sequel (библиотека кода Ruby) для взаимодействия с сервером Postgres из Ruby.

Какой самый сложный вопрос я решил? Запросы, которые не удалось решить. Я работал, работал и работал, только для того, чтобы обнаруживать, что некоторые вопросы просто невозможно решить. Как только я это понял, мне захотелось поработать над чем-то новым. И этой новой блестящей штукой стала pgPerformance.

Я создал pgPerformance, приложение с открытым исходным кодом, разработанное специально для настольных компьютеров и мобильных устройств. Он дает вам таблицы ваших самых медленных запросов Postgres с указанием среднего времени, общего времени, наиболее частых, активных запросов и длительных запросов (более одной секунды). После установки он дает вам живые результаты каждый раз, когда вы запускаете приложение. Вы можете найти его на моем GitHub: https://github.com/aleenawatson/pg_performance.

В Cozy pgPerformance использовался, чтобы убедиться, что мы можем видеть узкие места и вещи, которые можно исправить в Postgres, что в конечном итоге ускоряет работу веб-приложения Cozy.

Создав pgPerformance, я изучил HTML, CSS и jQuery, и на протяжении всей стажировки я изучал SQL, Postgres и даже немного Ruby - все то, о чем я ничего не знал до стажировки.

Уважаемый как равный

В один из моих первых дней в Cozy, Джошуа, инженер-программист, сказал мне: «Знай, что ты можешь это получить. На работе вас могут уважать и выслушивать. И если вы этого не понимаете, знайте, что есть лучшие варианты. Вам не нужно соглашаться ни на что меньшее, чем то, что вы заслуживаете, что на самом деле является обычным уважением ".

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

В Cozy меня уважали как еще одного разработчика, независимо от моего опыта. Я ни разу не чувствовал себя «просто стажером». Я думаю, что этот уровень уважения и тот факт, что я работал с таким количеством вдохновляющих, талантливых людей, помогли мне многому научиться и добиться многого за такой небольшой промежуток времени.

Около трети людей Cozy - женщины, что меня, честно говоря, удивило. В школе я одна из немногих женщин в каждой когорте компьютерных наук; женщины в моих классах обычно составляют 10% или меньше людей в классе. И вся причина, по которой я проходила стажировку в ELI, заключалась в том, что я хотел привлечь внимание к тому факту, что нам нужно больше женщин и недостаточно представленных групп в сфере технологий, что находит отклик у меня.

Работа в Cozy заставила меня почувствовать, что я приобрела племя женщин-технологов, к которым теперь ищу вдохновение. То, что сказал Джошуа, изменило мою точку зрения и помогло мне задать больше вопросов. Я планирую сохранить это впечатление уважения и внимания на протяжении всей моей карьеры в качестве женщины в области компьютерных наук и технологий.

Одной из моих самых важных целей на лето было выяснить, была ли техническая индустрия тем, к чему я чувствовал себя принадлежащим. Перед завершением моей первой недели в Cozy я без сомнения осознал, что техника - это то, что мне нужно. Страсть к информатике, которую я испытывал в школе, была не случайностью, а чем-то, что преобладало на рабочем месте.

Я с нетерпением жду своей будущей профессиональной карьеры, и в большой степени я хочу поблагодарить Cozy и ELI за эту перспективу. Огромное спасибо и привет всем Уютным за возможность найти это волнение, а также за уверенность и уверенность в продолжении моего пути в профессиональный мир технологий.

Автор Aleena Watson. Первоначально опубликовано на сайте cosy.co.