Получи случайную криптовалюту за регистрацию!

IT каждый день

Логотип телеграм канала @it_everyday — IT каждый день I
Логотип телеграм канала @it_everyday — IT каждый день
Адрес канала: @it_everyday
Категории: Технологии
Язык: Русский
Количество подписчиков: 1.28K
Описание канала:

Официальная группа YouTube-канала «IT каждый день»
https://youtube.com/c/it_everyday
По вопросам сотрудничества: @kasatkin_v.
Группа ВК:
https://vk.com/it_everyday

Рейтинги и Отзывы

2.50

2 отзыва

Оценить канал it_everyday и оставить отзыв — могут только зарегестрированные пользователи. Все отзывы проходят модерацию.

5 звезд

0

4 звезд

1

3 звезд

0

2 звезд

0

1 звезд

1


Последние сообщения

2022-05-06 20:33:27 Прошло несколько лет, и лучшая библиотека для ботов на Python наконец-то обзавелась async-версией. Пока что pre-release. https://telegra.ph/Release-notes-for-python-telegram-bot-v200a0-05-06
616 views17:33
Открыть/Комментировать
2021-10-18 14:01:58 https://habr.com/ru/post/583902/
527 views11:01
Открыть/Комментировать
2021-09-02 12:31:26
521 views09:31
Открыть/Комментировать
2021-08-29 22:35:00
Мем с Пикабу, но смешно
199 views19:35
Открыть/Комментировать
2021-07-19 21:54:21 Работа в стартапе кипит, с момента прошлой публикации мы наняли двоих инженеров, у нас удвоилась нагрузка на сервис, и нужно нанимать дальше. Условия те же: уровень Senior Python, зп обсуждается. Можно попробовать Middle+, но шансов меньше. Резюме и вопросы…
378 views18:54
Открыть/Комментировать
2021-06-25 13:09:03 Минутка tech porn.

У нас огромная multi-tenant реляционная база данных. Таблицы по 200 ГБ - рехнуться, если честно. При этом для multi-tenant архитектуры мы юзаем самую тупую модель - "Pool" - это когда во все таблицы добавляется ключик "tenant_id". Модель неэффективная и тормозная, но зато простая в реализации и поддержке.

(кстати у AWS пролетал классный документ про дизайн multi-tenant систем, где разобраны все варианты, мастрид для всех CTO)

Все тормозило и заикалось. Клиенты бесились, сервера перегревались. Задачи типа "получить запись по ID" работали нормально, но вот любой список типа "непрочитанные письма за сегодня" в многотерабайтной базе начинает жестко тупить. Даже с правильными индексами. Один жирный клиент с дохреллионом записей притормаживает мелких клиентов, у которых данных совсем мало. Надо было что-то делать.

И тут нам пришло Великое Озарение [sarcasm], которое рано или поздно приходит любому DBA - о том, что основная работа всегда ведется с "верхушкой" данных. А огромный "long tail" всегда лежит мертвым грузом и нахуй не нужен юзается только в отчетах.

Первая мысль - надо сделать "вертикальный" партишенинг. Т.е. "старые" данные спихивать куда-то за горизонт (на отдельный диск или даже сервер), а "активные" данные держать где-то под рукой.

Мысль правильная, но нет.

Грамотный партишенинг - это оказалось сложно, долго, гемор и с первого раза не работает. Перефразируя известную поговорку про яхтинг, в жизни DBA есть два счастливых дня - день когда он настроил партишенинг, и день когда он его прибил. Ибо сервер все равно время от времени сканил партишены как попало и расследовать такие случаи довольно тяжело.

Я уже слышу крики из зала: "шардинг", "кликхаус", "разделяй OLTP и DWH и делай синк". И прочий оверинжиниринг. Сразу нет. У нас есть self-hosted версия, которая должна заводиться в один клик даже у домохозяек. Хотелось простой хак, который решит все проблемы одной строчкой.

И тут я случайно вспомнил про офигенный читкод - фильтрованные индексы. Ведь по умолчанию индекс делается по всей таблице. Но зачем, если можно индексировать только 0.1%?

В коде любого CRUD-приложения, в бизнес-логике всегда есть признак, который отличает "старые" данные от "новых". Ну типа "статус проекта = сдан". Или "статус заказа = обработан". И это условие уже есть в большинстве ваших SELECT'ов. В нашем случае это было "статус тикета = закрыт".

Что делает DBA-джун? Создает индекс по этой колонке. Чтобы, значит, поиск незакрытых тикетов был быстрым и классным.

CREATE INDEX myIndex
ON messages (processed)

Что делает прошаренный DBA-синьор? Создает еще и "filtered index" (в постгресе называется "partial index").

CREATE INDEX myIndex
ON messages (column1, column2...)
WHERE processed = 0 --вот так

В результате даже в многотерабайтной базе мы имеем маленький быстрый индекс всего в десятки мегабайт (!), который всегда показывает на самые последние данные. Как только данные перестают удовлетворять признаку - они из индекса улетают.

Когда мы прикрутили первый фильтрованный индекс и стали смотреть статистику использования, мы офонарели - сервер бросил все дела, и стал жадно его жрать. Приложение ускорилось в разы, нагрузка на проц снизилась на 80%. Посмотрите график - до и после внедрения только ОДНОГО пробного индекса.

Наш бд-сервер имеет всего 4 ядра и 32 гига памяти, при этом запросто тянет базу в несколько терабайт и сотни тысяч DAU. У нас в компании есть негласный челлендж - сколько можно протянуть на этом железе без апгрейдов? Уже годы держимся))

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

P.S. есть нюанс, кстати. Когда делаете filtered index, обязательно включайте фильтрованную колонку в "include". Так мы заставляем сервер поддерживать "статистику" по колонке. Без статистики все это великолепие работать не будет, сервер индекс не заметит.

CREATE INDEX myIndex
ON Messages (Column1, Column2...)
INCLUDE (Processed) --важно
WHERE Processed = 0
450 views10:09
Открыть/Комментировать
2021-06-16 16:07:47 Самый важный навык для любой профессии — это самостоятельность. Самостоятельно находить информацию, изучать её, отбраковывать лишнее, проверять и использовать.

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

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

И именно этот навык я бы посоветовал тренировать всем начинающим разработчикам. Это долго, сложно, но это окупается лучше всех остальных навыков.
365 views13:07
Открыть/Комментировать
2021-06-13 19:37:57 Ищу будущего коллегу В мою нынешнюю компанию нужен Senior Python Developer. Стек: Python, Django, Postgres, Celery — обязательно. Docker и AWS будут плюсом. Финтех. Удалёнка, общение преимущественно на английском. ЗП от 4k $. Резюме и вопросы кидать мне…
477 views16:37
Открыть/Комментировать
2021-06-08 23:57:12 https://habr.com/ru/post/561782/
601 views20:57
Открыть/Комментировать
2021-05-18 20:40:37 Наконец-то вакансия Junior Python разработчик Компания ThorSystems занимается автоматизацией бизнес-процессов на фреймворке Frappe.

Требования:
- Понимание работы REST API, JSON;
- Базовое понимание паттерна MVC, базовые знания Python, знание JS приветствуется;
- Умение запускать проекты в Docker;
- Системное мышление и дисциплина.

Условия:
- Удаленная работа;
- Оплата от 500₽ в час;
- Проектная занятость.

Для получения тестового задания напишите @dhmyf или на почту mail@liss.pro
601 viewsedited  17:40
Открыть/Комментировать