Postgres vs Mongo / Олег Бартунов (Postgres Professional)

YOUTUBE · 01.12.2025 04:27

Ключевые темы и таймкоды

Введение

0:05
  • Автор рад участию в конференции после возвращения из Непала.
  • Объясняет символику слона и бесконечного тора в контексте баз данных.

Представление компании и университета

1:07
  • Представляет компанию «Погрест Профессиональный» и Московский университет.
  • Упоминает работу научным сотрудником в Государственном астрономическом институте.

История работы с базами данных

1:29
  • Делится опытом создания баз данных в студенческие годы.
  • Рассказывает о переходе к революционным базам данных, таким как PostgreSQL.

Преимущества революционных баз данных

3:20
  • Объясняет преимущества интеграционных баз данных: консистентность данных и удобство работы с языком SQL.
  • Подчёркивает медлительность революционных баз данных в условиях быстрых изменений.

Развитие веб-приложений и появление NoSQL

5:09
  • Описывает изменение архитектуры веб-приложений на множество сервисов.
  • Объясняет появление NoSQL-баз данных, которые позволяют быстро менять схемы данных.

Особенности NoSQL-баз данных

6:35
  • Обсуждает масштабируемость NoSQL-баз и отсутствие необходимости полной консистентности.
  • Приводит примеры из повседневной жизни, иллюстрирующие использование NoSQL.

Проблема сочетания гибкости и целостности данных

9:32
  • Задумывается о необходимости сочетания гибкости NoSQL с целостностью данных.
  • Предлагает решение: интеграция PostgreSQL с JSON для достижения гибкости.

История гибкости в PostgreSQL

10:22
  • Упоминает о поддержке гибкости схемы в PostgreSQL с 2003 года.
  • Рассказывает о типе данных HStore, разработанном в 2003 году.

Введение в тип данных HSTORE

11:07
  • HSTORE позволяет хранить данные в виде ключей и значений.
  • Пример использования: создание единой базы данных для субъектов образования.
  • Проблема: большое количество специфических атрибутов для каждого вида субъекта.

Решение проблемы с HSTORE

12:05
  • Создание типа данных HSTORE для хранения 495 колонок в виде ключей и значений.
  • Преимущества: бинарное хранение, возможность добавления новых полей, удобство работы.

Развитие HSTORE в PostgreSQL

13:05
  • HSTORE стал частью PostgreSQL с 2006 года.
  • Недостатки: не был стандартом, не поддерживал массивы и объекты.

Появление JSON и JSONB

14:04
  • В 2012 году появился тип данных JSON, но он был медленным и неудобным.
  • Разработка вложенного HSTORE и затем JSONB.

Особенности JSONB

15:15
  • JSONB имеет бинарное хранение, более 60 функций и операторов.
  • Рост популярности JSONB после его выпуска.

Эволюция баз данных

16:16
  • Эволюция от примитивных баз данных до полнотекстовых и графовых.
  • Конвергенция между обычными базами данных и NoSQL.

Поддержка JSON в PostgreSQL

17:42
  • PostgreSQL первым поддержал JSON.
  • Различие между JSON и JSONB: бинарное хранение, отсутствие пробелов и дубликатов.

Проблемы с SQL и JSONB

19:09
  • SQL не поддерживает структуру JSON, что делает его «чёрным ящиком» для SQL.
  • Пример запроса на поиск «красненького» с помощью SQL.

Расширение GKV

21:12
  • Разработка расширения GKV для работы со структурой JSON.
  • Индексируемая поддержка операторов и функций в GKV.

Стандарт JSON в SQL

22:12
  • В декабре 2016 года стандарт SQL включил поддержку JSON.
  • Появление JSON Path Language для работы с деревом JSON.

Планы по интеграции в PostgreSQL

24:03
  • Обсуждение интеграции JSON в PostgreSQL на совещании разработчиков.
  • Надежда на включение поддержки JSON в версию 11 PostgreSQL.

Введение в JSON Path

24:27
  • Реализованы JSON Path и язык запросов для веб-приложений.
  • Поддерживаются операции с массивами, фильтрами и методами.
  • Примеры использования: функция JSON Exist для поиска ключей.

