Ребята, классные новости 🙌
Нас добавили в ламповую папку с самыми годными телеграм-каналами про ИТ🐱
Внутри — технологии, ИИ, карьера в ИТ, полезные разборы и контент без воды.
Короче, всё, что хочется видеть в ленте, если вы в теме (или только хотите войти)
Тык 👉 https://news.1rj.ru/str/addlist/Tgpq6yK7iYMzNWRi — добавить папку себе
И пусть в ленте будет больше пользы и меньше случайного шума✨
❤️ Поделитесь с тем, кто тоже хочет прокачиваться в ИТ и читать только толковый контент
Нас добавили в ламповую папку с самыми годными телеграм-каналами про ИТ
Внутри — технологии, ИИ, карьера в ИТ, полезные разборы и контент без воды.
Короче, всё, что хочется видеть в ленте, если вы в теме (или только хотите войти)
Тык 👉 https://news.1rj.ru/str/addlist/Tgpq6yK7iYMzNWRi — добавить папку себе
И пусть в ленте будет больше пользы и меньше случайного шума
Please open Telegram to view this post
VIEW IN TELEGRAM
❤2
4666. При репликации «master-slave» в MySQL возникла проблема: на slave-сервере в некоторых таблицах появляются дубликаты записей по уникальному ключу, хотя на master-дублей нет. В чем наиболее вероятная причина?
Anonymous Quiz
3%
Недостаточно места на диске slave-сервера.
63%
AUTO_INCREMENT auto_increment_increment и auto_increment_offset в master-master репликации.
5%
Разные версии MySQL на master и slave.
28%
Асинхронная репликация и задержки между серверами.
👩🏫Объяснение:
Это очень конкретный и частый кейс при настройке репликации с автоинкрементными полями. Если топология не просто «master-slave», а «master-master» или «circular replication», и на обоих серверах могут писаться данные в одну таблицу, то без специальных настроек auto_increment_increment (шаг) и auto_increment_offset (смещение) оба сервера начнут генерировать одинаковые ID, что приведет к конфликтам и дубликатам на slave. Остальные варианты (A, C, D) к дубликатам по уникальному ключу обычно не приводят.
Если вы всё еще пишете весь код вручную — вы теряете время. Современные нейросети — это не просто «чат», это полноценный напарник (Pair Programmer).
Что ИИ делает лучше всего прямо сейчас:
Совет: Не бойтесь экспериментировать с разными моделями. Там, где GPT «галлюцинирует», Claude выдает чистейшую логику.
Будущее разработки — это умение эффективно управлять искусственным интеллектом. А наша подборка каналов поможет Вам в этом!
https://news.1rj.ru/str/addlist/kbnn_yWvqHsyODky
Please open Telegram to view this post
VIEW IN TELEGRAM
Telegram
ITech👾
Юлия invites you to add the folder “ITech👾”, which includes 29 chats.
❤1
4667. Вы проектируете систему для мультитенантного SaaS. Данные тысяч клиентов должны быть надежно изолированы. Какой подход к схеме БД обеспечит наилучший баланс между изоляцией, простотой обслуживания и эффективностью для среднего размера бизнеса?
Anonymous Quiz
36%
Отдельная схема (schema) в одной БД для каждого тенанта.
16%
Отдельная физическая база данных для каждого тенанта.
21%
Единая таблица для всех тенантов с колонкой tenant_id на каждой строке.
26%
Партиционирование одной большой таблицы по колонке tenant_id.
👩🏫Объяснение:
Отдельная схема в общей БД — классический и сбалансированный паттерн. Каждый тенант получает свои собственные таблицы в рамках своей схемы, что обеспечивает четкую логическую изоляцию и упрощает резервное копирование/восстановление данных для одного клиента. Это проще в администрировании, чем управление тысячами отдельных БД (B), и обеспечивает лучшую изоляцию и производительность, чем подход с единой таблицей (C), где ошибка в WHERE-условии может привести к утечке данных. Партиционирование (D) — это физическое разделение, но логически данные все еще в одной таблице, что не дает такой же чистоты изоляции.
4668. В ленте новостей социальной сети запрос для получения постов друзей, начал выполняться медленно, несмотря на индексы. Анализ показал, что СУБД тратит 95% времени на сортировку огромного промежуточного результата перед LIMIT. Как это можно оптимизи
Anonymous Quiz
8%
Создать более селективный индекс по post_date DESC.
57%
Создать составной индекс, который включает все поля для фильтрации и сортировки в нужном порядке.
3%
Увеличить значение LIMIT для более точного планирования запроса.
32%
Разбить запрос на два: сначала получить ID постов подзапросом, затем основную информацию.
👩🏫Объяснение:
Ключевая проблема — сортировка по неиндексированному полю post_date после объединения таблиц. LIMIT применяется уже после сортировки всей выборки. Правильный составной индекс (например, на (user_id, friend_id, post_date DESC)) позволит СУБД выполнить «index scan» в уже отсортированном порядке, сразу отбирая топ-20 записей без ресурсоемкой операции filesort. Простой индекс на post_date (A) не поможет, так как сортировка происходит после JOIN. Разбиение запроса (D) иногда помогает, но радикальное решение — предоставить СУБД индекс, который сразу возвращает данные в нужном порядке.
4669. Приложение для онлайн-тестирования должно записывать каждый ответ пользователя на вопрос. Транзакции частые, но не критичны к миллисекундной задержке. Как лучше управлять растущим объемом основной таблицы user_answers?
Anonymous Quiz
2%
Регулярно удалять старые данные (DELETE FROM ... WHERE created_at < ...).
69%
Использовать партиционирование таблицы по диапазону дат (например, по месяцам).
25%
Создать отдельную «историческую» БД и перемещать туда данные.
3%
Начать сжимать (COMPRESS) старые, редко используемые строки.
👩🏫Объяснение:
Партиционирование по диапазону — стандартное решение для управления жизненным циклом данных на основе времени. Оно позволяет:
* Быстро «отсекать» старые данные: удаление целой партиции (DROP PARTITION) — мгновенная операция, в отличие от тяжелого DELETE.
* Улучшать производительность запросов по актуальным данным: оптимизатор может читать только нужные партиции (партициональная прунинг).
* Упрощать архивацию: целую партицию можно выгрузить в архивный файл.
Удаление (A) нагружает БД и приводит к фрагментации. Отдельная БД (C) усложняет архитектуру. Сжатие строк (D) обычно встроено в СУБД и не решает проблему управления таблицей.
* Быстро «отсекать» старые данные: удаление целой партиции (DROP PARTITION) — мгновенная операция, в отличие от тяжелого DELETE.
* Улучшать производительность запросов по актуальным данным: оптимизатор может читать только нужные партиции (партициональная прунинг).
* Упрощать архивацию: целую партицию можно выгрузить в архивный файл.
Удаление (A) нагружает БД и приводит к фрагментации. Отдельная БД (C) усложняет архитектуру. Сжатие строк (D) обычно встроено в СУБД и не решает проблему управления таблицей.
4671. Для отчета необходимо быстро подсчитать общее количество уникальных активных пользователей за каждый день последнего месяца. Таблица user_sessions огромна. Какой индекс создаст максимально быстрый и компактный план запроса ?
Anonymous Quiz
3%
Индекс на (date).
34%
Индекс на (user_id, date).
43%
Индекс на (date, user_id).
20%
Отдельные индексы на date и на user_id.
👩🏫Объяснение:
Составной индекс (date, user_id) является покрывающим (covering) для этого конкретного запроса. В данном порядке:
1. date находится в начале, что позволяет эффективно отфильтровать данные по диапазону (WHERE).
2. user_id следует сразу за date, поэтому данные для каждой даты уже сгруппированы по user_id в индексе. Это позволяет СУБД выполнить «loose index scan» или, как минимум, читать только индекс (без обращения к таблице), быстро подсчитывая уникальных user_id для каждой даты. Индекс (user_id, date) (B) будет бесполезен для фильтрации по дате, а отдельные индексы (D) не обеспечат нужной группировки.
1. date находится в начале, что позволяет эффективно отфильтровать данные по диапазону (WHERE).
2. user_id следует сразу за date, поэтому данные для каждой даты уже сгруппированы по user_id в индексе. Это позволяет СУБД выполнить «loose index scan» или, как минимум, читать только индекс (без обращения к таблице), быстро подсчитывая уникальных user_id для каждой даты. Индекс (user_id, date) (B) будет бесполезен для фильтрации по дате, а отдельные индексы (D) не обеспечат нужной группировки.
4672. В унаследованной системе была таблица с полем category_id. Решили внедрить многоуровневую иерархию категорий. Как лучше расширить модель, чтобы эффективно отвечать на запросы «найти все товары в категории X и всех ее подкатегориях любого уровня»?
Anonymous Quiz
56%
Добавить рекурсивную связь: в таблицу categories добавить parent_id.
31%
Ввести дополнительную таблицу category_closure, которая хранит все пути в иерархии.
12%
Хранить путь (path) в виде строки с разделителями в самой категории, например, "1.5.12".
2%
Ограничиться фиксированной глубиной и добавить parent_id, grandparent_id и т.д.
👩🏫Объяснение:
Для работы с иерархическими данными произвольной глубины (деревьями) паттерн Closure Table (таблица замыканий) является одним из наиболее эффективных и универсальных. Таблица хранит все пары «предок-потомок», включая транзитивные связи. Это позволяет одним простым JOIN найти всех потомков категории, без рекурсивных запросов (которые могут быть медленными, вариант A) и без сложных строковых операций LIKE (вариант C). Вариант D не масштабируется и хрупок. Closure Table — это компромисс, позволяющий очень быстро читать иерархию ценой увеличения объема служебных данных и некоторой сложности при модификации дерева.