Skip to content

Классы данных Python облегчают получение строк из базы данных как объектов

Пересказ статьи Christopher Jones. Python Data Classes make it easy to fetch database rows as objects


rowfactories в Python-oracledb являются мощным средством для запросов к базам данных Oracle, позволяющим изменить представление извлекаемых строк, уменьшить количество шаблонного кода приложения и копирования данных. Здесь мы покажем, как легко использовать класс данных Python с rowfactory для преобразования строк в экземпляры пользовательского класса.

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

Рассмотрим код, который не использует rowfactory:
Продолжить чтение "Классы данных Python облегчают получение строк из базы данных как объектов"

SELECT и RETURN в хранимых процедурах — сравнение Sql Server и Postgres. Часть 1

Пересказ статьи Assaf Fraenkel. SELECT and RETURN in Stored Procedures — Sql Server vs Postgres Part 1


Вы испытываете сложности при переходе от SQL Server к PostgreSQL? В этой серии статей раскрывается важное различие в механизмах двух баз данных: как операторы SELECT и RETURN ведут себя в хранимых процедурах. Давайте разберемся в этом ключевом отличии и сделаем ваш переход более гладким.

Даже при наличии некоторых продуктов, которые могут помочь вам в переходе ((Google DMS, AWS DMS, Ispirer и других), а также помощи ИИ (посмотрите для примера ссылки на Google и Ispirer выше) весьма важно глубокое понимание ключевых различий между этими движками.
Продолжить чтение "SELECT и RETURN в хранимых процедурах — сравнение Sql Server и Postgres. Часть 1"

Новости за 2025-11-15 - 2025-11-21

§ Усилена проверка задачи 20 (DML) данными от saphirion.
§ В ответ на сообщение pegoopik усилена проверка задачи 191 (SELECT, обучающий этап).

§ Популярные темы недели на форуме

Топик		Сообщений	Просмотров
191 (Learn) 11 6
8 (Learn) 2 23
10 (Learn) 2 17
16 (Learn) 2 25
Продолжить чтение "Новости за 2025-11-15 - 2025-11-21"

Заполнение пробелов

Автор: Joe Celko

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


В октябре 2000 года Даррен Тафт опубликовал в группе новостей по SQL Server задачу, которая выглядит лёгкой. Приведу его слова: «У меня есть система заказов, которая выделяет номера в пределах заранее определённых диапазонов. Сейчас я делаю это так: ...» На этом месте он привёл хранимую процедуру на диалекте T-SQL. В ней был цикл, который увеличивал значение request_id до тех пор, пока не находил пропуск в нумерации или пока попытка не проваливалась. Даррен продолжил: «Это годится для первых нескольких номеров, но когда диапазоны достигают 10 000 между минимумом и максимумом, всё начинает заметно тормозить. Может ли кто-нибудь придумать лучший способ?

Продолжить чтение "Заполнение пробелов"
Категории: T-SQL

Кэширование результата запроса для быстрых приложений баз данных

Пересказ статьи Christopher Jones. Query result caching for fast database applications


Встроенный в базы данных Oracle “Client Result Cache” (CRC) является эффективным, интегрированным, управляемым кэшем, который резко улучшает производительность запросов и существенно снижает нагрузку на базу данных при повторяющихся запросах к по большей части статическим таблицам, таким как почтовые индексы или номера деталей. Никакие изменения в приложениях не требуются. Никакого отдельное промежуточного кэша устанавливать не нужно. CRC доступен для каждого "толстого" клиента, который использует библиотеки Oracle Client, такие как драйверы для Python, Node.js, Go, PHP, Rust, Ruby и Oracle C API. Он также доступен в JDBC. Эта статья демонстрирует пример для Python.

Преимущества кэширования результатов клиента


  • Может использоваться без необходимости изменять код приложения.

  • Улучшенное время отклика запроса.

  • Операторы не посылаются для выполнения в базу данных.

  • Лучшая производительность за счет устранения циклов обмена между серверами.

  • Улучшенная масштабируемость сервера баз данных за счет экономии ресурсов сервера.

  • Автоматически управляемое аннулирование кэша, поддерживающее соответствие кэша изменениям в базе данных.

  • Не требуется сервер промежуточного слоя для кэширования.

  • Разработчикам не требуется создавать или использовать собственный кэш.
Продолжить чтение "Кэширование результата запроса для быстрых приложений баз данных"

Учёт интервалов времени

Автор: Джо Селко (Joe Celko)



SQL — первый язык программирования, в котором появились явные временные типы данных. Я давно полагаю, что если бы в Cobol изначально был тип TIMESTAMP, вся история с Y2K могла бы и не случиться. По крайней мере, сегодня всё больше людей знают о стандартах отображения даты и времени ISO 8601. Кто знает — может быть, их наконец начнут применять.

Продолжить чтение "Учёт интервалов времени"

Детальное сравнение MariaDB и MySQL

Пересказ статьи Antonello Zanini. MariaDB vs MySQL: The Ultimate Comparison


MariaDB и MySQL - две из наиболее широко используемых СУБД, доля которых на рынке среди реляционных баз данных совместно составляет более 40%. Хотя они имеют общую базовую реализацию, некоторые фундаментальные различия делают их более подходящими для различных сценариев.

В этой статье сравнения MariaDB и MySQL мы обратимся к истории этих технологий, исследуем их подобие и различие, чтобы помочь вам развеять сомнения относительно применения этих двух баз данных.
Продолжить чтение "Детальное сравнение MariaDB и MySQL"
Категории: MySQL

Новости за 2025-11-08 - 2025-11-14

§ pegoopik открыл конкурсы по оптимизации запросов для задач 179, 208, 215, 220, 230, 239, 257.

§ В ответ на замечание Paulus73 проверка задачи 126 (SELECT, обуч. этап) усилена данными от pegoopik.

§ Популярные темы недели на форуме
Топик		Сообщений	Просмотров
Guest's book 6 16
35 (Learn) 4 16
126 (Learn) 3 6
197 (SELECT) 2 6
780 (SELECT) 2 10
Продолжить чтение "Новости за 2025-11-08 - 2025-11-14"

Обзор индексов в MySQL: составные индексы B-Tree

Пересказ статьи Lukas Vileikis. MySQL Index Overviews: Composite B-Tree Indexes


Индексы в MySQL являются одним из главных средств улучшения производительности запросов. Они особенно полезны, когда основные операции вашего проекта относятся к чтению данных, хранящихся в базе данных. Мы уже обсуждали нюансы индексов в MySQL, где говорилось, что MySQL предлагает вам для выбора различные типы SQL-индексов.

Основной тип индекса в MySQL - это индекс B-Tree, рассмотренный нами в одной из предыдущих статей. Если вы работаете с MySQL, то определенно знаете также о других нюансах индексов, одним из которых является тот факт, что индексы B-Tree могут строиться на нескольких столбцах (обычно их называют составными индексами). В этом примере мы используем MariaDB, хотя Percona Server для MySQL и MySQL Server будут вести себя идентично.

В приложении вы найдете запросы, воссоздающие структуру таблиц и составные индексы, так что давайте начнем.
Продолжить чтение "Обзор индексов в MySQL: составные индексы B-Tree"

Зачем нужно следить за наборами индексов, как за фигурой?

Автор: Николай Самохвалов #PostgresMarathon 2-013: Why keep your index set lean


Ваш API замедляется. Вы проверяете базу данных и обнаруживаете 42 индекса в таблице users. Какие из них можно безопасно удалить? Во сколько они обходятся по производительности? Давайте разберёмся, что на самом деле происходит в Postgres, когда индексов слишком много.


Если вы бэкенд‑ или фуллстек‑инженер, вам, вероятно, не хочется становиться гуру индексации — вы просто хотите, чтобы API был быстрым и стабильным, без постоянного присмотра за pg_stat_user_indexes.


Обслуживание индексов включает несколько задач: удаление неиспользуемых индексов, удаление избыточных индексов и регулярную перестройку индексов для борьбы с фрагментацией (и, само собой, грамотную настройку autovacuum).


Есть много причин, почему набор индексов нужно держать «стройным», и некоторые из них не столь очевидны.

Продолжить чтение "Зачем нужно следить за наборами индексов, как за фигурой?"

PostgreSQL 18: ещё больше производительности с пропуском просмотра индекса

PostgreSQL 18: ещё больше производительности с пропуском просмотра индекса

Автор: Hans-Jürgen Schönig. PostgreSQL 18: More performance with index skip scans


PostgreSQL 18 приносит целый ряд улучшений производительности, которые помогают приложениям работать эффективнее и дарят более приятный опыт пользователю. Одно из таких улучшений называется «skip scans» (пропуск просмотра). У многих на этом месте возникнет вопрос: звучит здорово, но что такое skip scan? Цель этой статьи — прояснить, как это работает, что именно делает и, что самое важное: как получить от этой возможности практическую пользу.

Продолжить чтение "PostgreSQL 18: ещё больше производительности с пропуском просмотра индекса"

Восстановление на определенный момент времени в AWS RDS PostgreSQL

Пересказ статьи Grant Fritchey. AWS RDS PostgreSQL Restore to a Point in Time


Одной из самых важных причин выбрать платформу как службу (PaaS), например, AWS RDS, является действительно легкая возможность выполнять восстановление к моменту времени. Давайте посмотрим на это.

Восстановление на момент времени


При подключении к консоли и просмотре ваших баз данных все, что вам требуется сделать - это выбрать вкладку “Maintenance and Backups” (обслуживание и резервные копии) для получения информации о том, какие бэкапы создаются:


Продолжить чтение "Восстановление на определенный момент времени в AWS RDS PostgreSQL"

Новости за 2025-11-01 - 2025-11-07

§ Проверка задачи 155 (обуч. этап) усилена данными от Komov S.M.

§ Популярные темы недели на форуме

Топик		Сообщений	Просмотров
119 (SELECT) 6 6
106 (Learn) 3 6
99 (Learn) 2 6
174 (Learn) 2 5
Guest's book 2 19

§ Авторы недели на форуме

Автор		Сообщений
ValNick 7
rock_4 6
Paulus73 4
Rujan 3
selber 3
Продолжить чтение "Новости за 2025-11-01 - 2025-11-07"

PostgreSQL и NUMA, часть 2 из 4 (NUMA, Linux и PostgreSQL до появления поддержки libnuma)

Автор: Chris Travers PostgreSQL and NUMA, part 2 of 4 (NUMA, Linux, and PostgreSQL before libnuma Support)


Эта статья опирается на предыдущий материал «Введение в NUMA» (PostgreSQL и NUMA, часть 1 из 4) и предполагает не только знание определения NUMA, но и общее понимание аппаратной и программной реализации.


В этой части рассматривается взаимодействие PostgreSQL и Linux на системах с NUMA. Тема сложная, поэтому кое‑где используются упрощения. Тем не менее здесь собрана выжимка общих сведений о работе PostgreSQL 17 и ниже (а также PostgreSQL 18 без поддержки libnuma) на NUMA‑системах с Linux в качестве точки отсчёта. К концу чтения вы не только будете в состоянии уверенно запускать Postgres на NUMA‑системе, но и поймёте, почему поддержка libnuma в PostgreSQL 18 настолько важна.

Продолжить чтение "PostgreSQL и NUMA, часть 2 из 4 (NUMA, Linux и PostgreSQL до появления поддержки libnuma)"

PostgreSQL и NUMA, часть 1 из 4

Автор: Chris Travers PostgreSQL and NUMA, part 1 of 4


Этот цикл посвящён особенностям работы PostgreSQL на крупных системах с большим числом процессоров. По моему опыту, столкнувшись с этой задачей, люди нередко тратят месяцы на освоение азов. Цель цикла — снять эти трудности, дав ясную базовую картину по ключевым темам. Хочется верить, что будущим инженерам и администраторам баз данных не придётся месяцами методом проб и ошибок разбираться в том, что можно понять быстрее.


Эти статьи сосредоточены на низкоуровневых «как» и «почему» в контексте неоднородного доступа к памяти (Non‑Uniform Memory Access), чтобы затем было проще понимать решения и рекомендации — с упором на концептуальную сторону. К сожалению, во многих местах без технических деталей не обойтись: голые концепции без деталей в лучшем случае сбивают с толку.


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


Продолжить чтение "PostgreSQL и NUMA, часть 1 из 4"