SQL/JSON в PostgreSQL 15. Крупные патчи, разработанные командой Postgres Professional, войдут в новую версию СУБД PostgreSQL
www.samag.ru
     
Поиск   
              
 www.samag.ru    Web  0 товаров , сумма 0 руб.
E-mail
Пароль  
 Запомнить меня
Регистрация | Забыли пароль?
Журнал "Системный администратор"
Журнал «БИТ»
Наука и технологии
Подписка
Где купить
Авторам
Рекламодателям
Магазин
Архив номеров
Контакты
   

  Опросы
1001 и 1 книга  
12.02.2021г.
Просмотров: 9635
Комментарии: 7
Коротко о корпусе. Как выбрать системный блок под конкретные задачи

 Читать далее...

11.02.2021г.
Просмотров: 10000
Комментарии: 12
Василий Севостьянов: «Как безболезненно перейти с одного продукта на другой»

 Читать далее...

20.12.2019г.
Просмотров: 17132
Комментарии: 1
Dr.Web: всё под контролем

 Читать далее...

04.12.2019г.
Просмотров: 15983
Комментарии: 13
Особенности сертификаций по этичному хакингу

 Читать далее...

28.05.2019г.
Просмотров: 16890
Комментарии: 6
Анализ вредоносных программ

 Читать далее...

Друзья сайта  

Форум системных администраторов  

sysadmins.ru

 SQL/JSON в PostgreSQL 15. Крупные патчи, разработанные командой Postgres Professional, войдут в новую версию СУБД PostgreSQL

Статьи / SQL/JSON в PostgreSQL 15. Крупные патчи, разработанные командой Postgres Professional, войдут в новую версию СУБД PostgreSQL

Автор: SA

В Москве прошла международная техническая конференция PGConf.Russia для ИТ-сообщества по открытой СУБД PostgreSQL. Постоянный организатор конференции -российский разработчик систем управления базами данных компания Postgres Professional.

 

SQL/JSON в PostgreSQL 15
Крупные патчи, разработанные командой Postgres Professional, войдут в новую версию СУБД PostgreSQL

В Москве прошла международная техническая конференция PGConf.Russia для ИТ-сообщества по открытой СУБД PostgreSQL. Постоянный организатор конференции -российский разработчик систем управления базами данных компания Postgres Professional.

 

На конференции, в частности, обсуждались новинки PostgreSQL 15, так как первая бета-версия уже доступна сообществу. Генеральный директор Postgres Professional Олег Бартунов рассказал о новых фичах SQL/JSON, принятых в 15-ю версию PostgreSQL, работа над которыми велась в компании несколько лет.

Сейчас 15-я версия PostgreSQL находится на стадии feature freeze, когда изменения, вошедшие в релиз, уже утверждены и добавление новой функциональности не планируется. Выпуск состоится осенью 2022 года, в него включат серию патчей, расширяющих возможности формата JSONB и обеспечивающих его совместимость со стандартом SQL:2016. Эти патчи были представлены компанией Postgres Professional более четырех лет назад, но сообществу PostgreSQL потребовалось существенное время на их рассмотрение и усовершенствование.


Введение в SQL/JSON

В PostgreSQL есть два типа данных JSON: непосредственно сам JSON и JSONB. Тип данных JSON предназначен для хранения точной копии входного JSON в текстовом виде. JSONB представляет собой бинарное хранилище для данных JSON, преобразованных в типы PostgreSQL, согласно правилам, описанным в документации для примитивных типов JSON и соответствующих типов PostgreSQL. В модели данных SQL/JSON к примитивным типам добавляется тип DateTime, однако, он используется только для операторов сравнения в выражении пути и хранится в базе в виде строки. Успешное применение JSON[B] в PostgreSQL привело к тому, что все основные СУБД стали поддерживать его использование. Позже формат стал основной возможностью, описанной в стандарте SQL:2016.

Стандарт SQL :2016 описывал JSON не как отдельный тип данных, как это сделано с XML, а как новые средства работы с текстовым полем, в котором может храниться JSON. Тем не менее, в PostgreSQL поддержка SQL/JSON реализована на базе имеющихся типов данных JSON и JSONB.

Стандарт SQL:2016 описывает два набора функций для работы с JSON: функции построения (конструкторы) и функции запросов. Конструкторы используют значения SQL-типов и дают на выходе JSON-значения (скаляры, массивы или объекты). Для функций запросов в стандарте определён язык путей JSONPATH, с помощью которого можно адресовать отдельные элементы в рамках структуры JSON.


SQL-2016

 

PostgreSQL

Итак, какие патчи добавлены в готовящийся выпуск?


