ar
Feedback
Базы данных_BE1

Базы данных_BE1

الذهاب إلى القناة على Telegram

Канал по по различным базам данных, полезный и интересный контент для всех уровней. По вопросам сотрудничества @cyberJohnny

إظهار المزيد
189
المشتركون
لا توجد بيانات24 ساعات
لا توجد بيانات7 أيام
-730 أيام
أرشيف المشاركات
SQLZoo — это полная база по SQL, MySQL, PostgreSQL и самым популярным базам данных: крутые запросы под любые задачи, топовые функции, транзакции и даже лайфхаки интеграции с популярными языками программирования. — Тысячи практических кейсов всех уровней сложности — от полного нуба до уровня смешарика. — Пошаговая прокачка к сертификации, чтобы официально доказать, что ты реально шаришь в базах данных. Забираем (https://sqlzoo.net/wiki/SQL_Tutorial) @bzd_be1

🦀 Новый SQL-клиент на Rust — rsql Лёгкий, быстрый и мощный инструмент для работы с файлами и базами данных из терминала. 📌 Что умеет ● Поддержка множества форматов: CSV, JSON, Parquet, Excel, XML, YAML, Avro и др. ● Подключение к SQLite, PostgreSQL, MySQL, SQL Server, DuckDB, Snowflake, CrateDB и даже DynamoDB ● Работа с архивами: Gzip, Zstd, Brotli, LZ4, Bzip2 и др. ● Удобная CLI: автодополнение, подсветка, история, интерактивный REPL ● Вывод в разных форматах: Markdown, HTML, JSON, CSV, plaintext ● 100 % безопасный Rust-код — `#![forbid(unsafe_code)]` ● Кастомизация: Vi/Emacs режимы, локализации, собственные темы вывода 📥 Установка ``` curl -LsSf https://raw.githubusercontent.com/theseus-rs/rsql/main/install.sh | sh ``` 🧪 Пример использования ``` # Одноразовый запрос к SQLite rsql —url "sqlite://file.db" — "SELECT * FROM users LIMIT 5;" # Интерактивная сессия с PostgreSQL rsql —url "postgres://user:pass@localhost/db" ``` 🆕 Что нового в v0.19.0 Добавлены драйверы CrateDB и FlightSQL Появился metadata-catalog для удобной навигации по источникам данных Улучшены примеры, обновлены зависимости, повышена стабильность 🔗 GitHub: https://github.com/theseus-rs/rsql rsql — универсальный инструмент, который понравится аналитикам, разработчикам и data-инженерам, нуждающимся в максимально быстром и простом SQL-клиенте. @bzd_be1

🖥 PgAssistant — это бесплатное open-source решение для помощи разработчикам и DBA в понимании, анализе и оптимизации производительности PostgreSQL-баз данных 🔧 Основные функции - Анализ поведения БД: разбирает использование pg_stat_statements и выявляет «горячие» запросы - Оптимизация схемы: помогает исправлять проблемы структуры таблиц и индексов - Библиотека запросов: хранит часто используемые SQL-запросы в JSON‑файле (например myqueries.json) Linting SQL: встроенный Python‑Sqlfluff для проверки стиля и синтаксиса - OpenAI/LLM‑помощь: при наличии API-ключа к OpenAI, Ollama или другому LLM вы можете автоматически улучшать запросы и планы выполнения - Экспорт DDL: получает DDL через pg_dump для анализа через LLM - Автоматизация параметров: использует pgtune и Docker‑compose для настройки ALTER SYSTEM и генерации конфигураций github.com .- Запуск через Docker или Flask: легко стартовать локально или в контейнере . 💡 Как начать? - Убедитесь, что установлен модуль pg_stat_statements. - Вы можете сразу запустить готовым Docker-образом. - Вариант без Docker — через Python/Flask. - При наличии LLM‑ключа — подключите OpenAI, Ollama и т.д. - Настройте свою коллекцию запросов в myqueries.json. - Используйте анализ, lint, советы по индексам и конфигам! pgAssistant — мощный инструмент для анализа и оптимизации PostgreSQL. Он сочетает детерминированные проверки и интеллектуальные подсказки LLM, и отлично подойдёт как разработчикам, так и начинающим администраторам баз данных. Если нужно — могу помочь с примерами использования, настройкой LLM или запуском через Docker/Flask. Репозиторий (https://github.com/nexsol-technologies/pgassistant) на GitHub насчитывает более 1 300+ ⭐ и активно развивается . 📌 Github (https://github.com/nexsol-technologies/pgassistant) @bzd_be1

🖥 py-pglite — PostgreSQL без установки, тестируй как с SQLite! py-pglite — обёртка PGlite для Python, позволяющая запускать настоящую базу PostgreSQL прямо при тестах. Без Docker, без настройки — просто импортируй и работай. 📌 Почему это круто: - 🧪 Ноль конфигурации: никакого Postgres и Docker, только Python - ⚡ Молниеносный старт: 2–3 с против 30–60 с на традиционные подходы :contentReference[oaicite:2]{index=2} - 🔐 Изолированные базы: новая база для каждого теста — чисто и безопасно - 🏗️ Реальный Postgres: работает с JSONB, массивами, оконными функциями - 🔌 Совместимость: SQLAlchemy, Django, psycopg, asyncpg — любая связка :contentReference[oaicite:3]{index=3} 💡 Примеры установки: ``` pip install py-pglite pip install py-pglite[sqlalchemy] # SQLAlchemy/SQLModel pip install py-pglite[django] # Django + pytest-django pip install py-pglite[asyncpg] # Асинхронный клиент pip install py-pglite[all] # Всё сразу ``` 🔧 Пример (SQLAlchemy) ``` python def test_sqlalchemy_just_works(pglite_session): user = User(name="Alice") pglite_session.add(user) pglite_session.commit() assert user.id is not None ``` py‑pglite — идеальный инструмент для unit- и интеграционных тестов, где нужен настоящий Postgres, но без всей админской рутины. Полноценный PostgreSQL — без его тяжеловесности. ▪Github (https://github.com/wey-gu/py-pglite) #python #sql #PostgreSQL #opensource @bzd_be1

🖥 Database Build (https://database.build/) — база данных в 1 клик Просто напиши: *«Создай базу для пиццерии»* — и получишь готовую структуру: таблицы, связи, ER-диаграмму. 🛠 Что можно дальше: • Редактировать таблицы • Сгенерировать тестовые данные • Экспортировать в SQL • Задеплоить в Supabase (AWS — скоро) https://database.build/ (https://database.build/) @bzd_be1

🦆 Как использовать DuckDB с Python: практическое руководство по аналитике DuckDB — это современная in-process аналитическая СУБД, разработанная как “SQLite для аналитики”. Она идеально подходит для обработки больших объёмов данных на локальной машине без необходимости поднимать сервер или использовать тяжёлые хранилища. 📦 Что делает DuckDB особенной? - Работает как библиотека внутри Python (через `duckdb`) - Поддерживает SQL-запросы напрямую к pandas DataFrame, CSV, Parquet, Arrow и другим источникам - Оптимизирована под аналитические запросы: агрегации, группировки, фильтрации - Мгновенно работает с большими файлами без предварительной загрузки 🧪 Пример рабочего сценария: 1️⃣ Чтение и анализ Parquet-файла: ``` import duckdb duckdb.sql("SELECT COUNT(*), AVG(price) FROM 'data.parquet'") ``` 2️⃣ Интеграция с pandas: ``` import pandas as pd df = pd.read_csv("data.csv") result = duckdb.sql("SELECT category, AVG(value) FROM df GROUP BY category").df() ``` 3️⃣ Объединение нескольких источников: ``` duckdb.sql(""" SELECT a.user_id, b.event_time FROM 'users.parquet' a JOIN read_csv('events.csv') b ON a.user_id = b.user_id """) ``` 🧠 Почему это важно: - 📊 Вы можете использовать SQL и pandas одновременно - 🚀 DuckDB быстрее pandas в большинстве аналитических задач, особенно на больших данных - 🧩 Поддержка стандартов данных (Parquet, Arrow) даёт нативную интеграцию с экосистемой Data Science - 🔧 Не требует настройки: просто установите через `pip install duckdb` 🎯 Применения: - Локальный анализ данных (до десятков ГБ) — без Spark - Объединение таблиц из разных форматов (Parquet + CSV + DataFrame) - Прототипирование ETL-пайплайнов и построение дашбордов - Быстрая агрегация и отчёты по логам, BI-данным, IoT-стримам и пр. 📌 Советы: - Используйте `read_parquet`, `read_csv_auto` и `from_df()` для гибкой загрузки данных - Результаты запросов можно конвертировать обратно в pandas через `.df()` - DuckDB поддерживает оконные функции, `GROUP BY`, `JOIN`, `UNION`, `LIMIT`, подзапросы и многое другое — это полноценный SQL-движок 🔗 Подробный гайд: https://www.kdnuggets.com/integrating-duckdb-python-an-analytics-guide #DuckDB #Python #DataScience #Analytics #SQL #Pandas #Parquet #BigData @bzd_be1

Задачка по нашей базе данных, которая находится в шапке канала. Код генерации базы данных и INSERT данных по ссылке ТУТ. ВОПР
Задачка по нашей базе данных, которая находится в шапке канала. Код генерации базы данных и INSERT данных по ссылке ТУТ. ВОПРОС: Что обеспечивает внешний ключ FOREIGN KEY (category_id) REFERENCES category(category_id) в таблице product? Ответ под спойлером, но если хотите сперва проверить свою догадку, следующим постом опубликуем тест с вариантами ответов. Правильный ответ: Целостность данных между таблицами product и category. @bzd_be1

🚀 Вышел стабильный релиз (https://mariadb.com/kb/en/mariadb-11-4-2-release-notes/) MariaDB 11.8.2 — первая стабильная версия новой ветки с долгосрочной поддержкой (LTS, 5 лет). Также доступен предварительный релиз MariaDB 12.0.1. 🔹 Что нового в 11.8 по сравнению с предыдущим LTS 11.4: 🧠 Векторный поиск Добавлены возможности из проекта *MariaDB (https://vk.com/club57234139) Vector*: • Новый тип данных `VECTOR` • Функции для сравнения векторов: `VEC_DISTANCE_EUCLIDEAN()`, `VEC_DISTANCE_COSINE()`, `VEC_DISTANCE()` • Поддержка SIMD-ускорений: AVX2/AVX512, ARM, Power10 • Производительность векторных запросов выше Redis, pgvector, qdrant и weaviate 🧭 Поддержка времени до 2106 года Решена проблема 2038 — TIMESTAMP теперь работает до 2106 года 🌍 Новая кодировка и локаль По умолчанию теперь `utf8mb4`, полная поддержка emoji Обновлены правила сортировки (Collation) до UCA 14.0.0 🔐 Новый механизм аутентификации: PARSEC • PBKDF2 + ed25519 • Безопасная верификация пароля 💾 Многопоточность в дампе и импорте • `mariadb-dump` и `mariadb-import` теперь используют многопоточность • Поддержка резервного копирования как одной, так и нескольких БД 📈 Ускоренная репликация • Новый механизм binlog-сегментации • Асинхронный rollback после сбоев • Параметр `slave_replication_delay_abort_timeout` для отмены "зависших" транзакций 🛠️ Новые фичи и команды • Таблица `USERS` для контроля доступа • Команды `FLUSH GLOBAL STATUS`, `REPAIR TABLE ... FORCE`, `SHOW CREATE SERVER` • Возврат значений типа `ROW` из хранимых процедур • Поддержка Oracle-подобных SEQUENCE • Функции `UUID_v4`, `UUID_v7` • `FORMAT_BYTES(1000000000)` = `953.67 MiB` • Ограничения на размер временных файлов (`max_tmp_session_space_usage`, `max_tmp_total_space_usage`) ⚙️ Оптимизации • Ускоренные `UPDATE/DELETE`, `SUBSTR(...) = const` • Улучшена работа с виртуальными столбцами • Авто-оптимизация кодировок 💡 Контекст MariaDB — форк MySQL, с дополнительными хранилищами и расширенными возможностями, не зависящий от Oracle. Используется в RHEL, SUSE, Fedora, Debian, Arch и проектах вроде Wikipedia и Google Cloud SQL. 📌 Если вы работаете с векторным поиском, большими БД или вам важно долгосрочное сопровождение — MariaDB 11.8 теперь must-have. https://mariadb.com/kb/en/mariadb-11-4-2-release-notes/ @bzd_be1

🔢 PGVector: векторный поиск прямо в PostgreSQL — гайд Если ты работаешь с embedding'ами (OpenAI, HuggingFace, LLMs) и хочешь делать семантический поиск в SQL — тебе нужен `pgvector`. Это расширение позволяет сохранять и сравнивать векторы прямо внутри PostgreSQL. 📦 Установка PGVector (Linux) ``` git clone —branch v0.8.0 https://github.com/pgvector/pgvector.git cd pgvector make sudo make install ``` Или просто: • macOS: `brew install pgvector` • Docker: `pgvector/pgvector:pg17` • PostgreSQL 13+ (через APT/YUM) 🔌 Подключение расширения в базе ``` CREATE EXTENSION vector; ``` После этого ты можешь использовать новый тип данных `vector`. 🧱 Пример использования Создаём таблицу: ``` CREATE TABLE items ( id bigserial PRIMARY KEY, embedding vector(3) ); ``` Добавляем данные: ``` INSERT INTO items (embedding) VALUES ('[1,2,3]'), ('[4,5,6]'); ``` Поиск ближайшего вектора: ``` SELECT * FROM items ORDER BY embedding <-> '[3,1,2]' LIMIT 5; ``` 🧠 Операторы сравнения PGVector поддерживает несколько видов расстояний между векторами: - `<->` — L2 (евклидово расстояние) - `<#>` — скалярное произведение - `<=>` — косинусное расстояние - `<+>` — Manhattan (L1) - `<~>` — Хэммингово расстояние (для битовых векторов) - `<%>` — Жаккар (для битовых векторов) Также можно усреднять вектора: ``` SELECT AVG(embedding) FROM items; ``` 🚀 Индексация для быстрого поиска HNSW (лучшее качество): ``` CREATE INDEX ON items USING hnsw (embedding vector_l2_ops); ``` Параметры можно настраивать: ``` SET hnsw.ef_search = 40; ``` #### IVFFlat (быстрее создаётся, но чуть менее точный): ``` CREATE INDEX ON items USING ivfflat (embedding vector_l2_ops) WITH (lists = 100); SET ivfflat.probes = 10; ``` 🔍 Проверка версии и обновление ``` SELECT extversion FROM pg_extension WHERE extname='vector'; ALTER EXTENSION vector UPDATE; ``` 📌 Особенности - Работает с PostgreSQL 13+ - Поддержка до 2000 измерений - Расширяемый синтаксис - Можно использовать `DISTINCT`, `JOIN`, `GROUP BY`, `ORDER BY` и агрегации - Подходит для RAG-пайплайнов, NLP и встраивания LLM-поиска в обычные SQL-приложения 🔗 Подробнее (https://www.blackslate.io/articles/how-to-install-and-configure-pgvector-a-detailed-guide) 💡 Храни embedding'и прямо в PostgreSQL — и делай семантический поиск без внешних векторных БД. @bzd_be1

📦 Outbox — надёжная реализация outbox-паттерна на Go для микросервисов Если твои сервисы пишут в базу и одновременно публикуют события в Kafka, RabbitMQ или другие брокеры — знай: без outbox-паттерна ты рискуешь потерять данные. 🔧 `Outbox` — это лёгкая и удобная библиотека на Go, которая помогает сделать доставку сообщений атомарной и надёжной, без лишней сложности. 🧠 Что она делает: 1. Сохраняет событие в таблицу `outbox` в рамках транзакции 2. Отдельный воркер читает сообщения и отправляет их в брокер 3. После успешной доставки — сообщение помечается как доставленное 💡 Особенности: - Поддержка PostgreSQL - Готовые адаптеры для Kafka и RabbitMQ - Возможность использовать свой брокер (реализуй интерфейс) - Поддержка сериализации / форматирования событий - Использует `sqlx` и стандартную `database/sql` 🧩 Подходит для: - надёжной синхронизации БД ↔ событий - микросервисов, где важна консистентность - систем, где нужна повторная доставка без дублей 🔥 Отличный выбор, если ты хочешь atomic-публикацию событий без тяжёлых фреймворков и сервисов. #Go #OutboxPattern #Kafka #RabbitMQ #Microservices #EventDriven #PostgreSQL 🔗 https://github.com/oagudo/outbox @bzd_be1

🔁 Как перезапускать сервис только если он завис? Иногда не хочется перезапускать сервис "на всякий случай", но вот если он р
🔁 Как перезапускать сервис только если он завис? Иногда не хочется перезапускать сервис "на всякий случай", но вот если он реально завис — другое дело. Вот простой способ проверять, активен ли сервис, и перезапускать его при зависании: ``` #!/bin/bash SERVICE="nginx" if ! systemctl is-active —quiet "$SERVICE"; then echo "$(date): $SERVICE не активен, пробую перезапустить..." >> /var/log/service_monitor.log systemctl restart "$SERVICE" else echo "$(date): $SERVICE работает нормально" >> /var/log/service_monitor.log fi ``` 🛠 Можно добавить в крон, например, проверку каждые 5 минут: ``` */5 * * * * /usr/local/bin/check_nginx.sh ``` 📁 Не забудь сделать скрипт исполняемым: ``` chmod +x /usr/local/bin/check_nginx.sh ``` 💡 Можно заменить `nginx` на любой другой системный сервис. 👉@bash_srv (https://vk.com/club229684677) @bzd_be1

Нашли промт, с которым можно выучить ЧТО УГОДНО: Реддитор расписал огромную текстовую подсказку, которая заставляет ИИ пилить курсы с использованием передовых учебных методик. Работает очень просто: замените [текст в скобочках] на вашу тему и отправляйте ChatGPT или другому чат-боту. ROLE You are EDU-Epistemic, an AI consultant who blends epistemology (how we know) with the philosophy of education (what and how we should learn). Your mission is to co-design a standards-aligned curriculum. VARIABLE SETTINGS CourseTitle = [Python для новичков] maxWords = 500 (max per module content) confirm = true (true = ask before each step, false = auto-proceed) format = markdown (markdown | csv | json) GLOBAL RULES 1. Follow the phases exactly in order. If user skips ahead, say: “We’re at Phase X-Y. Please finish/confirm this phase first.” 2. Produce GitHub-Flavoured Markdown tables (no code fences). 3. Keep each table cell under 40 characters. Wrap text if needed. 4. For every row, choose one epistemological base: Pragmatic | Critical | Reflective | Procedural | Instrumental | Normative. Justify in 15 words max. 5. Include Bloom’s Taxonomy domain and Adult-Learning (Andragogy) validation in columns. 6. For Validation columns, mark ✅ or ❌ plus a note (≤ 20 characters). 7. If format ≠ markdown, show both Markdown and the requested format. 8. Put each interactive CLI in a fenced text block, wait for learner input before replying. 9. If output nears token limits, pause and ask: “Continue?” TABLE TEMPLATES OutcomeTable | Outcome # | Proposed Outcome | Bloom Domain | Epistemic Base | Educational Validation ✅/❌ | SkillTable | Skill # | Skill Description | Outcome # | Bloom Domain | Epistemic Base | Validation ✅/❌ | AlignmentMatrix | Outcome # | Outcome Description | Supporting Skills | Justification (≤ 50 words) | ⸻ PHASE 1 – OUTCOMES & SKILLS 1. Course Outcomes • Fill OutcomeTable • Caption: Table 1.1 – Course Outcomes • Ask “Type CONTINUE to proceed” if confirm = true 2. Key Skills • Generate 2–4 skills per outcome (Skill 1.1, 1.2…) • Fill SkillTable • Caption: Table 1.2 – Key Skills • Confirm per confirm 3. Alignment Matrix • Fill AlignmentMatrix • Caption: Table 1.3 – Outcome–Skill Alignment • Confirm per confirm ⸻ PHASE 2 – SKILL MODULES Execute for each Skill in numeric order 1. Header: “Skill X.Y: ” 2. Objective: one clear, verb-led sentence 3. Content: up to maxWords; reference the Outcome 4. Knowledge Claims: bullet list with [Validated ✅/❌ + 10-word rationale] 5. Reasoning & Assumptions: max 150 words 6. Prompt to proceed (if confirm = true) 7. Interactive Activities (CLI): simulate command-line task; repeat until learner hits 80%+ 8. Assessment (CLI): same format; provide feedback or remediation 9. End-of-module prompt to continue to next Skill or finish Answer in Russian @bzd_be1

🔥 CTE + DELETE — это комбинация общего табличного выражения (Common Table Expression, CTE) и оператора DELETE, которая позволяет удобно удалять строки из таблицы, особенно в случаях, когда удаление зависит от сложного подзапроса или JOIN-ов. 🔍 Что такое CTE? CTE (WITH выражение) — это временный набор данных, определённый перед основным SQL-запросом. 🧹 Зачем использовать CTE с DELETE? Упрощает чтение и понимание кода при сложных условиях. Позволяет использовать JOIN, ROW_NUMBER() и другие функции перед удалением. Избавляет от подзапросов в WHERE, которые иногда трудно читать. 📌 Пример: Удалить дубликаты по email, оставив только один ``` WITH duplicates AS ( SELECT id, ROW_NUMBER() OVER (PARTITION BY email ORDER BY id) AS rn FROM users ) DELETE FROM users WHERE id IN ( SELECT id FROM duplicates WHERE rn > 1 ); ``` 🧠 Здесь: CTE duplicates присваивает каждой строке номер внутри группы одинаковых email. Удаляем все строки, где rn > 1 — то есть дубликаты. 📌 Пример: Удаление с JOIN ``` WITH to_delete AS ( SELECT u.id FROM users u JOIN orders o ON u.id = o.user_id WHERE o.status = 'cancelled' ) DELETE FROM users WHERE id IN (SELECT id FROM to_delete); ``` 📌 Поддержка: Работает в PostgreSQL, SQL Server, Oracle (с USING или WITH). В MySQL с 8.0+ CTE поддерживаются, но DELETE с CTE может потребовать подзапрос. @bzd_be1

🧠 SkyRL-SQL — лёгкий RL-подход для Text-to-SQL от NovaSky, который превзошёл GPT-4o и o4-mini, обучаясь всего на 653 примерах! 📌 Что это: SkyRL-SQL — это эффективный RL-фреймворк для генерации SQL-запросов из текста. Модель `SkyRL-SQL-7B` обучена с нуля с использованием обучения с подкреплением (reinforcement learning), без гигантских датасетов. 📊 Результаты на Spider-бенчмарках: `| Модель | Spider-Dev | Spider-Test | Realistic | DK | Syn | Среднее | |--------------------|------------|-------------|-----------|------|------|---------| | GPT-4o | 81.3 | 82.4 | 80.1 | 72.1 | 71.9 | 77.6 | | o4-mini | 80.6 | 81.8 | 81.2 | 70.8 | 72.1 | 77.3 | | **SkyRL-SQL-7B** | **83.9** | **85.2** | **81.1** | 72.0 | 73.7 | **79.2** |` 🔍 Особенности: • RL-обучение по шагам с интерактивной проверкой • Поддержка уточнения SQL на основе ошибок • Обучение всего на 653 примерах • Превосходит более крупные модели на практике GitHub: https://github.com/NovaSky-AI/SkyRL Блог: https://novasky-ai.github.io/posts/skyrl-sql 🧪 Отличный пример того, как можно бить гигантов с умной архитектурой, а не только размерами. 📌 Github (https://github.com/NovaSky-AI/SkyRL) @bzd_be1

🚀 Сертификация DataLens Analyst — способ подтвердить свою экспертизу в BI и систематизировать работу с одним из самых популя
🚀 Сертификация DataLens Analyst — способ подтвердить свою экспертизу в BI и систематизировать работу с одним из самых популярных российских BI-инструментов — платформой от Yandex Cloud. Подходит всем, кто строит чарты, дашборды и анализирует данные. Сертификация охватывает ключевые темы: вычисляемые поля, параметры, датасеты, подключения к источникам, навигацию и управление доступом. Подготовка простая: бесплатный курс и примеры заданий собраны на одной странице. 🎯 До конца августа сертификация стоит 2 500 ₽ вместо 5 000 ₽ — отличный повод добавить сильную строчку в резюме https://vk.cc/cMn3KE SQL 👆 @bzd_be1

🖥 Гайд по ускорению Python, который реально стоит прочитать 🔥 Без лишней теории — только рабочие практики, которые использу
🖥 Гайд по ускорению Python, который реально стоит прочитать 🔥 Без лишней теории — только рабочие практики, которые используют разработчики в боевых проектах. Внутри: • Как искать bottleneck'и и профилировать код • Где и когда использовать Numba, Cython, PyPy • Ускорение Pandas, NumPy, переход на Polars • Асинхронность, кеши, JIT, сборка, автопрофилировка — всё по полочкам • Только нужные инструменты: scalene, py-spy, uvloop, Poetry, Nuitka ⚙️ Написано просто, чётко и с прицелом на production. 📌 Полная версия онлайн (https://uproger.com/optimizciyaiuskoreniecodanapython/) @bzd_be1

🛠️ Bob `Bob` — это универсальный инструмент для работы с SQL в Go, который сочетает в себе: • генератор кода • ORM-подход • гибкий конструктор SQL-запросов 📌 Что умеет Bob: 🔹 Генерация моделей и фабрик Автоматически создаёт Go-код по схеме вашей базы данных. Ускоряет работу с моделями и минимизирует ручную писанину. 🔹 Поддержка PostgreSQL, MySQL, SQLite Работает с самыми популярными базами данных — удобно для любых проектов. 🔹 Генерация типобезопасного кода из SQL Как в `sqlc`, но с поддержкой дополнительных ORM-фич. 🔹 Гибкий конструктор запросов Строит SQL-запросы на Go с читабельным синтаксисом — без ручной сборки строк. 🔹 Поддержка связей (associations) Автоматически определяет связи между таблицами по внешним ключам. Включает `has-one`, `has-many`, `has-many-through` и др. 📚 Подробнее: ▪ GitHub: https://github.com/stephenafamo/bob ▪ Документация: https://bob.stephenafamo.com/docs/code-generation/intro Если ты работаешь с Go и SQL — попробуй Bob. Это как `sqlc`, но с усиленной ORM-магией. @bzd_be1

🔥 Polars: шпаргалка Polars ≠ Pandas. Это колоночный движок, вдохновлённый Rust и SQL. Никаких SettingWithCopyWarning — всё иммутабельно и параллелится. 🚀 Быстрый старт import polars as pl df = pl.DataFrame({ "id": [1, 2, 3], "name": ["Alice", "Bob", "Charlie"], "score": [95, 85, 100] }) 📊 Выборка и фильтрация df.filter(pl.col("score") > 90) df.select(pl.col("name").str.lengths()) df[df["id"] == 2] • Комбинированные условия: df.filter((pl.col("score") > 80) & (pl.col("name").str.contains("A"))) --- ## ⚙ Трансформации • Вычисление новых колонок: df.with_columns([ (pl.col("score") / 100).alias("percent"), pl.col("name").str.to_uppercase().alias("name_upper") ]) • Удаление/переименование: df.drop("id").rename({"name": "username"}) • apply() — только если нельзя обойтись иначе: df.with_columns( pl.col("score").map_elements(lambda x: x * 2).alias("doubled") ) 🧠 Группировка и агрегаты df.groupby("name").agg([ pl.col("score").mean().alias("avg_score"), pl.count() ]) • Агрегация с кастомной функцией: df.groupby("name").agg( (pl.col("score") ** 2).mean().sqrt().alias("rms") ) --- ## 🪄 Ленивая обработка (LazyFrame) lf = df.lazy() result = ( lf .filter(pl.col("score") > 90) .with_columns(pl.col("score").log().alias("log_score")) .sort("log_score", descending=True) .collect() ) ✅ Всё оптимизируется *до выполнения* — pushdown, predicate folding, projection pruning. 🔥 Joins df1.join(df2, on="id", how="inner") Варианты: "inner", "left", "outer", "cross", "semi", "anti" 📂 Работа с файлами pl.read_csv("data.csv") df.write_parquet("out.parquet") pl.read_json("file.json", json_lines=True) Ленивая загрузка: pl.read_parquet("big.parquet", use_pyarrow=True).lazy() --- ## 🧮 Аналитика и окна df.with_columns([ pl.col("score").rank("dense").over("group").alias("rank"), pl.col("score").mean().over("group").alias("group_avg") ]) 🧱 Структуры, списки, explode df = pl.DataFrame({ "id": [1, 2], "tags": [["a", "b"], ["c"]] }) df.explode("tags") • Работа с вложенными списками: df.select(pl.col("tags").list.lengths()) 🧪 Полезные фичи • Проверка типов: df.schema df.dtypes • Проверка на null: df.filter(pl.col("score").is_null()) • Заполнение: df.fill_null("forward") • Выбор n лучших: df.sort("score", descending=True).head(5) 📦 Советы и best practices • Используй lazy() для производительности. • Избегай .apply() — если можешь, используй pl.col().map_elements() или векторные выражения. • Сохраняй schema — удобно при пайплайнах данных. • @pl.api.register_expr_namespace("yourns") — добавляй кастомные методы как namespace. ✅ Polars: минимализм, скорость, безопасность. Если надо — сделаю обложку, PDF, интерактивную памятку или сравнение с pandas. @bzd_be1

Хитрая SQL-задача на Oracle: кто не продал — тот тоже в списке У вас есть таблица sales: CREATE TABLE sales ( salesman_id NUMBER, region VARCHAR2(50), amount NUMBER ); Данные: | salesman_id | region | amount | |-------------|------------|--------| | 101 | 'North' | 200 | | 101 | 'North' | NULL | | 102 | 'North' | 150 | | 103 | 'North' | NULL | | 104 | 'South' | 300 | | 105 | 'South' | NULL | 🎯 Задача: Вывести salesman_id тех продавцов, чья сумма продаж в своём регионе меньше средней по региону, учитывая только те записи, где `amount` не NULL. Но — обязательно включать продавцов, у которых все продажи NULL, и считать, что их сумма равна 0. --- ### ❗ Подвохы: - SUM() и AVG() игнорируют NULL, но если у человека *все* значения NULL, SUM вернёт NULL. - Нужно сравнивать 0 с AVG, а не NULL. - Надо корректно сгруппировать по региону и учитывать, где NULL'ы не попадают в AVG. --- ✅ Решение: ```sql SELECT s.salesman_id FROM ( SELECT salesman_id, region, NVL(SUM(amount), 0) AS total_sales FROM sales GROUP BY salesman_id, region ) s JOIN ( SELECT region, AVG(amount) AS avg_region_sales FROM sales WHERE amount IS NOT NULL GROUP BY region ) r ON s.region = r.region WHERE s.total_sales < r.avg_region_sales; ``` 🧠 Разбор: 1. В подзапросе `s`: - `SUM(amount)` по продавцу → `NULL`, если продаж нет - `NVL(..., 0)` превращает такие NULL в 0 2. В подзапросе `r`: - `AVG(amount)` по региону, игнорируя NULL - Только валидные продажи участвуют в средней 3. Сравниваем: **продавцы с 0 продаж тоже идут в сравнение** 💡 Вывод: Этот запрос: - корректно считает продажи даже для "нулевых" продавцов - использует `NVL()` и фильтрацию `WHERE amount IS NOT NULL` - демонстрирует знание поведения агрегатных функций и подзапросов 👀 На собеседованиях часто забывают, что `SUM(NULL)` даёт `NULL`, и сравнение с `AVG` не срабатывает без `NVL`. @bzd_be1

👣 Stateless Postgres Query Router — это система шардирования для PostgreSQL-кластера, доступная с открытым исходным кодом. Е
👣 Stateless Postgres Query Router — это система шардирования для PostgreSQL-кластера, доступная с открытым исходным кодом. Её основной компонент, роутер, анализирует запросы и определяет, на каком конкретном PostgreSQL-кластере следует выполнить транзакцию или запрос. Ключи шардирования могут передаваться в запросе как явно, так и неявно, в виде комментариев. В SPQR реализованы функции транзакционного и сессионного пулинга, автобалансировки шардированных таблиц, а также поддержка всех возможных методов аутентификации, сбора статистики и динамической перезагрузки конфигурации. SPQR поддерживает как запросы к определённому шарду, так и запросы ко всем шардам. В ближайших планах — добавить поддержку двухфазных транзакций и референсных таблиц. Исходный код SPQR распространяется под лицензией PostgreSQL Global Development Group ⚡️ Ссылки: 🟢https://github.com/pg-sharding/spqr 🟢https://pg-sharding.tech/ @bzd_be1