⚡️ Предотвращаем потерю данных с ACID-транзакциями в DuckDB!
❌ Без транзакций:
- Списание у Alice прошло ✅
- Пополнение у Bob сломалось ❌
➡️ Итог: деньги «пропали».
✅ С транзакцией (ACID):
- Оба обновления либо проходят вместе, либо откатываются
- Баланс остаётся консистентным
- Никаких «висящих» операций
Пример:
🔹 Atomicity — либо всё, либо ничего
🔹 Consistency — база не ломается
🔹 Isolation — параллельные операции не мешают
🔹 Durability — данные не теряются
🛡 ACID гарантирует надёжность даже при сбоях.
❌ Без транзакций:
- Списание у Alice прошло ✅
- Пополнение у Bob сломалось ❌
➡️ Итог: деньги «пропали».
✅ С транзакцией (ACID):
- Оба обновления либо проходят вместе, либо откатываются
- Баланс остаётся консистентным
- Никаких «висящих» операций
Пример:
conn.execute("BEGIN TRANSACTION")
try:
conn.execute("UPDATE accounts SET balance = balance - 200 WHERE name = 'Alice'")
conn.execute("UPDATE accounts SET balance = balance + 200 WHERE name = 'Bob'")
conn.execute("COMMIT")
except:
conn.execute("ROLLBACK")
🔹 Atomicity — либо всё, либо ничего
🔹 Consistency — база не ломается
🔹 Isolation — параллельные операции не мешают
🔹 Durability — данные не теряются
🛡 ACID гарантирует надёжность даже при сбоях.
👍10❤6🥰3🤔1🤬1
🚀 Вышел Postgres 18 — с поддержкой Async I/O
Раньше все операции чтения были блокирующими, теперь - нет.
Результат: огромный прирост производительности для приложений с интенсивным чтением.
⚡️ Async I/O включён по умолчанию в Postgres 18!
Что интересного:
- Новый алгоритм skip scan для многостолбцовых индексов
- Параллельное построение GIN-индексов (JSON, полнотекст)
- Виртуальные генерируемые столбцы (значения считаются на лету)
- Функция
- Сохранение статистики планировщика при мажорных апгрейдах
- Поддержка OAuth 2.0, улучшения TLS и безопасности
- Новый протокол взаимодействия клиентов и утилит — v3.2
🟠 Релиз: https://www.postgresql.org/about/news/postgresql-18-released-3142/
@sqlhub
Раньше все операции чтения были блокирующими, теперь - нет.
Результат: огромный прирост производительности для приложений с интенсивным чтением.
⚡️ Async I/O включён по умолчанию в Postgres 18!
Что интересного:
- Новый алгоритм skip scan для многостолбцовых индексов
- Параллельное построение GIN-индексов (JSON, полнотекст)
- Виртуальные генерируемые столбцы (значения считаются на лету)
- Функция
uuidv7()
— UUID с временной сортировкой - Сохранение статистики планировщика при мажорных апгрейдах
- Поддержка OAuth 2.0, улучшения TLS и безопасности
- Новый протокол взаимодействия клиентов и утилит — v3.2
@sqlhub
Please open Telegram to view this post
VIEW IN TELEGRAM
❤16👍11🔥8
Когда вы пишете юнит-тесты, подключение к реальной БД — лишнее:
- это медленно,
- тесты становятся нестабильными,
- нужен живой сервер.
Решение — замокать вызов
pandas.read_sql
и вернуть подставные данные.Пример функции:
def query_user_data(user_id):
query = f"SELECT id, name FROM users WHERE id = {user_id}"
return pd.read_sql(query, "postgresql://localhost/mydb")
Тест с моком:
from unittest.mock import patch
import pandas as pd
@patch("pandas.read_sql")
def test_database_query_mocked(mock_read_sql):
mock_read_sql.return_value = pd.DataFrame(
{"id": [123], "name": ["Alice"]}
)
result = query_user_data(user_id=123)
assert result["name"].iloc[0] == "Alice"
Теперь вместо запроса в реальную базу тест подставляет фейковые данные. Так можно проверить бизнес-логику функции быстро и надёжно.
@sqlhub
Please open Telegram to view this post
VIEW IN TELEGRAM
👍14❤6😁1
Если строишь чат-бота или RAG-систему — Chroma даст твоему приложению память и быстрый поиск по векторным представлениям.
✨ Что умеет:
- Поддержка Python и JavaScript
- Быстрый поиск и фильтрация по embeddings
- Интеграция с LangChain и LlamaIndex
- Простое API для добавления документов и метаданных
🚀 Установка:
pip install chromadb
# или
npm install chromadb
chroma run --path ./chroma_db
🧩 Пример на Python:
import chromadb
client = chromadb.Client()
col = client.create_collection("docs")
col.add(documents=["Doc1","Doc2"], ids=["1","2"])
res = col.query(query_texts=["найди похожее"], n_results=1)
▪Github
▪Colab
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6❤3
🟠 ParadeDB — альтернатива Elasticsearch на базе PostgreSQL
В эпоху data-driven решений поиск и аналитика в реальном времени стали обязательной частью любой стратегии.
ParadeDB — это новый open-source игрок: расширение для PostgreSQL, превращающее его в мощный движок полнотекстового поиска и аналитики.
✨ Возможности:
Реал-тайм поиск по данным прямо в Postgres
Высокая производительность без внешних сервисов
Open-source и легко встраивается в существующую инфраструктуру
🔗 Подробнее: blackslate.io/articles/paradedb-an-elasticsearch-alternative-built-on-postgresql
@sqlhub
В эпоху data-driven решений поиск и аналитика в реальном времени стали обязательной частью любой стратегии.
ParadeDB — это новый open-source игрок: расширение для PostgreSQL, превращающее его в мощный движок полнотекстового поиска и аналитики.
✨ Возможности:
Реал-тайм поиск по данным прямо в Postgres
Высокая производительность без внешних сервисов
Open-source и легко встраивается в существующую инфраструктуру
🔗 Подробнее: blackslate.io/articles/paradedb-an-elasticsearch-alternative-built-on-postgresql
@sqlhub
❤7
⚠️ SQL-инъекция через f-string
Если подставлять значения прямо в SQL через f-string, злоумышленник может выполнить любой код в базе:
💥 И вот таблица accounts удалена!
Почему так?
Потому что строка с именем вставляется как есть и воспринимается как часть SQL-запроса.
✅ Правильный способ — использовать параметры:
✔ Имя ищется как текст, база остаётся в безопасности.
👉 Запомни: никогда не вставляй пользовательские данные напрямую в SQL.
Используй параметризованные запросы — это надёжная защита от SQL-инъекций.
@sqlhub
Если подставлять значения прямо в SQL через f-string, злоумышленник может выполнить любой код в базе:
name = "Alice'; DROP TABLE accounts; --"
query = f"SELECT * FROM accounts WHERE name = '{name}'"
conn.sql(query)
💥 И вот таблица accounts удалена!
Почему так?
Потому что строка с именем вставляется как есть и воспринимается как часть SQL-запроса.
✅ Правильный способ — использовать параметры:
name = "Alice'; DROP TABLE accounts; --"
query = "SELECT * FROM accounts WHERE name = ?"
conn.sql(query, params=(name,))
✔ Имя ищется как текст, база остаётся в безопасности.
👉 Запомни: никогда не вставляй пользовательские данные напрямую в SQL.
Используй параметризованные запросы — это надёжная защита от SQL-инъекций.
@sqlhub
👍18🔥6❤5
Знали ли вы, что у SQLite есть векторное расширение? 🧮
SQLite - самая используемая база данных в мире, работает практически на любом устройстве.
Теперь можно легко строить AI-приложения с помощью SQLite-vec и новой Embedding Gemma прямо на устройстве, без интернета.
На скрине - простой пример с Python + SQLite и Ollama. SQLite-vec совместим с WASM и запускается где угодно. Пример можно адаптировать почти под любой язык: Swift, Kotlin, Java, JavaScript…
🟢 Script: https://github.com/philschmid/gemini-samples/blob/main/scripts/embeddinggemma-sqlite-ollama.py
🟢 Sqlite-vec: https://alexgarcia.xyz/sqlite-vec/
🟢 EmbeddingGemma: https://developers.googleblog.com/en/introducing-embeddinggemma/
@sqlhub
SQLite - самая используемая база данных в мире, работает практически на любом устройстве.
Теперь можно легко строить AI-приложения с помощью SQLite-vec и новой Embedding Gemma прямо на устройстве, без интернета.
На скрине - простой пример с Python + SQLite и Ollama. SQLite-vec совместим с WASM и запускается где угодно. Пример можно адаптировать почти под любой язык: Swift, Kotlin, Java, JavaScript…
@sqlhub
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6❤3🔥2
Отличный курс для тех, кто хочет разобраться в нейронках с нуля от Андрея Карпати (OpenAI/Tesla).
Внутри бесплатная серия лекций на YouTube (и репа на GitHub), где ты с нуля учишься собирать нейронки. Всё максимально hands-on:
Автор не просто рассказывает теорию, а пишет код вместе с тобой — от самых азов до тренировки сетей.
https://github.com/karpathy/nn-zero-to-hero/
Внутри бесплатная серия лекций на YouTube (и репа на GitHub), где ты с нуля учишься собирать нейронки. Всё максимально hands-on:
Автор не просто рассказывает теорию, а пишет код вместе с тобой — от самых азов до тренировки сетей.
https://github.com/karpathy/nn-zero-to-hero/
❤14🔥8👍5
Перед вами подробный практический гайд по автоматизации процессов на Python для продвинутых разработчиков. Он фокусируется на промышленном уровне качества: архитектура, надёжность, наблюдаемость, упаковка и деплой. В каждом разделе - конкретные паттерны и готовые фрагменты кода.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤6👍3🥰1
🌐 OrbitDB — распределённая serverless P2P-база данных для децентрализованных приложений
OrbitDB создана для веба без централизованных серверов: блокчейн-систем, локальных оффлайн-сценариев и P2P-приложений.
⚙️ Основные принципы:
- IPFS — хранение данных.
- Libp2p Pubsub — репликация и синхронизация между узлами.
- Merkle-CRDT — гарантирует бесконфликтные записи и объединение данных в условиях многоверсионности.
📊 Типы БД:
- Журнал событий (append-only log)
- Key-Value store
- Документная база
- Индексируемые коллекции
Все они построены на иммутабельном OpLog, который обеспечивает eventual consistency без выделенного сервера.
📌 Github
OrbitDB создана для веба без централизованных серверов: блокчейн-систем, локальных оффлайн-сценариев и P2P-приложений.
⚙️ Основные принципы:
- IPFS — хранение данных.
- Libp2p Pubsub — репликация и синхронизация между узлами.
- Merkle-CRDT — гарантирует бесконфликтные записи и объединение данных в условиях многоверсионности.
📊 Типы БД:
- Журнал событий (append-only log)
- Key-Value store
- Документная база
- Индексируемые коллекции
Все они построены на иммутабельном OpLog, который обеспечивает eventual consistency без выделенного сервера.
📌 Github
❤5👍2🔥2
Новое техношоу о фейлах на дата-платформах
Все упало, все сломалось, бизнес в панике. Для дата-инженеров это обычный вторник, а для шоу «Дропнуто» — повод снять свежий выпуск.
«Дропнуто» превращает фейлы дата-платформ в истории, которые полезно услышать каждому, кто работает с данными. В центре каждого эпизода — один герой и одна яркая история фейла, развернутое обсуждение архитектуры и процессов, а также немного самоиронии.
Анонсы и ссылки на прямые эфиры появятся в телеграм-боте проекта.
Подписывайтесь, чтобы узнавать о премьерах первыми.
Все упало, все сломалось, бизнес в панике. Для дата-инженеров это обычный вторник, а для шоу «Дропнуто» — повод снять свежий выпуск.
«Дропнуто» превращает фейлы дата-платформ в истории, которые полезно услышать каждому, кто работает с данными. В центре каждого эпизода — один герой и одна яркая история фейла, развернутое обсуждение архитектуры и процессов, а также немного самоиронии.
Анонсы и ссылки на прямые эфиры появятся в телеграм-боте проекта.
Подписывайтесь, чтобы узнавать о премьерах первыми.
❤1👍1
💾 Зачем нужен Delta Lake, если есть Parquet
Обычный Parquet хранит только одно состояние таблицы.
Если вы сохранили отфильтрованный DataFrame, то старые данные исчезли навсегда.
❌ Отката (rollback) нет → потеряли 10 000 строк, осталось только 3 500.
⚡ Delta Lake работает иначе:
- каждый раз создаётся новая версия данных
- можно вернуться к любой версии в прошлом
- данные всегда под контролем и без потерь
📌 Пример:
- Parquet → фильтр → оригинал стёрт
- Delta Lake → версия 0 (10 000 строк) + версия 1 (3 500 строк) → всегда можно вернуться к версии 0
✅ Итог: с Delta Lake данные становятся версионируемыми и надёжными.
#datalake #parquet #bigdata #delta
Обычный Parquet хранит только одно состояние таблицы.
Если вы сохранили отфильтрованный DataFrame, то старые данные исчезли навсегда.
❌ Отката (rollback) нет → потеряли 10 000 строк, осталось только 3 500.
⚡ Delta Lake работает иначе:
- каждый раз создаётся новая версия данных
- можно вернуться к любой версии в прошлом
- данные всегда под контролем и без потерь
📌 Пример:
- Parquet → фильтр → оригинал стёрт
- Delta Lake → версия 0 (10 000 строк) + версия 1 (3 500 строк) → всегда можно вернуться к версии 0
✅ Итог: с Delta Lake данные становятся версионируемыми и надёжными.
#datalake #parquet #bigdata #delta
❤11👍4🔥3👎1😁1
Какой из следующих запросов отобразит всех студентов, у которых вторая буква в имени - «i»?
Anonymous Quiz
8%
select first_name from students where first_name like ‘%i_’;
12%
select first_name from students where first_name like ‘%i%’;
66%
select first_name from students where first_name like ‘_i%’;
7%
select first_name from students where first_name like ‘_i_’;
7%
Посмотреть ответ
👍15❤4🔥3
Здесь на пальцах объясняют не только как писать SQL-запросы, а строить настоящие backend-сервисы с базой данных как у профи.
В этом курсе ты шаг за шагом создашь REST API на FastAPI + PostgreSQL:
от установки среды и первых таблиц - до масштабируемого приложения с безопасностью и CRUD-операциями.
🔹 На практике разберете:
• SQL-запросы, фильтры, агрегаты и подзапросы
• Связи между таблицами и нормализацию БД
• Взаимодействие Python и PostgreSQL
• Реализацию REST API и подключение базы
• Оптимизацию и разбор реальных задач с собеседований
⚡ После курса у вас будет свой работающий API-проект и реальные навыки работы с PostgreSQL в продакшене.
🎁 Сегодня –30% от цены!
🚀 Прокачаю свои знания: https://stepik.org/course/255542/
Please open Telegram to view this post
VIEW IN TELEGRAM
❤6🔥3👍2🥰1
This media is not supported in your browser
VIEW IN TELEGRAM
Нужен один «топ-элемент» на группу без оконных функций и лишних джойнов?
В PostgreSQL есть недооценённый приём: DISTINCT ON. Он берёт первую строку в каждой группе по указанным полям, какую именно, ты задаёшь через ORDER BY.
Так за один проход можно выбрать, например, последний заказ клиента, самую дорогую позицию в категории или актуальную запись по состоянию. Важно: в ORDER BY сначала идут поля из DISTINCT ON, а следом — критерий «топа» (например, created_at DESC).
Для скорости добавь составной индекс в том же порядке (ключи группировки → поле сортировки).
@sqlhub
В PostgreSQL есть недооценённый приём: DISTINCT ON. Он берёт первую строку в каждой группе по указанным полям, какую именно, ты задаёшь через ORDER BY.
Так за один проход можно выбрать, например, последний заказ клиента, самую дорогую позицию в категории или актуальную запись по состоянию. Важно: в ORDER BY сначала идут поля из DISTINCT ON, а следом — критерий «топа» (например, created_at DESC).
Для скорости добавь составной индекс в том же порядке (ключи группировки → поле сортировки).
-- Возьмём по 1 строке на группу (g1, g2), выбирая «лучшую» по metric DESC
SELECT DISTINCT ON (g1, g2) *
FROM some_table
ORDER BY g1, g2, metric DESC;
-- Пример: последний заказ каждого пользователя
SELECT DISTINCT ON (o.user_id)
o.user_id, o.id AS order_id, o.created_at, o.total
FROM orders o
ORDER BY o.user_id, o.created_at DESC;
-- Рекомендуемый индекс для скорости (соответствует ORDER BY)
CREATE INDEX ON orders (user_id, created_at DESC);
-- Ещё пример: самая дорогая товарная позиция в категории
SELECT DISTINCT ON (p.category_id)
p.category_id, p.id, p.price
FROM products p
ORDER BY p.category_id, p.price DESC;
-- Индекс под этот запрос
CREATE INDEX ON products (category_id, price DESC);
@sqlhub
👍12🔥7❤4
💡 SQL trick: уникальные значения прямо в агрегатах
Иногда нужно посчитать уникальные значения по каждому пользователю.
Мало кто знает, что для этого есть
🔎 Такой запрос покажет, сколько разных товаров купил каждый клиент.
Работает не только с
@sqlhub
Иногда нужно посчитать уникальные значения по каждому пользователю.
Мало кто знает, что для этого есть
COUNT(DISTINCT ...)
.
SELECT
customer_id,
COUNT(DISTINCT product_id) AS unique_products
FROM orders
GROUP BY customer_id;
🔎 Такой запрос покажет, сколько разных товаров купил каждый клиент.
Работает не только с
COUNT()
, но и с SUM(DISTINCT ...)
или AVG(DISTINCT ...)
. @sqlhub
👍13❤7🥰3🔥1
PostgreSQL – одна из самых мощных СУБД с открытым исходным кодом. Этот гайд подробно охватывает ключевые аспекты PostgreSQL: от внутренней архитектуры до приёмов оптимизации. Мы рассмотрим администрирование, производительность, расширения, инструменты, а также сравним популярные ORM для Python и Go. В конце приведён список продвинутых вопросов, часто встречающихся на собеседованиях.
@sqlhub
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10❤6🔥5
This media is not supported in your browser
VIEW IN TELEGRAM
Твой шанс прокачаться в ИТ, получить карьерный буст и побороться за призовой фонд 10 250 000 рублей 💰 Успей зарегистрироваться до 20 октября.
МТС приглашает на True Tech Champ — всероссийский чемпионат по программированию. Соревнование будет проходить в двух треках.
Трек 1. Алгоритмический. Индивидуальный зачет [призовой фонд 2 750 000 рублей]
Реши задачи, которые помогут прокачаться в работе с алгоритмами и структурами данных. Похожие задания встречаются на собеседованиях в МТС и других крупных компаниях. До 240 лучших участников попадут в финал и сразятся в лайв-кодинге.
Трек 2. Программирование роботов. Командный формат [призовой фонд 7 500 000 рублей]
Проведи робота по виртуальному лабиринту, затем управляй им дистанционно на офлайн-полигоне, а в финале — пройди испытания на реальной площадке и выбей соперников с платформы. Организаторы отправят командам финалистов по одному роботу Waveshare Cobra Flex для кастомизации. После соревнований они останутся у участников в качестве подарка.
📍 Зрелищный шоу-финал с ИИ-технологиями, кодерскими челленджами и выступлениями международных и российских спикеров пройдет 21 ноября в МТС Live Холл.
🎁 Регистрация участников до 20 октября на сайте.
МТС приглашает на True Tech Champ — всероссийский чемпионат по программированию. Соревнование будет проходить в двух треках.
Трек 1. Алгоритмический. Индивидуальный зачет [призовой фонд 2 750 000 рублей]
Реши задачи, которые помогут прокачаться в работе с алгоритмами и структурами данных. Похожие задания встречаются на собеседованиях в МТС и других крупных компаниях. До 240 лучших участников попадут в финал и сразятся в лайв-кодинге.
Трек 2. Программирование роботов. Командный формат [призовой фонд 7 500 000 рублей]
Проведи робота по виртуальному лабиринту, затем управляй им дистанционно на офлайн-полигоне, а в финале — пройди испытания на реальной площадке и выбей соперников с платформы. Организаторы отправят командам финалистов по одному роботу Waveshare Cobra Flex для кастомизации. После соревнований они останутся у участников в качестве подарка.
📍 Зрелищный шоу-финал с ИИ-технологиями, кодерскими челленджами и выступлениями международных и российских спикеров пройдет 21 ноября в МТС Live Холл.
🎁 Регистрация участников до 20 октября на сайте.
❤2
🧩 SQL полезный приём
Нужно выбрать из таблицы записи с максимальным или минимальным значением по группе?
Вместо вложенных подзапросов удобно использовать оконные функции.
Пример: найти для каждого пользователя его последний заказ.
📌 Как это работает:
PARTITION BY user_id делит данные по пользователям
ORDER BY order_date DESC сортирует заказы от нового к старому
ROW_NUMBER() присваивает каждой записи номер в рамках группы
WHERE rn = 1 берёт только последний заказ для каждого пользователя
💡 Такой подход легко адаптируется: можно выбирать первый/последний элемент в группе, топ-N значений или фильтровать дубликаты.
@sqlhub
Нужно выбрать из таблицы записи с максимальным или минимальным значением по группе?
Вместо вложенных подзапросов удобно использовать оконные функции.
Пример: найти для каждого пользователя его последний заказ.
WITH ranked AS (
SELECT
user_id,
order_id,
order_date,
ROW_NUMBER() OVER (PARTITION BY user_id ORDER BY order_date DESC) AS rn
FROM orders
)
SELECT user_id, order_id, order_date
FROM ranked
WHERE rn = 1;
📌 Как это работает:
PARTITION BY user_id делит данные по пользователям
ORDER BY order_date DESC сортирует заказы от нового к старому
ROW_NUMBER() присваивает каждой записи номер в рамках группы
WHERE rn = 1 берёт только последний заказ для каждого пользователя
💡 Такой подход легко адаптируется: можно выбирать первый/последний элемент в группе, топ-N значений или фильтровать дубликаты.
@sqlhub
❤12👍7🔥4
This media is not supported in your browser
VIEW IN TELEGRAM
🔥 no-code база данных, которая сама превращает SQL в Airtable-стиль интерфейс
Что умеет:
- Подключается к MySQL, Postgres, SQLite, MSSQL и сразу показывает данные в виде удобных таблиц
- Делает представления: таблицы, календари, канбан, формы, Гантт
- Генерирует готовые REST и GraphQL API прямо поверх базы
- Делится видами: публично или под паролем, поддерживает загрузку файлов и картинок
- Настраивает роли и доступ до уровня отдельного столбца
Плюс интеграции со Slack, Discord, мессенджерами, почтой и десятками сервисов.
По сути — Airtable, но напрямую поверх твоей базы.
https://github.com/nocodb/nocodb
Что умеет:
- Подключается к MySQL, Postgres, SQLite, MSSQL и сразу показывает данные в виде удобных таблиц
- Делает представления: таблицы, календари, канбан, формы, Гантт
- Генерирует готовые REST и GraphQL API прямо поверх базы
- Делится видами: публично или под паролем, поддерживает загрузку файлов и картинок
- Настраивает роли и доступ до уровня отдельного столбца
Плюс интеграции со Slack, Discord, мессенджерами, почтой и десятками сервисов.
По сути — Airtable, но напрямую поверх твоей базы.
https://github.com/nocodb/nocodb
❤5👍1🔥1🤔1