Новейшие возможности PostgreSQL 15, связанные с JSON[B]

  • Предикат IS JSON, который обеспечивает валидацию текстовых документов в формате JSON и должен присутствовать в СУБД согласно стандарту SQL:2016.
  • Стандартные SQL/JSON конструкторы представляют собой набор функций, таких как JSON (), JSON_ARRAY (), JSON_ARRAYAGG (), JSON_OBJECT () и JSON_OBJECTAGG (). Они эквивалентны уже существующим функциям JSON/JSONB и дополняют их возможностью принятия входных данных BYTEA и обработки повторяющихся ключей и null-значений;
  • Функция JSON_TABLE обеспечивает преобразование данных в формате JSON в реляционное представление и дальнейшую обработку этих данных в виде таблицы.
  • Функции запросов SQL/JSON апросов SQL/JSON позволяют выполнять запросы к содержимому JSON с помощью выражений JSONPATH. Эти функции – JSON_EXISTS (), JSON_QUERY (), JSON_VALUE () – работают только для JSONB.


Подробнее о новшествах SQL/JSON

Когда мы добавляем новую функциональность в такой масштабный проект, как PostgreSQL, важно понимать, какие преимущества это даст.

Функция JSON_TABLE – то, чего все долго ждали. Она выполняет запрос над содержимым JSON и представляет результаты в виде реляционной таблицы, которую далее можно использовать как самую обычную таблицу, например, для операций объединения и агрегации.


Почему соответствие стандарту так важно?

SQL/JSON обеспечивает соответствие стандарту SQL:2016 и функциональную совместимость с другими СУБД, которые поддерживают этот стандарт. Стандарты упрощают жизнь разработчиков, и появление SQL/JSON позволит им писать код, который одинаково хорошо работает с различными СУБД, если они, конечно, тоже следуют стандарту. Миграции с одной СУБД на другую тоже станут существенно легче. Под утверждением, что стандарты упрощают жизнь, имеются в виду реальные вещи.

Улучшенные возможности для извлечения данных - еще одно достоинство нового релиза. Используя новые функции, мы можем оперировать данными различными способами:

 

Нужно добавить, что многие возможности SQL/JSON, которые войдут в PostgreSQL 15, опираются на язык путей JSONPATH, позволяющий адресовать и фильтровать данные внутри JSON. Этот язык доступен пользователям Postgres, начиная с 12-й версии. Новые функции SQL/JSON изначально совместимы с JSONPath, поскольку работа над ними велась одновременно.


Предикат IS JSON нужен для валидации текстовых JSON-документов. С его помощью можно исследовать структуру данных JSON, обнаруживать структурные ошибки внутри JSON-документов, также находить подозрительное содержимое и пустые документы.

Механизм валидации позволит реализовать более крупные проекты – например, JSON Schema. Этот проект устанавливает общие правила валидации и описания JSON-документов для многих популярных SQL и NoSQL СУБД.

В настоящее время JSON Schema находится в разработке, но несколько компаний уже готовы поддержать это начинание. Проект предусматривает стандартизацию описания для типов данных, полей, ключей, значений, массивов и т.д. После того, как он будет доступен в PostgreSQL, мы сможем реализовать и словарное сжатие JSON, поскольку длинные ключи, описанные в JSON Schema, можно будет заменить их короткими идентификаторами.





От первого лица


NoSQL в PostgreSQL: как всё начиналось

Рассказывает Олег Бартунов, генеральный директор Postgres Professional.

– В следующем году исполнится 20 лет с момента первых разработок, связанных с поддержкой слабоструктурированных данных в Postgres. Мы участвуем в разработке NoSQL-возможностей для PostgreSQL с 2003 года – чтобы СУБД стала универсальной и одинаково хорошо работающей в самых разных случаях.

В 2003 году мы с техническим директором Федором Сигаевым создали тип данных HSTORE для хранения произвольных пар ключей и значений, что еще тогда позволило реализовать schemaless-подход в PostgreSQL. В 2006 год у HSTORE стал частью PostgreSQL, а впоследствии именно его улучшения подвели нас к созданию JSONB. Ранние посты о работе над JSONB доступны в моём аккаунте LiveJournal. На слайде ниже представлена краткая история эволюции NoSQL-возможностей в PostgreSQL:

 

Это слайд из моей презентации на конференции PGConf US 2017 в Джерси-сити, которая проходила 28-31 марта 2017 года. Таким образом, с момента первого упоминания SQL/JSON прошло пять лет.

Как видно из слайда, изначально патчи SQL/JSON были отправлены на рассмотрение в сообщество в 2018 году. Обсуждение большого патча и внесение изменений в него на основе обратной связи от сообщества – трудоемкая процедура, занимающая значительное время. Но только так можно обеспечить исключительное качество кода PostgreSQL. Следующий слайд хорошо иллюстрирует этот тезис:

 

Чтобы функциональность SQL/JSON добралась до стадии «закоммичено», потребовалось рассмотреть 65 версий патча. Спустя 59 версий состоялся коммит JSON_TABLE. Хочется ещё раз сказать спасибо всей огромной интернациональной команде PostgreSQL, которая занималась этим проектом пять лет.