Синтаксис и функции JSON Path

25:23
  • Первый аргумент — JSON, второй — JSON Path.
  • Возможность передачи переменных для фильтров.
  • Функции для работы с JSON: JSON V, JSON Query, JSON Table.

Преимущества JSON Path

26:14
  • Возможность применения constraints к JSON.
  • Пример преобразования датасета в революционный вид.
  • Компрессия данных: уменьшение размера и улучшение локализации.

Стандартизация запросов

28:39
  • Запросы в PostgreSQL и NoSQL выглядят одинаково.
  • Доступ к примерам и документации на GitHub.
  • Веб-интерфейс для тестирования запросов.

Конвергенция баз данных

30:12
  • NoSQL-базы данных начинают понимать необходимость более сложных функций.
  • Революционные базы данных реализуют NoSQL-фичи.
  • Поддержка функциональных индексов.

Компрессия JSON

31:40
  • Проект по компрессии JSON с использованием словаря.
  • Сравнение с MongoDB: словарная компрессия работает лучше для некоторых типов данных.
  • Результаты компрессии для датасетов Delishz Bookmarks и Customer Reviews.

Производительность компрессии

33:35
  • Производительность JSON B-компрессии выше, чем у MongoDB.
  • Параллельное выполнение запросов улучшает производительность.
  • Использование CFS ZSTD для компрессии файловой системы.

Текстовый поиск

36:02
  • Текстовый поиск по JSON стал стандартным способом.
  • Патч от Дмитрия Долгова доступен в версии 10.

Бенчмарки и скептицизм

37:50
  • Ненаучные бенчмарки показывают преимущество PostgreSQL перед MongoDB.
  • Скептицизм по отношению к ненаучным бенчмаркам.
  • Необходимость научных бенчмарков для подтверждения преимуществ PostgreSQL.

Введение в бенчмарк

38:39
  • Использован бенчмарк для оценки производительности NoSQL баз данных.
  • Тестировались PostgreSQL, MongoDB, MySQL и собственная версия PostgreSQL Enterprise.
  • Условия тестирования: 10-гигабитный Ethernet, 24-ядерные серверы, 48 ГБ памяти.

Детали тестирования

39:36
  • Применялись различные workload: 50% чтения, 95% чтения и 5% записи, 100% записей.
  • Для PostgreSQL использовались асинхронные режимы работы.
  • MongoDB тестировалась с разными настройками, включая синхронизацию на диск.

Проблемы с MongoDB

40:38
  • При синхронизации на диск MongoDB сильно замедлялась.
  • Тестировались функциональные индексы, JSON, компрессия данных.
  • Обнаружена проблема с обновлением JSON, разработан патч.

Результаты тестирования

42:25
  • PostgreSQL показал лучшую производительность на всех workload.
  • После исправления проблемы с обновлением JSON производительность PostgreSQL улучшилась.
  • MongoDB начинает замедляться при большом количестве клиентов.

Сравнение производительности

44:13
  • При увеличении количества записей PostgreSQL продолжает лидировать.
  • При длинных строках PostgreSQL сталкивается с внутренними оптимизациями.
  • MongoDB иногда показывает лучшую производительность на определённых workload.

Дополнительные возможности PostgreSQL

46:17
  • PostgreSQL способен обрабатывать до 200 тысяч транзакций в секунду.
  • Партишин и шардинг позволяют значительно увеличить производительность.
  • Разрабатывается новый подход к шардингу с использованием мультимастера.

Преимущества PostgreSQL

48:00
  • PostgreSQL предлагает более широкую функциональность и поддержку стандартов.
  • Революционные базы данных решают задачи, которые NoSQL базы данных не могут.
  • PostgreSQL имеет большое опенсорсное сообщество и расширяемую архитектуру.

Заключение

51:26
  • PostgreSQL демонстрирует лучшую производительность на современном железе.
  • Функциональность PostgreSQL уже сейчас превосходит MongoDB.
  • Подчёркивается важность реляционных баз данных в условиях развития технологий.