Данное решение, основанное на современной версии PostgreSQL, позволит масштабировать запись и обработку данных в СУБД в OLAP и OLTP-системах, обеспечивая при этом высокий уровень доступности. Внедрение этой функциональности увеличит надежность использования PostgreSQL в высоконагруженных промышленных системах. Реализация будет осуществляться в несколько этапов.
На первом этапе будет разработан дистрибутив отказоустойчивой Single-master конфигурации PostgreSQL с возможностью масштабирования по чтению. В результате этого этапа будет получена возможность сравнительно несложного разворачивания отказоустойчивых кластеров с полным резервированием в условиях динамически изменяющихся вычислительных сред (например, облачных сред).
На втором этапе предполагается создание Multi-Master кластера высокой доступности с масштабированием по чтению данных. В результате этого этапа будет получен отказоустойчивый кластерный дистрибутив, масштабируемый по чтению при увеличении числа узлов в системе. При этом общая емкость хранения данных сможет превышать доступное место для хранения на каждом из узлов в отдельности.
На третьем этапе предполагается создание распределенного отказоустойчивого кластера с масштабированием по записи данных. В результате этого этапа будет получен отказоустойчивый кластерный дистрибутив, масштабируемый как по чтению, так и по записи при увеличении числа узлов в системе.
Преимуществом полнотекстового поиска, встроенного в СУБД, по сравнению с внешними специализированными поисковыми движками, является возможность комбинировать полнотекстовые и атрибутивные критерии поиска в синтаксисе SQL-запросов. Планируется усовершенствовать имеющийся в PostgreSQL механизм полнотекстового поиска путем расширения функциональности обобщенного обратного индекса (GIN) для хранения в нем дополнительной информации, требующейся для ранжирования результатов запросов. Ускорение поиска позволит отказаться от использования внешних систем полнотекстового поиска, что облегчит администрирование систем, их использование,снизит технические риски, и повысит уровень информационной безопасности.
Существующая реализация B-Tree индексов неэффективна для работы с дублирующимися ключами, т.к.в этом случае имеет место неоправданное увеличение размера индекса. Предполагается разработать функциональность компресии для B-Tree по аналогии с уже реализованной компрессией в GIN-индексах.
PostgreSQL является расширяемой СУБД, что означает возможность добавления новой функциональности, типов данных, поддержки новых процедурных языков силами прикладных разработчиков. Российские разработчики обладают самой значительной экспертизой в подсистеме расширяемости PostgreSQL, в частности, разработали индексные методы доступа GiST, GIN, SP-GiST.
Существующая в PostgreSQL инфраструктура индексов допускает создание многоколоночных индексов только с использованием одного и того же метода доступа (access method) для всех задействованных колонок, что ограничивает возможности индексного поиска (например, полнотекстовый поиск с географической привязкой в одном индексе). Кроме того, PostgreSQL уже поддерживает такие сложные типы данных, как JSONB, имеющие внутреннюю структуру и требующие эффективных способов индексации. Для решения этих проблем планируется разработать новую индексную инфраструктуру, позволяющую эффективно комбинировать разные методы доступа к сложным объектам. В настоящее время имеется ее прототип, но его дальнейшее развитие и интеграция в существующую версию являются трудоемкими задачами.
Использование индексов позволяет избежать большого числа обращений к таблице, что существенно повышает производительность. Эффективность достигается в первую очередь за счёт того, что индекс имеет оптимизированную под поиск структуру, например, сбалансированного дерева (B-tree). Однако, необходимо учитывать издержки на поддержание индексов в актуальном состоянии. Они заключаются в возможном снижении скорости обновления таблиц и в том, что индексы со сложной структурой могут занимать много места на диске. Таким образом, реализация эффективных индексных структур данных имеет определяющее значение для любой СУБД.
Для систем, ориентированных на интенсивную запись, требуется высокая производительность обновления индексов. В настоящее время активно ведется разработка новых алгоритмов индексации на основе кэш-оптимизированных структур данных. Различные их реализации применяются во многих современных СУБД. Планируется добавление в PostgreSQL нового индексного метода доступа, оптимизированного для записи.
СУБД PostgreSQL в отличие от других реляционных СУБД обладает богатыми возможностями работы со слабо структурированными данными. Благодаря разработанной технологии работы с данными в формате JSON и JSONB, PostgreSQL сочетает в себе такие преимущества традиционных СУБД, как транзакционность, атомарность изменений и целостность данных, с гибкостью NoSQL без потери производительности.
Доработка языка запросов к слабоструктурированным данным позволит формулировать на языке SQL более сложные запросы и достичь повышения производительности благодаря упрощению структур данных, переносу сложной фильтрации данных из приложений на сторону СУБД и более эффективному использованию индексов.
Современные методы машинного обучения открывают новые перспективы для СУБД. Многие задачи, такие как балансировка нагрузки, расчет плана выполнения запросов, построение эффективных индексов и многие другие СУБД решаются с помощью общих методов, гарантирующих приемлемые показатели эффективности для всех видов данных и широкого круга сценариев использования. В то же время методы машинного обучения позволяют вырабатывать наиболее эффективные алгоритмы управления СУБД с точки зрения конкретных наборов данных, запросов, режима нагрузки и других меняющихся условий, а также адаптивно перестраивать данные алгоритмы в режиме реального времени.
Кроме того, машинное обучение, будучи встроенным в стандартный функционал СУБД, может существенно расширить привычную область применения СУБД. В частности, это позволит крайне эффективно и с минимальной (либо контролируемой) потерей точности выполнять запросы на больших объемах данных, где даже простой проход по всем данным невозможен в условиях реального времени. Также станет возможным не только анализ существующих, но и прогноз новых данных, качество которого растет по мере увеличения размера БД. Это позволит не только снизить требования к квалификации DBA, но и гибко реагировать на изменения распределения данных и запросов. Кроме прямого практического эффекта, это будет важным научным заделом для СУБД эпохи “Интернета вещей”.
Работа над данной задачей ведется в сотрудничестве с факультетом ВМК МГУ