Сейчас патчи уже в основной ветке, а это значит, что осенью они станут доступны вместе с выпуском PostgreSQL 15.


Будущее слабоструктурированных данных в PostgreSQL

В ближайшие годы мы продолжим работать над различными улучшениями, связанными с JSONB. С внедрением JSON Schema потребуется улучшить сжатие JSON-документов в PostgreSQL. Мы провели ряд экспериментов с автоматическим словарным сжатием, но столкнулись с проблемами «распухающих» словарей, параллельных обновлений и т.д. По сравнению с этим подходом JSON Schema выглядит лучше, поскольку ключи становятся известны в процессе определения схемы.

Мы также будем работать над тем, чтобы ускорить обработку JSON-документов в Postgres. В своей презентации на PGConf NYC 2021 я рассказывал о проблеме с функционированием TOAST. Изначально этот механизм был создан для работы с атомарными типами данных, он не учитывает внутреннюю структуру составных типов данных (JSONB, HSTORE) и даже обычных массивов. При любом незначительном обновлении JSON накладные расходы существенно увеличиваются. Мы провели серию экспериментов и доказали, что TOAST, который сможет учитывать тип данных, будет работать быстрее. Результатом этой работы стал новый патч (pluggable TOAST patch), который уже представлен сообществу для получения обратной связи.

На скриншоте ниже можно увидеть результаты различных оптимизаций, которые мы применили в рамках нашего проекта JSONB toaster for pluggable TOAST (названия конкретных оптимизаций приведены справа.) Если мы применим их все (+all), то получим ускорение на два порядка.

На данный момент SQL:2016 уже не является последней версией стандарта, поэтому нам нужно обеспечить соответствие требованиям SQL:2019. В нём SQL JSON уже описан не как модель, а как тип данных. Это большой прогресс по сравнению с SQL:2016, и это шаг в сторону PostgreSQL.

Как я уже объяснял, в PostgreSQL таких типов даже два - текстовый тип JSON и бинарный JSONB, каждый из них имеет свои плюсы и минусы. Следовательно, нужно сохранить возможность выбора, но при этом привести PostgreSQL к стандарту, согласно которому тип должен быть один.

Пользователи хотят по-прежнему выбирать, что им нужно - медленный текстовый JSON или быстрый бинарный JSONB. Нужно найти решение, которое при введении единого типа не лишит их этой возможности. Внутри Postgres Professional мы уже разработали Generic JSON (GSON) API, который унифицирует доступ к JSON и JSONB. GSON API также позволит нам разработать простое решение для выбора между ними. Впервые я говорил об этом на Postgres Build 2020, представляя роадмап для развития JSONB. Это довольно удачный выход из положения, который не предусматривает никаких существенных изменений для пользователей PostgreSQL (и JSONB!), однако, чтобы воплотить его в жизнь, нам потребуется написать некоторое количество кода и обсудить эти изменения с сообществом.

Логично, чтобы SQL СУБД работала в соответствии с SQL-стандартами, даже когда это касается хранения документов. SQL/JSON – важная веха в истории развития PostgreSQL, следующим нашим шагом должно стать соответствие формата стандарту SQL:2019.

Возможности NoSQL внутри PostgreSQL востребованы, и работа над ними будет продолжена. Сегодня многие разработчики программного обеспечения предпочитают работать с документами, и теорию реляционных СУБД хорошо знает далеко не каждый. Проведенный в прошлом году опрос «State of PostgreSQL 2021» ясно продемонстрировал важность JSON[B] для пользователей.

По моим наблюдениям, именно это объясняет популярность PostgreSQL, неуклонно растущую с 2014 года.

Разработчикам PostgreSQL нужно учитывать интересы нового поколения пользователей NoSQL СУБД, в этом случае мы сохраним свое место в пятерке самых популярных решений для баз данных. До сих пор мы находились на верном пути.

Все разработчики Postgres Professional видят огромную работу, которую год за годом выполняет сообщество PostgreSQL. Как часть этого сообщества, мы тоже стараемся вносить свой вклад в развитие СУБД. Сейчас на рассмотрении находятся разработанные нами патчи, такие как уже упомянутый мной pluggable TOAST и 64-битный счётчик транзакций, позволяющий сделать практически безграничным число доступных идентификаторов транзакций и навсегда решить проблему wraparound (пользователям Postgres Pro Enterprise 64-битный счетчик доступен уже давно, но мы намерены поделиться им с сообществом). Если вы хотите поучаствовать в обсуждении этих патчей, мы будем рады вашим идеям и комментариям.

 

Ключевые слова: разработчики Postgres Professional, JSON-документы, поддержка SQL/JSON, 15-ю версия PostgreSQL


Подпишитесь на журнал
Купите в Интернет-магазине

Комментарии отсутствуют

               Copyright © Системный администратор

Яндекс.Метрика
Tel.: (499) 277-12-41
Fax: (499) 277-12-45
E-mail: sa@samag.ru