Стандартизация SQL с учётом информационных трендов, в частности квантовых технологий
SQL — это как язык для программистов, так и мощный инструмент для всех специалистов, которые работают с базами данных. SQL имеет множество преимуществ: он используется на международном уровне, «инструменты SQL внедрены во все пакетные решения» [1, с. 3], имеет поддержку во всех языках программирования, все системы управления базами данных понимают этот язык и многие другие плюсы.
Также, SQL бурно развивается, принося в себя все больше новых функций. Лишь последний стандарт принес в язык более 40 новых функций, 20 из которых относятся к функционалу JSON, а еще 10 к полиморфным табличным функциям. Поэтому SQL и начинает иметь все более увеличивающийся спрос.
Помимо всех вышесказанных нововведений, в SQL также начинают приходить квантовые технологии. На данный момент в языке уже есть квантовое шифрование и это только начало.
Развитие SQL
За все время существования SQL систематически обновляется и вводит новые функции и операторы, не останавливаясь и соответствуя тенденциям времени. Это можно проследить на графике (График 1), а также сделать вывод, что линия тренда восходящая, а следовательно язык развивающийся и востребован. Сегодня с SQL работает большое количество известных организаций, такие как: Oracle, DB2, Mongo DB, Cassandra (связанная с банками, Facebook, Twitter и их финансовой деятельностью), Elasticsearch и другие.
Так, в 1999 году ввели ключевые слова, различные определяемые пользователем типы питания, общие табличные выражения и рекурсивные запросы, управление доступом на основе ролей, некоторые возможности OLAP и многое другое. В 2003 ввели оконные функции, функции, связанные с XML, генератор последовательностей, который позволяет стандартизировать последовательности, расширения для инструкции CREATE TABLE, чтобы разрешить «CREATE TABLE AS» и «CREATE TABLE LIKE», удаление плохо реализованных типов данных «BIT» и «BIT VARYING», два новых типа столбцов: автоматически генерируемые значения и столбцы удостоверений, Возможности OLAP были расширены с помощью оконной функции, новая инструкция MERGE и т. д. В 2006 добавили определение способов использования SQL в сочетании с XML, он определяет способы импорта и хранения XML-данных в базе данных SQL [2, с. 78], манипулирования ими внутри базы данных и публикации как XML, так и обычных SQL-данных в XML-форме. Кроме того, он позволяет приложениям интегрировать в свой SQL-код использование XQuery, языка запросов XML, опубликованного консорциумом World Wide Web Consortium (W3C), для одновременного доступа к обычным SQL-данным и XML-документам. В 2008 году ввели отображение в журналах служб SQL Server Integration Services общего количества строк, отправленных в потоки данных[1], улучшенные операторы MERGE и DIAGNOSTIC, добавили инструкцию TRUNCATE TABLE, секционированные таблицы JOIN, поддержка различных функций сопоставления регулярных выражений XQuery /шаблонов, усовершенствования производных имен столбцов, исправили проблему с включенным прозрачным шифрованием данных и предоставление доступа к нему, улучшена работа с функциями последовательностей в плане параллельного выполнения[2] и другое. В 2011 году ввели: определения периода времени используют два стандартных столбца таблицы в качестве начала и конца именованного периода времени с закрыто-открытой семантикой. Это обеспечивает совместимость с существующими моделями данных, кодом приложения и инструментами. Определение таблиц периодов времени приложения с использованием аннотации PERIOD FOR. Обновление и удаление строк времени приложения с автоматическим разделением периодов времени. Временные первичные ключи, включающие периоды времени приложения с необязательными неперекрывающимися ограничениями через предложение WITHOUT OVERLAPS. Временные ограничения референтной целостности для таблиц времени приложений. Определение системных таблиц с использованием аннотации и модификатора. Системные периоды времени поддерживаются автоматически. Ограничения для таблиц с версиями системы не обязательно должны быть временными и применяются только к текущим строкам PERIOD FOR SYSTEM_TIMEWITH SYSTEM VERSIONING. Время применения и управление версиями системы могут использоваться вместе для создания таблиц bitemporal. В 2016 году же ввели возможность настроить несколько файлов базы данных tempDB во время установки и настройки SQL Server. В базе данных нового хранилища запросов хранятся тексты запросов, планы выполнения и метрики производительности. Это позволяет легко выполнять мониторинг и устранять проблемы с производительностью. На панели мониторинга указано, какие запросы потребляют больше всего времени, памяти или ресурсов ЦП. Темпоральные таблицы — это хронологические таблицы, в которые записываются все изменения данных, а также дата и время таких изменений. Новые встроенные средства поддержки JSON в SQL Server обеспечивают импорт, экспорт, синтаксический анализ и хранение файлов JSON. Новый обработчик запросов PolyBase интегрирует SQL Server с внешними данными в Hadoop или хранилище BLOB-объектов Azure. Теперь вы можете импортировать и экспортировать данные, а также выполнять запросы[1]. И множество дополнений, таких как:
Распознавание образов строк: сопоставление последовательности строк с шаблоном регулярного выражения
Форматирование и синтаксический анализ даты и времени
LISTAGG: функция для преобразования значений из
группы строк в строку с разделителямиПолиморфные функции таблицы: табличные функции без
предопределенного типа возвращаемого значенияНовый тип данных DECFLOAT.
Однако как бы язык ни обновлялся и не создавались новые полезные функции, SQL все равно имеет недостатки, число которых растет каждый год, ведь наш мир не стоит на месте, технологии развиваются с каждым днем и наши запросы растут.
Несмотря на существование стандарта SQL многие компании, такие как: Oracle, Sybase, Microsoft, MySQL AB вносят свои изменения в язык, тем самым отступая от него, хотя SQL поддерживается многими десятками СУБД различных типов. Так как корпорации разрабатывают собственные СУБД, к которым нужен разный подход и разные функции, в итоге появляются «диалекты» языка SQL, в которых несложно запутаться. К 2032 году (год выпуска нового стандарта SQL, в соответствии с расчетами) решится данная проблема и SQL сможет применяться ко всем различным СУБД, единый стандарт будет использоваться всеми пользователями и приложениями, пренебрегая собственные разработки.
Сейчас все больше и больше людей выбирают «облако». Облачные хранилища, облачные платформы вычисления, например Amazon EC2, GoGrid, Rackspace входят в оборот, и скорее всего все данные, существующий сейчас, будут перенесены в облака, которые имеют множество плюсов (доступность из любой точки, мобильность, безопасность и т. д.). На данный момент SQL работает с реляционными СУБД и, чтобы в будущем не стать забытым языком, разработчикам придется создать структуру взаимодействия с облачными платформами, возможно придется прибегнуть к партнерству с Amazon или Rackspace.
Развитие SQL с использованием квантовых технологий
Современные тренды предполагают новые виды вычислительной техники, в частности квантовые технологии. Безусловно, в будущем нас ждет прорыв в сфере квантовых вычислительных машин, и они полностью заменят привычную нам технику.
Основным понятием в квантовой сфере является кубит или квантовый бит, он представляет из себя базовую информационную единицу. Его отличие от привычных нам битов, которые могут находиться лишь в состоянии 0 и 1, в том, что он «может пребывать в состоянии «суперпозиции» [3, с. 1] — т. е. в обоих одновременно, до измерения. Благодаря этому и достигается ускорение — вычисление идёт одновременно по всем возможным путям. С математической точки зрения кубит — «это вектор единичной длинны в двумерном гильбертовом пространстве над полем комплексных чисел» [4, с. 2].
Сфера квантовых технологий изучается не первый год, еще в прошлом веке ученые работали над созданием квантовых пк, придумывали различные алгоритмы работы с квантовыми технологиями, которые также можно использовать в sql. Пол Кокшотт выдвигал множество позиций: ускорение работы с базами данных за счет переноса их работы на квантовые компьютеры, рассмотрел проблему совместимости современных БД с квантовыми системами (объединение кортежей), а также, что немаловажно, обратил внимание на шифрование информации и предложил квантовое шифрование, чьи плюсы также будут рассмотрены нами далее в статье.
Также существует квантовый алгоритм Шора, который тоже можно использовать в SQL. Квантовый алгоритм был разработан для решения задач факторизации целых чисел и дискретного логарифмирования в конечной группе [5, с. 2]. На практике это может означать, что при наличии квантового компьютера из приблизительно 3000 кубитов криптографическая система RSA с ключом длиной 2048 битов может быть эффективно взломана за время, лишь ненамного превосходящее требующееся для зашифрования. Аналогично могут быть взломаны криптографические системы DSA, EdDSA, ГОСТ Р 34.10–2012 и ряд других асимметричных криптографических систем, не обладающих свойством квантовой устойчивости. Отметим, что на стойкость симметричных шифров и хэш-функций алгоритм Шора не оказывает влияния, поскольку для их анализа применяются другие, не столь эффективные алгоритмы. Следовательно, алгоритм Шора нам демонстрирует то несущественное количество внимания, уделенного безопасности БД.
На данный момент шифрование информации также неидеально, с этим вопросом может помочь квантовое шифрование, которое уже сегодня применяется в SQL. Данная система сосредоточена на квантовой физике, рассматривая случаи, когда информация переносится с помощью объектов квантовой механики. Процесс отправки и приёма информации всегда выполняется физическими средствами, например, при помощи электронов в электрическом токе, или фотонов в линиях волоконно-оптической связи [6, с. 528]. Например, это нововведение сможет обезопасить обработку транзакций, в сфере которых широко используются базы данных.
Но несмотря на все преимущества квантовых технологий для работы SQL, на данный момент они плохо совместимы. В реляционной модели данные хранятся в связях или таблицах. Каждая строка в таблице базы данных представляет собой кортеж отношения. Кортежи условно представлены в виде вектора битов, разделенных на поля, в которых содержится символ, взятый из некоторого двоичного кодированного алфавита, соответствующего элементу[1]. Поэтому квантовые системы просто не совместимы с современными БД. Возможно, данную проблему можно решить с помощью объединения кортежей, и тогда можно использовать взаимозависимость квантовых частиц, при которой измерения двух частиц влияют на друг друга. Данное решение можно применить и в «фрагментации объектов» [7, с. 5] бд. В теории отношение можно разбить на ряд вертикальных или горизонтальных фрагментов, и эти фрагменты будут хранится в разных узлах территориально разнесенной сети [8, с. 3].
Изменения в сфере транзакций
Транзакция — это логическая последовательность действий, которые не могут выполняться параллельно.
В языке SQL транзакции делятся на 3 типа:
Commit (сохраняет все изменения);
Rollback (отменяет изменения);
Savepoint (сохраняет изменения в определенных местах).
При работе с транзакциями используются команды INSERT, UPDATE и DELETE.
Стандартом SQL выделены 4 уровня изоляции транзакций, такие как: «read uncommited» (позволяет читать незафиксированные данные), «read committed» (зафиксированные), «repeatable read» (повторяемое чтение) и «serializable»
Технологии транзакций, существующие на сегодняшний день абсолютно не совместимы с квантовыми компьютерами, потому что кубиты имеют систему запутанности, которая предполагает, что система не находится однозначно в точном состоянии. То есть существует неопределенное состояние системы, которая зависит именно от «субъективной оценки смотрящего» [9, с. 216] состояния. Например, возьмём два кубита, находящихся в состоянии, при котором вектор не представляется произведением векторов одиночных кубитов. Если мы измерим Кубит 2, то в равной вероятности он будет находится в состояние 0 или 1, если же состояние оказалось 0 то Кубит 1 будет в состояние 1, при состояние Кубита 2 — 1, Кубит 1 станет 0. Следовательно, если мы измеряем какой-то из запутанных кубитов, этот процесс так же действует и на состояние другого кубита системы.
Это дает понимание того факта, что даже частичный перенос работающих сейчас технологий транзакций на квантовые совершенно невозможен, так как нет «однозначно определенного состояния» [10, с. 5] системы. А значит создается критическая ситуация для языка SQL, так как транзакции используются повсеместно. То есть при переходе на квантовые пк, SQL будет необходимо разработать новые технологии реализации транзакций с нуля. Скорее всего за опору возьмут недавно разработанный язык компании Microsoft. Для выполнения транзакции будут первоначально выполнятся коды для удержания кубита точно в позиции 0 или 1:
operation Set (desired: Result, q1: Qubit)
let current = M(q1)
if (desired != current)
X(q1).
Также для результатов транзакций сначала надо будет добавить входное значение в операцию, которая будет брать один кубит и возвращать пустой кортеж:
operation PrepareFairCoin (qubit: Qubit): Unit
H(qubit)
operation GetNextRandomBit
(statePreparation: (Qubit => Unit)):
Result:
use qubit = Qubit()
statePreparation(qubit).
Помимо прочего, любое действие будет начинаться с оператора OPERATION, а также использоваться оператор USE, для запрашивания выделения нужного нам количества кубитов.
Выводы
SQL — широко используемый язык программирования, развитие которого не останавливается на одной достигнутой точке (График 1). Его функции активно модифицируется каждые 3–4 года, предоставляя востребованный и соответствующий потребностям продукт для каждого пользователя своего времени.
В век активной разработки квантовых технологий многим сферам необходимо развиваться в этом направлении, искать новые пути, и SQL не исключение. Уже сегодня существуют пробные компьютеры, работающие на квантах, поэтому создание полноценного оборудования предполагается в самом ближайшем будущем. Для реализации данных идей SQL потребуется прибегнуть к множеству нововведений: изменение шифрования данных, реализация их объединений, создание новых процессов, операторов и функций.
Что касается транзакций, привычный для нас процесс полностью исчезнет из-за невозможности использования на квантовых пк. Так как они функционируют на квантовых битах (кубитах), которые имеют свойство запутанности, поэтому для решения данной проблемы потребуется создание новых операторов и правил для реализации кода. Например, удержание кубитов в точных позициях 0 и 1, объединение кортежей, а также разработать новые уровни изоляции, возможно, за счет квантового шифрования, минимальные технологии которого уже разработаны и имеют перспективы.
В заключении хочется выделить суть будущего стандарта SQL:
Введение единого языка для различных СУБД;
Реализация использования облачных платформ вычисления и хранилищ;
Совместимость с квантовыми компьютерами посредством объединения данных;
Реализация фрагментации объектов;
Квантовое шифрование данных;
Возможность распределение СУБД в территориально разнесенных сетях.