kstep 21.05.2010 18:44
Мой OpenSource проект — FusqlFS — файловая система для администрирования СУБД PostgreSQL (а дальше — больше)
Когда-то давным-давно появилась у меня идея сделать так, чтобы можно было монтировать базу данных в файловую систему и видеть все таблицы, индексы, юзеров и прочие артефакты как файлы.Сначала я попытался найти подобный fuse-демон в сети, но аналогов не было видно нигде, несмотря на идею, лежащую на поверхности.
Начал я тогда писать на Си, понял, что писать буду долго, и взялся за Перл... Тогда я написал на коленке достаточно простую обвязку для монтирования MySQL.
Ну люблю я перл, люблю. Любителям спрашивать «А почему не питон?» дарю встречный вопрос: «А почему не перл?»
С тех пор прошло много времени. Я вырос и набрался опыта. И вот недавно решил перебрать свои исходники. В тайных закромах нашёл свою древнюю поделку. Сначала обрадовался. А потом ужаснулся, глядя на непонятную горку кода, модифицировать которую почти невозможно. В итоге переписал всё практически с нуля, полностью переработав концепцию.
Так что лежит сейчас проект на гитхабе. Прошу любить и жаловать!
(По крайней мере там основная относительно стабильная ветка, которую я хочу показать общественности.)
Сейчас реализована работа с PostgreSQL, потому что именно с ней я имею дело больше всего, но и MySQL в моём ближайшем TODO-листе.
Сейчас есть возможность:
Смотреть, создавать и удалять таблицы как простые каталоги,Смотреть, создавать, удалять и править поля, индексы и записи в таблицах как файлы и каталоги,Смотреть констрейнты в таблицах (пока только смотреть, правка в процессе реализации),Смотреть, создавать и удалять роли и последовательности,Смотреть и удалять представления (правка ещё не оттестирована и не доделана),Делать произвольные запросы, записывая их в особые файлы.
Данные могут быть представлены в форматах YAML, JSON или XML (YAML по-умолчанию).
Статус приложения — альфа, находится в активной разработке. Использовать на свой страх и риск (хотя я сейчас ею активно админю постгресные таблички на своей девелоперской копии БД на основной своей работе). Любые багрепорты приветствуются.
Репозиторий на гихабе: http://github.com/kstep/fusqlfs.
Баги пока можно писать в тот же багтрекер, потом может поставлю себе что получше если понадобится.
Справка на гитхабе же висит. Здесь примеры для разогрева =)
Установка и запуск
Требуемые перлоыве модули (см. CPAN): Fuse, YAML::Tiny/JSON::Syck/XML::Simple (хотя бы один из них, желательно первый), Carp, DBI, DBD::Pg.
1 |
$ git clone git://github.com/kstep/fusqlfs.git fusqlfs
|
Использование
И так далее до бесконечности...
Заметки
Версия очень-очень альфа, некоторые опции, описанные в README, не до конца отлажены или пока не реализованы.
В частности:
Кеширование в файлы (--cache=file) пока не отлажено, периодически падает, используйте на свой страх и риск,Параметр --fnsep пока не реализован, так что будут проблемы с точками в текстовых primary key,Также пока никак не влияют на работу параметры --debug и --innodb (последний просто потому, что MySQL пока не поддерживается, но будет).
Все метаданные о базе данных кешируются, так что если БД изменилась без ведома программы, то обновить кеш можно, послав этому демону сигнал USR1:
Если кого-то этот проект заинтересует, то мне очень нужны багрепорты. Ну и если кто патчи будет слать — милости прошу =)
Хотя тех. документации там тоже не хватает, это дело тоже в моём TODO-списке... Катастрофически не хватает времени, так что буду рад любой помощи.
digiwhite 21.05.2010 21:08 #
+ 1 -
Вообще не работаю с бд, но идея интересная и понравилась. Наверное это будет полезно в дальнейшем тем, кто работает с бд. Потом приделать плагины к наутилусу и дельфину И вообще будет хорошо :).
ФС не ФС, но все же информацию то получать специфичную надо, а не какую-то общую.
так суть в том, чтобы без плагинов и надстроек в файловой системе отобразить базу данных. или я не прав?
Да вроде как правы. Вообще не в курсе что там внутри у fuse, какой интерфейс она предоставляет и какой набор методов/действий надо реализовывать. Понятно что типа удалить/создать наверное не потребует никих дополнительных реализаций. А вот редактирование или еще что-то более экзотическое...
Всё модульно. Каждый артифакт базы данных — класс, реализующий базовые операции (создать, удалить, изменить). Над ним прослойка, транслирующая путь файловой системы в собственно класс, а над той прослойкой ещё прослойка для fuse-а.
То есть для того, чтобы представить в этой фс новый артифакт БД достаточно написать класс с нужными методами, остальное фреймворк сделает сам.
Позже ещё напишу подробную доку по всем модулям и инструкцию для написания своих модулей.
То есть для того, чтобы представить в этой фс новый артифакт БД достаточно написать класс с нужными методами, остальное фреймворк сделает сам.
Позже ещё напишу подробную доку по всем модулям и инструкцию для написания своих модулей.
Эх жаль пост плюсануть не могу, рейтинга на хватает =)
На за перл респект и уважуха )))
На за перл респект и уважуха )))
Пока не пробовал, но, по-моему, это круто, реально круто. Приеду домой — попробую обязательно.
Carp из списка требуемых модулей, думаю, можно убрать.
Он юзается местами, например в классах, реализующих разные модели кеширования.