Классика баз данных - статьи

       

Декларативное программирование для новых платформ


Ключевой проблемой использования компьютеров является продуктивность программистов. Это признается в течение многих лет, но наиболее известное высказывание в контексте баз данных содержится в Тьюринговской лекции Джима Грея, опубликованной десять лет тому назад. Сегодня актуальность этой проблемы возрастает буквально экспоненциально, поскольку программисты нацеливаются на все более сложные среды, включая многоядерные микропроцессоры, распределенные службы и платформы «облачных вычислений» (cloud computing). Неквалифицированным программистам требуется возможность легко писать надежные программы, масштабируемые при возрастании числа процессоров как в слабосвязанных, так и в сильносвязанных архитектурах.

Хотя разработка новых парадигм программирования не является проблемой баз данных как таковых, декларативное программирование и оптимизация на основе оценок обеспечивают обнадеживающий угол атаки. Имеются существенные основания, чтобы полагать, что подходы, ориентированные на обработку данных, в краткосрочной перспективе могут сильно воздействовать на программирование в целом.

Одним из примеров потенциала этих подходов является наблюдаемая в последнее время популярность Map-Reduce. В подходе Map-Reduce привлекает его простота; он основывается на языковых методах и методах распараллеливания по данным, известных в течение десятилетий. Для исследователей баз данных значимость подхода Map-Reduce состоит в том, что он демонстрирует преимущества программирования с распараллеливанием по данным новым классам разработчиков. Это создает сообществу баз данных благоприятные возможности расширить свое влияние путем разработки более мощных и эффективных языков, а также механизмов поддержки времени выполнения, которые помогут этим разработчикам решать более сложные проблемы.

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


Другим примером может служить то, что в последнее время разрабатываются новые декларативные языки, часто основывающиеся на Datalog, для разных проблемно-ориентированных систем в различных областях: сетевых и распределенных систем, компьютерных игр, машинного обучения и робототехники, компиляторов, протоколов безопасности и извлечения информации. Во многих из этих сценариев использование декларативного языка позволяет на порядки величин сократить объем кода, одновременно обеспечивая его распределенное или параллельное исполнение. Как не странно, группы, выполняющие эти работы, очень мало скоординированы – движение за возрождение декларативных языков в этих новых контекстах возникло стихийным образом.

Насчет возрождения Datalog у меня сейчас нет информации. Известна тяга молодежи к функциональному программированию, а увлечения логическим программированием, по крайней мере, в России пока я не наблюдаю.

Третий пример происходит из области программирования корпоративных приложений. В недавно появившихся языковых расширениях, таких как Ruby on Rails

и LINQ, поддерживается логика запросов в паттернах конструирования программ. Но в этих пакетах пока серьезно не решается проблема программирования с использованием нескольких машин. Для корпоративных приложений ключевым решением распределенной разработки является разделение логики приложения и данных между несколькими «звеньями» («tier»): Web-клиентами, Web-серверами, серверами приложений и серверной СУБД. Особо ценной здесь является независимость данных, позволяющая создавать программы без предварительного принятия долговременных решений о физическом размещении программ и данных в разных звеньях. Такие решения могли бы приниматься в автоматических процессах оптимизации и перемещения данных и программ для достижения должной эффективности и корректности. Одним из существующих языков является XQuery, который может способствовать этому виду декларативного программирования, в частности, потому, что XML часто используется в протоколах, охватывающих несколько звеньев.



Замечание относительно автоматического распределения программ и данных между разными уровнями многозвенной архитектуры мне кажется очень важным. Безусловно, этим нужно заниматься, хотя пока не очень понятно, как.

Непривычно видеть колоссальную энергию, которая окружает разработку новых методов программирования, ориентированных на данные, но вместе с новыми возможностями приходят и новые проблемы. Перед исследователями встают вопросы разработки языков, эффективных компиляторов и систем поддержки времени выполнения, а также методов автоматической оптимизации кода при его горизонтальном разделении между параллельными процессами и вертикальном разделении между звеньями. Кажется естественным, что методы организации параллельных и распределенных баз данных (разделенные потоки данных, оценочная оптимизация запросов) следует расширить применительно к новым средам. Однако для достижения успеха эти языки должны обладать должной выразительностью, превышающей возможности простых подходов Map-Reduce и Select-Project-Join-Aggregate. Здесь требуется работа по «синтезу» для подбора полезных методов на основе литературы по базам данных, языкам логического программирования и оптимизации, а также по расширению этих методов для новых программных сред.

Для усиления воздействия на практику в предлагаемых методах требуется также обращать внимание на более тонкие аспекты, пленяющие сердца и умы программистов, такие как привлекательный синтаксис, типизация и модульность, средства разработки и простота взаимодействий с другими компонентами компьютерной экосистемы (сети, файлы, пользовательские интерфейсы, Web-сервисы, другие языки и т.д.).

Для выполнения этой программы требуется, чтобы исследования баз данных вышли за пределы своих традиционных границ и были объединены с исследованиями в других областях применения компьютеров. Возникает уникальная возможность фундаментального «реформирования» понятия управления данными: от службы хранения данных к широко применимой парадигме программирования.

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


Содержание раздела