SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 02.09.2014 21:39:05

Retrill
Участник
Зарегистрирован: 09.10.2010
Сообщений: 21

Менеджер зависимостей на MySQL (сложная творческая задача)

Всем доброго времени!
В общем случае задача, с которой я столкнулся и которая кажется мне сложной, касается создания менеджера зависимостей различных пакетов на уровне MySQL. Чтобы объяснить, что к чему, начну с начала, которое не совсем связано с MySQL, но к нему мы придем.
В системах управления сайтами (CMS) существуют различные модули / компоненты - автономные куски кода, выполняющие определенную задачу. Они создаются различными разработчиками, никак не связанными друг с другом. И они могут устанавливаться на один и тот же сайт и должны работать совместно. Эти модули / компоненты зависят от различных библиотек (это могут быть JavaScript-библиотеки, PHP-библиотеки и пр.), которые они должны подключать. Двойное подключение одной и то же библиотеки (даже разных версий) не допускается.
Пусть каждый модуль описывает в каком-то формате, от каких библиотек он зависит, и передает информацию в некий менеджер пакетов. Тот, собрав информацию от различных модулей, выдает конечный список библиотек определенных версий, которые подлежат скачиванию / добавлению на сайт.
Да, я понимаю, что уже существуют менеджеры пакетов, которые решают схожие задачи, в частности, Composer. Но проблема в том, что они требуют предварительной установки на сервер своего ПО и совершения действий из командной строки. А мне бы хотелось решать данные задачи "на лету" - в процессе исполнения кода сайта, на каком бы языке он ни был написан.

Это было вступление, теперь ближе к делу. Задача - написать этот самый менеджер пакетов, который будет состоять из а) программной оболочки, написанной на языке программирования сайта (предположительно PHP) б) менеджера зависимостей на уровне MySQL.
Программная оболочка собирает от модулей во время исполнения кода сайта о том, какие библиотеки и каких версий им нужны. Далее делает запрос к менеджеру пакетов (т.е. MySQL). Это запрос вида SELECT ... или вызов какой-то хранимой процедуры.

Дальше - больше.
На уровне MySQL в базе данных хранится некая таблица (система таблиц со связями), представляющая  собой репозиторий библиотек. Архитектура этого репозитория - вопрос дискуссионный. Но он хранит информацию о том, какая библиотека от какой зависит (и какая версия этой библиотеки от какой версии другой - или диапазона версий) и по какому URL ее можно скачать.
На входе (запрос к MySQL) мы имеем неполный перечень библиотек, которые могут конфликтовать друг с другом и которые запрошены модулями нашего сайта. На выходе (ответ от MySQL) - либо полный перечень библиотек, которые нужно подключить, если удалось разрешить зависимости; либо сообщение о том, что зависимости разрешить не удалось. В этом случае ошибки, в идеале, хотелось бы получить сообщение вида "модуль A требует библиотеку X версии 1.1-1.3, модуль B требует библиотеку X версии 1.4-1.7, разрешить конфликт не удалось".

Кто-нибудь сталкивался с решением подобной задачи средствами MySQL? Или вообще ее решением "на лету", в процессе исполнения кода? Кто-нибудь может сориентировать, какую лучше архитектуру репозитория для этого составить и какими запросами можно достичь необходимого результата?
Сегодня не успеваю, завтра-послезавтра опишу структуру / запросы, которые приходят мне в голову, но до конца алгоритм придумать не смог. Поэтому буду признателен за любую помощь в этом вопросе.

Неактивен

 

#2 07.09.2014 17:48:21

rgbeast
Администратор
MySQL Authorized Developer and DBA
Откуда: Москва
Зарегистрирован: 21.01.2007
Сообщений: 3878

Re: Менеджер зависимостей на MySQL (сложная творческая задача)

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

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson