|
|
|
Выбор СУБД для небольшой Java-утилиты
|
|||
|---|---|---|---|
|
#18+
Vladimir BaskakovПланируется под жабу, но пока дело дойдёт, то возможно уже нужно будет смотреть на новый Rust этих новых перспективных столько уже на стероидах позакопали.... у гугла - дарт и го.... тикли всякие - якобы на стероидах. Ребол всякий гениальный. Серверный джава скрипт с нодой жс. Скала... столько всего уже есть уже. еще один? Суета и томление духа. Сугубая имха. Люблю странно-маргинальное как принцип, но уже навевает тоску... Видимо, уже сказывается усталость от своей профессиональной деятельности. Ничего выше сказанное не закопано, наоборот, все развивается и используется. Согласен с тем, что зоопарк имеет и свой негатив, с этим нужно жить и выживать. На счёт Rust-а. Имхо, на сегодня это фактически единственная альтернатива (потенциальная) для ряда С++-разработок, где можно потеснить эрланг. Go и D имеют существенные проблемы. Rust - это, всё таки, не виртуальная машина пусть даже с jit-ом, с правильной моделью памяти без жабских проблем со сборкой мусора и менее проблемным способом организации межпоточных/межпроцессных взаимодействий. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.05.2013, 18:19:15 |
|
||
|
Выбор СУБД для небольшой Java-утилиты
|
|||
|---|---|---|---|
|
#18+
Vladimir BaskakovТак что я совсем совсем не понимаю, о чем речь.... Какой именно функционал про папочки и файлики поддерживает представленный софт. Я всего до конца не осознаю, но насколько я понимаю, тулза может: - на основе БД создать каталог исходников, причём по настроенным правилам; - на основе каталога исходников выполнять ряд вспомогательных операций, таких как извлечение только какой-то нужной части, например, извлечь все "данные для таблиц" (весь набор операторов "insert ..." и подобное) в каком-то варианте или т.п.; - на основе исходников выполнять создание БД, или генерировать sql-скрипты для этого, т.е. слепливать нужные sql-файлы (или части файла) в правильной последовательности, возможно лишь частичное создание БД, или только конкретных объектов. А вот своего "инсталлятора" для внесения изменений в работающую базу вроде как не предполагается, для этого используются сторонние или стандартные инструменты. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.05.2013, 18:23:12 |
|
||
|
Выбор СУБД для небольшой Java-утилиты
|
|||
|---|---|---|---|
|
#18+
Максим Н, я предлагаю на досуге подумать об ещё одном варианте решения задачи, если говорить о предлагаемой утилите как об универсальном инструменте (а такой инструмент, действительно, нужен). Разрабатываемый вариант вокруг XML имеет проблемы: - только из-за наличия XML, как такового, многие даже не посмотрят на продукт. Он многих и так достал в той же джаве, некоторым как-то не в кайф ковыряться и в XML, и всё равно при этом писать sql-код (как, например, в Liquibase - что-то указывай в xml-операциях, а что тулза не понимает - пиши в sql). Замена на json, yaml и пр. ничего не даст, шило на мыло; - описать реальную конфигурацию для конкретных проектов не совсем уж и простая задача, особенно, когда чего-то инструмент не понимает или не позволяет сделать, начинаются подгонка под имеющийся функционал (или приобретают ещё дополнительные костыли). Чтобы инструментом начали пользоваться уже в коробке с ним обязательно должен быть на слабый типовой набор заготовок, как предлагаемые варианты, скажем, на основе рекомендаций от "лучших умов", т.е. от придворных производителя SQL-сервера, или свои рекомендации, типа удобные для такой-то методики разработки БД, и т.д. С одной стороны, вроде как есть метаописание структуры проекта, т.е. формальное строгое описание стандарта разработки, что очень хорошо, но само по себе это описание несколько геморное, трудно составлять и читать/разбираться. В какой-то степени, такой подход напоминает составление стандарта программирования на той же джаве, но где в дополнение к обычному текстовому документу (требования и рекомендации, подкрепленные примерами кода) обязательно требуется строгое описание в виде BNF-грамматики ЯП. Предлагаю попробовать подойти чуть с другой стороны. В тулзе в качестве универсального варианта уже сейчас предполагается использовать некие метки кода на основе "startText" и "stopText". Имеет смысл отталкиваться именно от них. Посмотри на текстовые редакторы (ну и др. IDE): в виме/эмаксе/Sublime/JEdit и пр. есть понятие меток кода, которые настраиваются, обычно через регэкспы, для конкретного синтаксиса языка и через них выполняется быстрая навигация по коду (типовой "goto symbol..."). По такому принципу нужен набор правил, где, например, на основе текста "create table MyTable ..." тулза поймёт, что это метка кода, где "MyTable" - имя метки, "create table" - даёт её тип (пусть будет "table"), на основе типов и имён можно понимать связи между метками. Фактически, нужно разрабатывать один набор правил для SQL, который применим ко всем любым проектам. И если покопаться во всяких sql-mode для эмакса и прочих, то уже можно нарыть основу для набора меток, причём под разные диалекты SQL. Можно ещё глянуть в сторону ctags и подобных. Но есть но. Не всегда всё однозначно правильно определяется универсальным способом через те же регулярки. В текстовых редакторах эти метки - фактически, просто удобняшка для быстрой работы в редакторе. Если тулза должна однозначно всё правильно понимать, всегда генерить корректные sql-скрипты и пр., то желателен вариант по надёжнее. Без полноценного разбора текста (хотя бы упрощенного) очень проблематично. Можно ввести строго формальные метки в виде спец-комментариев (чего некое подобие предлагается уже сейчас в тех примерах на сайте). Или же ограничиться тем принципом, что в таком-то файле должен быть только такой-то объект (например, "create table" в одном файле, индексы - в другом и т.д., т.е. только один вариант "не sample"). Но тогда имеется ограниченность в структуре проекта, плюс не всегда удобно иметь кучу файлов, особенно мелких. И если избавиться от XML, а точнее от обязательного наличия метаинформации о проекте, и на основе содержательного текста понимать, что находится внутри каждого конкретного sql-файла (а также, скажем, дополнительно понимать, что файлы могут распределяться по разным каталогам с целью логического деления на какие-то модули), то это существенно упростит использование инструментария. Тут, в принципе, есть почва для ведения каталога исходников в любой удобной форме, при этом как бы сразу можно подстроиться для использования и других инструментов (например, вести create-скрипты отдельно, рядом скрипты для накатов, или организовать структуру проекта под какой-нибудь DbMaintain и пр.). В принципе, задекларированный функционал реализуем и на основе предложенной формы инструмента, но без дополнительной возни будет приятнее и гибче работать. Но проблема ещё и в самом функционале. Если ставить задачу обратного "реинженеринга", т.е. формирование каталога исходников на основе БД, то да, без метаописаний не обойтись, если говорить о супер-универсальности. Но здесь можно попробовать задавать правила в ином виде, скажем предусмотреть типовые варианты: лепить всё в один файл (абсолютно всё), распределять объекты по каждому файлу (что-то частично вместе, например, таблица вместе с индексами, триггеры - отдельно), создавать ли подкаталоги по типам объектов и т.д. Хотя не знаю, м.б. как раз всё и скатится к XML (лично я в своём планируемом тулзе собираюсь "вшить" единый вариант на основе разбиения исходников и объектов БД по логическим иерархическим модулям/подмодулям с зависимостями с использованием стандартов именования, что также даёт основу и для реинженеринга, ну и закладывается функционал пошире, а точнее для решения самых основных задач - создание БД, полное и частичное, накаты изменений, и уж потом всякие помогалки). Такой вот вариантик. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.05.2013, 18:37:47 |
|
||
|
Выбор СУБД для небольшой Java-утилиты
|
|||
|---|---|---|---|
|
#18+
Petro123Vladimir Baskakov, +1 off )) P2P-будущее http://slon.ru/ipad/setevoy_razum_pervye_shagi-941035.xhtml Хм..., спасибо, но там летают не так высоко. Здесь на сайте добирались по выше, до самой технологической сингулярности ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.05.2013, 19:49:31 |
|
||
|
Выбор СУБД для небольшой Java-утилиты
|
|||
|---|---|---|---|
|
#18+
PSV100Vladimir BaskakovТак что я совсем совсем не понимаю, о чем речь.... Какой именно функционал про папочки и файлики поддерживает представленный софт. Я всего до конца не осознаю, но насколько я понимаю, тулза может: - на основе БД создать каталог исходников, причём по настроенным правилам; - на основе каталога исходников выполнять ряд вспомогательных операций, таких как извлечение только какой-то нужной части, например, извлечь все "данные для таблиц" (весь набор операторов "insert ..." и подобное) в каком-то варианте или т.п.; - на основе исходников выполнять создание БД, или генерировать sql-скрипты для этого, т.е. слепливать нужные sql-файлы (или части файла) в правильной последовательности, возможно лишь частичное создание БД, или только конкретных объектов. А вот своего "инсталлятора" для внесения изменений в работающую базу вроде как не предполагается, для этого используются сторонние или стандартные инструменты. Еще одна из целей это стандартизировать разработку, например соблюдение внутрикорпаративных стандартов наименования объектов БД, структру расположения их в СКВ и пр. Т.е. некий каркас, благодоря которому можно будет быстро въехать что к чему, как устроена разработка БД и т.д. Часто бывает при работе с СКВ одни разработчики хранят таблицы целиком (с индексами и триггерами), трагие разбивают по файлам, одни используют наименование схемы, другие нет, причем все пользуются разными тулзами для выгрузки кода (страшное слово, согласен) и получается каша. Вот и появилась идея тулзы, которой можно объяснить как все должно быть (способ хранения кода в файлах, наименования и т.д.), а она проконтроллирует и поможет в создании объектов. Причем с рабиением по проектам, т.е. в каждом проекте могут быть свои правила. Например создаю я таблицу с помощью этой штуки, в результате получаю в СКВ папочку с именем таблицы (имя папки берется из шаблона и подставляется имя объекта вместо $ObjName$), в ней готовые папки/файлы с элементами таблицы (ddl, индексы, тригеры, ключи, тестовые данные). Причем эти файлы не обязательно буду пустыми, можно использовать сниппеты (snippetText), в которые подставятся имена ваших объектов. А потом могу достать код (в любом виде, целиком, поэлементно, обернутым в оболочку какую-нибудь и т.д.) и скармливаю какому-нибудь sql экзекутору (sqlplus, psql, etc). Т.е. имхо ничего криминального и противоестественного Как то так. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.05.2013, 13:08:43 |
|
||
|
Выбор СУБД для небольшой Java-утилиты
|
|||
|---|---|---|---|
|
#18+
PSV100Максим Н, я предлагаю на досуге подумать об ещё одном варианте решения задачи, если говорить о предлагаемой утилите как об универсальном инструменте (а такой инструмент, действительно, нужен). Разрабатываемый вариант вокруг XML имеет проблемы: - только из-за наличия XML, как такового, многие даже не посмотрят на продукт. Он многих и так достал в той же джаве, некоторым как-то не в кайф ковыряться и в XML, и всё равно при этом писать sql-код (как, например, в Liquibase - что-то указывай в xml-операциях, а что тулза не понимает - пиши в sql). Замена на json, yaml и пр. ничего не даст, шило на мыло; - описать реальную конфигурацию для конкретных проектов не совсем уж и простая задача, особенно, когда чего-то инструмент не понимает или не позволяет сделать, начинаются подгонка под имеющийся функционал (или приобретают ещё дополнительные костыли). Чтобы инструментом начали пользоваться уже в коробке с ним обязательно должен быть на слабый типовой набор заготовок, как предлагаемые варианты, скажем, на основе рекомендаций от "лучших умов", т.е. от придворных производителя SQL-сервера, или свои рекомендации, типа удобные для такой-то методики разработки БД, и т.д. С одной стороны, вроде как есть метаописание структуры проекта, т.е. формальное строгое описание стандарта разработки, что очень хорошо, но само по себе это описание несколько геморное, трудно составлять и читать/разбираться. В какой-то степени, такой подход напоминает составление стандарта программирования на той же джаве, но где в дополнение к обычному текстовому документу (требования и рекомендации, подкрепленные примерами кода) обязательно требуется строгое описание в виде BNF-грамматики ЯП. Предлагаю попробовать подойти чуть с другой стороны. В тулзе в качестве универсального варианта уже сейчас предполагается использовать некие метки кода на основе "startText" и "stopText". Имеет смысл отталкиваться именно от них. Посмотри на текстовые редакторы (ну и др. IDE): в виме/эмаксе/Sublime/JEdit и пр. есть понятие меток кода, которые настраиваются, обычно через регэкспы, для конкретного синтаксиса языка и через них выполняется быстрая навигация по коду (типовой "goto symbol..."). По такому принципу нужен набор правил, где, например, на основе текста "create table MyTable ..." тулза поймёт, что это метка кода, где "MyTable" - имя метки, "create table" - даёт её тип (пусть будет "table"), на основе типов и имён можно понимать связи между метками. Фактически, нужно разрабатывать один набор правил для SQL, который применим ко всем любым проектам. И если покопаться во всяких sql-mode для эмакса и прочих, то уже можно нарыть основу для набора меток, причём под разные диалекты SQL. Можно ещё глянуть в сторону ctags и подобных. Но есть но. Не всегда всё однозначно правильно определяется универсальным способом через те же регулярки. В текстовых редакторах эти метки - фактически, просто удобняшка для быстрой работы в редакторе. Если тулза должна однозначно всё правильно понимать, всегда генерить корректные sql-скрипты и пр., то желателен вариант по надёжнее. Без полноценного разбора текста (хотя бы упрощенного) очень проблематично. Можно ввести строго формальные метки в виде спец-комментариев (чего некое подобие предлагается уже сейчас в тех примерах на сайте). Или же ограничиться тем принципом, что в таком-то файле должен быть только такой-то объект (например, "create table" в одном файле, индексы - в другом и т.д., т.е. только один вариант "не sample"). Но тогда имеется ограниченность в структуре проекта, плюс не всегда удобно иметь кучу файлов, особенно мелких. И если избавиться от XML, а точнее от обязательного наличия метаинформации о проекте, и на основе содержательного текста понимать, что находится внутри каждого конкретного sql-файла (а также, скажем, дополнительно понимать, что файлы могут распределяться по разным каталогам с целью логического деления на какие-то модули), то это существенно упростит использование инструментария. Тут, в принципе, есть почва для ведения каталога исходников в любой удобной форме, при этом как бы сразу можно подстроиться для использования и других инструментов (например, вести create-скрипты отдельно, рядом скрипты для накатов, или организовать структуру проекта под какой-нибудь DbMaintain и пр.). В принципе, задекларированный функционал реализуем и на основе предложенной формы инструмента, но без дополнительной возни будет приятнее и гибче работать. Но проблема ещё и в самом функционале. Если ставить задачу обратного "реинженеринга", т.е. формирование каталога исходников на основе БД, то да, без метаописаний не обойтись, если говорить о супер-универсальности. Но здесь можно попробовать задавать правила в ином виде, скажем предусмотреть типовые варианты: лепить всё в один файл (абсолютно всё), распределять объекты по каждому файлу (что-то частично вместе, например, таблица вместе с индексами, триггеры - отдельно), создавать ли подкаталоги по типам объектов и т.д. Хотя не знаю, м.б. как раз всё и скатится к XML (лично я в своём планируемом тулзе собираюсь "вшить" единый вариант на основе разбиения исходников и объектов БД по логическим иерархическим модулям/подмодулям с зависимостями с использованием стандартов именования, что также даёт основу и для реинженеринга, ну и закладывается функционал пошире, а точнее для решения самых основных задач - создание БД, полное и частичное, накаты изменений, и уж потом всякие помогалки). Такой вот вариантик. Согласен, "интеллектуально" выделять объекты из текста было бы круто. Надо будет попробовать как на практике это будет работать. Но тогда в любом случае вместо xml будут какие-то другие файлики, в которых будут хранится некоторые инструкции для поиска объектов в тексте и его свойств. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.05.2013, 13:11:33 |
|
||
|
Выбор СУБД для небольшой Java-утилиты
|
|||
|---|---|---|---|
|
#18+
Petro123Максим НА в xml просто описываются типы объектов БД сложнее всего описать связи, очерёдность, и вариантность: http://docs.oracle.com/cd/B28359_01/server.111/b28286/statements_7002.htm Связи описывать не планируется (по крайней мере пока). Например у таблицы есть ПК и несколько ФК. Они хранятся в отдельно файле, или в том же где и таблица, но мы в любом случае точно знаем где и можем легко их идентифицировать. А больше ничего и не надо. Если нужно узнать какие таблицы ссылаются на данную (являются дочерними), то можно вытащить код всех ФК'шек (примерно так: lwd -t table -n table1 table2 ... table3 -l -e fk) и например grep'ом в этом тексте поискать имя нужно таблицы. Ну или воспользоваться базой (системными таблицами или ИДЕ). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.05.2013, 13:19:06 |
|
||
|
Выбор СУБД для небольшой Java-утилиты
|
|||
|---|---|---|---|
|
#18+
Максим Нпричем все пользуются разными тулзами для выгрузки кода (страшное слово, согласен) и получается каша. а бывает, одни пишут в Иклипсе, а другие в .....Notepad'e Может их тоже построить? И запретить? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.05.2013, 13:28:16 |
|
||
|
Выбор СУБД для небольшой Java-утилиты
|
|||
|---|---|---|---|
|
#18+
Максим НСвязи описывать не планируется ты не понял. Если FK в файле1, а CREATE TABLE в файле2, а каскад в файле3, а PK в файле4 то в скрипте на создание они должны быть в определённом порядке. При выключении объекта PK, объект FK и каскад тоже должны выключаться). Это руками? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.05.2013, 13:36:19 |
|
||
|
Выбор СУБД для небольшой Java-утилиты
|
|||
|---|---|---|---|
|
#18+
раз уж мы пытаемся жонглировать разными атомарными sql конструкциями - вот примерчик Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. ______________________________________________ "Сделай настолько просто, насколько это возможно, но не проще". © А. Эйнштейн. AutoPOI.ru — ГИС-технологии для Oracle ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.05.2013, 13:47:15 |
|
||
|
Выбор СУБД для небольшой Java-утилиты
|
|||
|---|---|---|---|
|
#18+
- какие сущности-объекты в скрипте выше выделяет автор в отдельные файлы? - сколько их типов будет в итоге в 1-ой версии утилиты? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.05.2013, 13:49:36 |
|
||
|
Выбор СУБД для небольшой Java-утилиты
|
|||
|---|---|---|---|
|
#18+
авторНапример создаю я таблицу с помощью этой штуки, в результате получаю в СКВ папочку с именем таблицы (имя папки берется из шаблона и подставляется имя объекта вместо $ObjName$), в ней готовые папки/файлы с элементами таблицы (ddl, индексы, тригеры, ключи, тестовые данные). Причем эти файлы не обязательно буду пустыми, можно использовать сниппеты (snippetText), в которые подставятся имена ваших объектов. а у нас как было. говорят - раскладывать - вот так. Это - стандарт - см док-т такой-то, это - добрая традиция, которую новичкам нарушать не стоит, хотя в стандарте и нету. Желательно использовать среду разработки вот такую, автоформат кода настроить вот так. И прямо файлики с настройками в зубы. И все. Если кто-то выбивается - его поправляют. Не внемлет - .... Но народ был добрый, понятливый. Все вняли. все привыкли, что если твой автоформат корежит чужой текст его использовать не надо. Для нормальной работы версионника. Совсем коряво уложенные папки не съедал установщик патчей, некриминальную кривоватость поправляли более опытные. Ну и конечно шаблоны были с ==типовыми разработками под всякий случай==. Скопипастил - и правь себе. тулза проблему дисциплины разработки не решает - ее все равно надо насадить сверху, с инструкцией правильного использования. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.05.2013, 14:01:09 |
|
||
|
Выбор СУБД для небольшой Java-утилиты
|
|||
|---|---|---|---|
|
#18+
авторНа счёт Rust-а. Имхо, на сегодня это фактически единственная альтернатива (потенциальная) для ряда С++-разработок, где можно потеснить эрланг. меня шефы как учили - пользуйся любой маргинальной фигней, но если будут баги - это будут именно твои баги, а не баги маргинальной фигни. Или ходи строем и пользуйся тулзами как все, тогда баги тулзы будут багами того, кто начальственно насадил ее использование. Теснить эрланг? было у меня желание его попользовать. Потом посмотрел на 8 байт на символ строки. А строк у меня тогда было много. и он сам потеснился в моем сознании... да и odbc запросы как-то не распаралелились. а именно их и надо было разбрасывать. Вот такой я туповатый ретроград(((((((. Впрочем - если тимлид скажет использовать эрланг - да с радостью почитаю, и поучусь, и запущу.... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.05.2013, 14:54:51 |
|
||
|
Выбор СУБД для небольшой Java-утилиты
|
|||
|---|---|---|---|
|
#18+
Petro123Максим НСвязи описывать не планируется ты не понял. Если FK в файле1, а CREATE TABLE в файле2, а каскад в файле3, а PK в файле4 то в скрипте на создание они должны быть в определённом порядке. При выключении объекта PK, объект FK и каскад тоже должны выключаться). Это руками? Во первых все разбивать по файлам не обязательно. Это кому как удобно и как нужно. Сейчас итоговый скрипт соберется в том порядке, в котором указаны его элементы в командной строке. lwd -t table -n PERSON_TYPES PERSONS WORKS -e ddl pk fk indexes test_data Т.е. сначала CREATE TABLE, а затем ключи, индексы и тестовые данные. Для начала в описание объекта планирую добавить порядковое поле "priority", по которому можно ранжировать элементы. А вообще я еще задумывался о т.н. шаблонах сборки, т.е. некие пользовательские структуры (тот же xml или что то другое, неважно), в которых будет описан порядок сборки жлементов для разных случаев. Вот сферический пример для сборки скрипта создания 3-х связанных таблиц: lwd -t table -n PERSON_TYPES PERSONS WORKS -e ddl pk lwd -t table -n PERSON_TYPES PERSONS WORKS -e fk lwd -t table -n PERSON_TYPES PERSONS WORKS -e test_data lwd -t table -n PERSON_TYPES PERSONS WORKS -e indexes В будущем можно попробовать оптимизировать это до одной команды. По поводу выключения зависимых элементов при сборке, если честно, то не думал об этом, может стоит задуматься о возможности указывать зависимости в описании типов, если это понадобится. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.05.2013, 21:43:35 |
|
||
|
Выбор СУБД для небольшой Java-утилиты
|
|||
|---|---|---|---|
|
#18+
Petro123раз уж мы пытаемся жонглировать разными атомарными sql конструкциями - вот примерчик Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. ______________________________________________ "Сделай настолько просто, насколько это возможно, но не проще". © А. Эйнштейн. AutoPOI.ru — ГИС-технологии для Oracle Как вариант (всего лишь один из многих), так: Имеем тип "Таблица" и 3 элемента: Элемент "DDL", в текущем (итоговом) состоянии: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. Элемент "Форенкей": Код: plsql 1. 2. 3. Элемент "Первичный ключ": Код: plsql 1. 2. 3. Можно хранить в одном файле, можно в разных, кому как удобнее. Или например объединить CREATE TABLE и PK в один элемент, форенкей в другой. И т.д. Зависит от задачи, потребностей и вкуса. Хранение и организацию алтеров таблицы (добавление полей) я пока не рассматриваю. Для этого есть спец. средства, всякие миграторы, с их чэйнжсетами и др. Надо будет подумать как с ними подружиться, можеть объявлять элементы или еще как то, пока не знаю... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.05.2013, 21:55:15 |
|
||
|
Выбор СУБД для небольшой Java-утилиты
|
|||
|---|---|---|---|
|
#18+
Vladimir BaskakovавторНапример создаю я таблицу с помощью этой штуки, в результате получаю в СКВ папочку с именем таблицы (имя папки берется из шаблона и подставляется имя объекта вместо $ObjName$), в ней готовые папки/файлы с элементами таблицы (ddl, индексы, тригеры, ключи, тестовые данные). Причем эти файлы не обязательно буду пустыми, можно использовать сниппеты (snippetText), в которые подставятся имена ваших объектов. а у нас как было. говорят - раскладывать - вот так. Это - стандарт - см док-т такой-то, это - добрая традиция, которую новичкам нарушать не стоит, хотя в стандарте и нету. Желательно использовать среду разработки вот такую, автоформат кода настроить вот так. И прямо файлики с настройками в зубы. И все. Если кто-то выбивается - его поправляют. Не внемлет - .... Но народ был добрый, понятливый. Все вняли. все привыкли, что если твой автоформат корежит чужой текст его использовать не надо. Для нормальной работы версионника. Совсем коряво уложенные папки не съедал установщик патчей, некриминальную кривоватость поправляли более опытные. Ну и конечно шаблоны были с ==типовыми разработками под всякий случай==. Скопипастил - и правь себе. тулза проблему дисциплины разработки не решает - ее все равно надо насадить сверху, с инструкцией правильного использования. Смысл тулзы не только в том, чтобы выявлять косяки и давать разработчикам по шапке (хотя можно и так использовать). В любом случае Регламент и прочие организационные мероприятия это здорово и без них естественно никуда, но когда под боком есть инструмент, который "поможет" сделать правильно и снизит уровень ошибки для разработчика, а для руководителя предоставит какие либо средства для более быстрого анализа полученного кода, думаю это не плохо. Тем более когда регламент изменяется (а от этого никто не застрахован), то вручную организационно все отследить и переделать будет достаточно проблематично (в зависимости от проекта конечно). ПС была у меня еще идея конвертера, который сможет привести файлы, хранящиеся под одной структурой к файлам другой структуры... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.05.2013, 22:02:30 |
|
||
|
Выбор СУБД для небольшой Java-утилиты
|
|||
|---|---|---|---|
|
#18+
Petro123Максим Нпричем все пользуются разными тулзами для выгрузки кода (страшное слово, согласен) и получается каша. а бывает, одни пишут в Иклипсе, а другие в .....Notepad'e Может их тоже построить? И запретить? Не не, я не предлагаю ничего запрещать и строить (куда мне там). Я и сам пользуюсь ИДЕ'шками. Просто предлагаю результат труда немного орагнизовать, структурировать, версионировать, задуматься о том, что за код генерят эти замечательные инструменты, как (а еще зачем...), ну и т.д. тут уже много об этом написано. Вот и все. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.05.2013, 22:07:20 |
|
||
|
Выбор СУБД для небольшой Java-утилиты
|
|||
|---|---|---|---|
|
#18+
авторкакие либо средства для более быстрого анализа полученного кода А что за средства анализа кода? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.05.2013, 09:38:15 |
|
||
|
Выбор СУБД для небольшой Java-утилиты
|
|||
|---|---|---|---|
|
#18+
Максим НМожно хранить в одном файле, можно в разных, кому как удобнее. ну дак и будут разброд и шатания. Ты будешь свой скрипт гладить по головке и разделять всё по файлам. А те, кто ПИСАЛ такие скрипты, спросят: "Нафига лишняя работа?". И вся твоя теория - насмарку. Ты не распарсишь те скрипты, которые пишут программисты (студенты). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.05.2013, 09:44:27 |
|
||
|
Выбор СУБД для небольшой Java-утилиты
|
|||
|---|---|---|---|
|
#18+
Максим НХранение и организацию алтеров таблицы (добавление полей) я пока не рассматриваю Это как? Это важнейший элемент апдейта БД у заказчика..... Например, увеличился размер поля ИНН. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.05.2013, 09:46:50 |
|
||
|
Выбор СУБД для небольшой Java-утилиты
|
|||
|---|---|---|---|
|
#18+
Максим Нто вручную организационно все отследить и переделать будет достаточно проблематично (в зависимости от проекта конечно). код на SQL (кто его любит )) ) ничем не отличается от простынки кода на Java. Как отслеживают код на Java без твоей утилиты? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.05.2013, 09:49:17 |
|
||
|
Выбор СУБД для небольшой Java-утилиты
|
|||
|---|---|---|---|
|
#18+
Vladimir BaskakovPSV100На счёт Rust-а. Имхо, на сегодня это фактически единственная альтернатива (потенциальная) для ряда С++-разработок, где можно потеснить эрланг. меня шефы как учили - пользуйся любой маргинальной фигней, но если будут баги - это будут именно твои баги, а не баги маргинальной фигни. Или ходи строем и пользуйся тулзами как все, тогда баги тулзы будут багами того, кто начальственно насадил ее использование. Теснить эрланг? было у меня желание его попользовать. Потом посмотрел на 8 байт на символ строки. А строк у меня тогда было много. и он сам потеснился в моем сознании... да и odbc запросы как-то не распаралелились. а именно их и надо было разбрасывать. Вот такой я туповатый ретроград(((((((. Впрочем - если тимлид скажет использовать эрланг - да с радостью почитаю, и поучусь, и запущу.... В том и дело, что Эрланго-альтернатива не помешала бы. Вот здесь очень кратко и чётко собраны основные достоинства Эрланга (ну ещё здесь , к примеру), но и проблем вроде тоже хватает. Я его плотно не использовал, но насколько успел заметить, что не редко системы на его основе строятся по принципу С/С++ и прочих нативных подпорок, склеенных Эрлангом. Ну, а на не промышленную платформу на соответствующих проектах, конечно, никто при здравом уме прыгать не будет (на сегодня в Rust-е только намёк на какую-то платформу). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.05.2013, 19:56:42 |
|
||
|
Выбор СУБД для небольшой Java-утилиты
|
|||
|---|---|---|---|
|
#18+
Vladimir Baskakovавторкакие либо средства для более быстрого анализа полученного кода А что за средства анализа кода? Ну например вы можете запустить данную тулзу (в будущем, я этого пока не делал) и увидеть какие файлы или части файлов не подходят ни под одно описание объектов, т.е. бесхозные. Проверить соответствие между описанием типов и уже созданными фалами конкретных объектов и т.д. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.05.2013, 20:27:39 |
|
||
|
Выбор СУБД для небольшой Java-утилиты
|
|||
|---|---|---|---|
|
#18+
Максим НДля начала в описание объекта планирую добавить порядковое поле "priority", по которому можно ранжировать элементы. А вообще я еще задумывался о т.н. шаблонах сборки, т.е. некие пользовательские структуры (тот же xml или что то другое, неважно), в которых будет описан порядок сборки жлементов для разных случаев. ... По поводу выключения зависимых элементов при сборке, если честно, то не думал об этом, может стоит задуматься о возможности указывать зависимости в описании типов, если это понадобится. ... Хранение и организацию алтеров таблицы (добавление полей) я пока не рассматриваю. Для этого есть спец. средства, всякие миграторы, с их чэйнжсетами и др. Надо будет подумать как с ними подружиться, можеть объявлять элементы или еще как то, пока не знаю... ... Смысл тулзы не только в том, чтобы выявлять косяки и давать разработчикам по шапке (хотя можно и так использовать). В любом случае Регламент и прочие организационные мероприятия это здорово и без них естественно никуда, но когда под боком есть инструмент, который "поможет" сделать правильно и снизит уровень ошибки для разработчика, а для руководителя предоставит какие либо средства для более быстрого анализа полученного кода, думаю это не плохо. Тем более когда регламент изменяется (а от этого никто не застрахован), то вручную организационно все отследить и переделать будет достаточно проблематично (в зависимости от проекта конечно). ПС была у меня еще идея конвертера, который сможет привести файлы, хранящиеся под одной структурой к файлам другой структуры... ... Не не, я не предлагаю ничего запрещать и строить (куда мне там). Я и сам пользуюсь ИДЕ'шками. Просто предлагаю результат труда немного орагнизовать, структурировать, версионировать, задуматься о том, что за код генерят эти замечательные инструменты, как (а еще зачем...), ну и т.д. тут уже много об этом написано. Вот и все. Ты как-то давал ссылку на пример стандарта разработки БД, некий официальный от Oracle. Насколько я понимаю, твоя первичная цель организовать поддержку ведения подобной разработки. Но в таком виде, имхо, мало кто сможет пользоваться этой тулзой. Все хотят как можно меньше возни и больше удобств. Рассмотрим тех, кто работает в GUI-DBIDE. Сначала нужно запустить в консоли jar-ник, чтобы создать новый объект, для чего будет создан файл с шаблоном и/или каталог, или в каком-то файле чего-то нового добавиться. Теперь в GUI нужно открыть этот файл, его редактировать, сохранить, выполнить и пр. Как правило, такая возня в GUI-IDE утомительна. DB-IDE, фактически, не занимаются ведением файловой структуры, обычно текстовые файлы для них - это просто импорт/экспорт содержимого текстового редактора в каком-то GUI-режиме. Поэтому, в основном, и предпочитают работать уже именно в GUI - где-то кликнули, на основе шаблонов для именования объектов вылазит какой-то режим, где вводят структуру таблицы или т.п., или создаётся в текстовом редакторе шаблон для правки содержимого будущего объекта, и т.д. Сразу всё сохраняется в БД, могут быть средства для организации проектов внутри БД (объединения объектов по своим кучам), свой контроль версий и история, распределение доступа по разработчикам и т.д. Одним словом, если уж GUI, то проще в нём же и ковыряться. Некоторые только ими и обходятся, натравили инструмент на сравнение двух баз - всё автоматом обновилось или создали скрипт для наката. Кто-то создаёт дамп БД, кладёт на всякий случай где-то рядом. Кто-то отдельно складывает sql-скрипты по папочкам, на основе утверждённого стандарта, или/и складывает скрипты для всяких накатов версий или для дополнительной обработки БД после создания или правки. Но в этом случае уже проще из GUI выгрызать нужные тексты и кидать их в файлы, т.к. GUI упрощает их создание (тут только контекстно-зависимый автокомплит может заставить работать именно с GUI). Но, обычно мало кого волнует в каком виде будут конечные тексты. Некоторым они просто нужны по принципу "чтобы было" (ну, может иногда СКВ дадут где-то конфликт правки одного и того же объекта, к примеру), в любом случае, отношение к ним где-то на уровне просто как списку команд, чтобы выполняли молча свои действия и всё, нет с ними работы как с первичным материалом. Те, кто работает с SQL-исходниками именно как с исходным материалом. Обычно их заставляет жизнь, т.к. требуется широкий и гибкий функционал, некоторая инвариантность (не обязательно глобального функционала, например, нужно создавать БД с тестовыми или первичными данными в разных вариантах или без них и т.п.). Некоторым просто удобнее работать в текстовом редакторе или какой-то не DB-IDE, рядом с разработкой клиентской для базы части. И т.д. Короче говоря, задача создания новых файлов для новых объектов по определенным правилам при необходимости решается через редактор/IDE (и даже удобнее, скажем, дал команду - сформировался каталог с файлом, файл загрузился в буфер и сразу запустился интерактивный сниппет а-ля как в ТекстМейте). Задача удаления файлов или части файла согласно операции удаления объекта в БД автоматом решается лишь частично, не всегда есть только явные технические связи, частенько хватает и логических отношений, а всего сразу не наконфигурируешь. И задача реорганизации исходников в иную форму тоже автоматом выполнима лишь отчасти, опять же, если учитывать прикладную логику в проекте. Задачу верификации исходников очень и очень маловероятно решить только на универсальных настройках с ограниченным понятием отношений. Иными словами, выше перечисленные задачи на практике второстепенны или имеются способы их решений (а ту же задачу анализа кода такой инструмент вряд ли решит или совсем чуть-чуть, но хоть что-то). Поэтому ради этих функций на такую утилиту вряд ли массово посмотрят. Основная задача при работе с sql-исходниками - это их "компиляция", т.е. создание БД и её модификация, плюс решение вспомогательной рутины. Более того, именно эта "компиляция" - ключевой момент, это основа основ для ведения каталога исходников, именно это и предопределяет всю пляску вокруг исходников, и часто диктует правила, как эти исходники оформлять. И если инструмент для исходников не обеспечивает решение для компиляции/сборки, то он мало будет востребован. Ну а чтобы решить задачи компиляции/сборки через такую утилиту при её таком подходе, универсальном и настраиваемом, естественно требуется дальнейшее развитие. А вот развитие весьма проблематичное. Сейчас в конфигурационных настройках не хватает гибкости, кроме явной технической связи между элементами как объектами БД необходима "шаблонизация" для задания логики разбиения по прикладным модулям (это востребовано). Чтобы создавать БД необходимо понимать смысл каждого элемента, или нужна их взаимосвязь и нужно определять очерёдность создания элементов. Причём нужны настройки для очерёдности не только согласно их типам (т.е. сначала нужно создавать таблицы, затем индексы и отношения, заголовки процедур, пакетов и пр., затем их тела и т.д.), но и может потребоваться явная последовательность для элементов одного вида (например, правильно располагать какие-то блоки кода, которые выполняются после создания или накатов и т.п., или накаты через всякие alter-ы с возможной правкой отношений или связанных объектов, и т.д.). Поэтому, уже есть какая-то потребность в шаблонной последовательности (кроме явной организации элементов внутри файла), пусть будет нумерация на уровне файлов (т.е. 01_sqript1.sql, 02_script2.sql), и это должно как-то настраиваться. Далее, если закладываться на какую-то инвариантность, то нужны какие-то признаки для элементов. Поскольку "Start/Stop-text" - это метки для поиска "в лоб", то остаётся использовать признаки на уровне файлов, например, как в DbMaintain (т.е. аннотации через "@" или "#", их может быть несколько), или дорабатывать метки "Start/Stop-text". Тогда появляется возможность задать какие-то варианты сборки исходников, или кроме сборок баз можно писать сценарии для вспомогательных рутин, например, извлечь только тестовые данные для таблиц (плюс код для предварительного их удаления) и т.п. По своему опыту. Такое развитие я уже проходил, был концептуально фактически похожий велосипед, и пришлось утонуть в бесконечной шаблонизации. Частично такой подход решает проблемы, но не все и задалбывает конкретно. Прямое программирование "в лоб" оказалось проще, естественнее и быстрее, без всякой xml- и подобных конфигураций, всё на основе стандартных sql-операторов. Я уже давал раньше ссылки и что-то где-то выкладывал, но опять ниже выложу всё сразу до кучи - пример некоего стандарта для разработки БД. Фактически, там организация проекта похожа на тот стандарт от оракл (ссылка выше), за исключением возможной разбивки исходников по подпроектам и есть явная последовательность сборки (через операторы "input", аналог "start"-а). Плюс натравливается велосипед-препроцессор и получаем разные варианты сборок БД и сборок скриптов-сценариев для рутины. В результате - гибкость, и инструмент даёт полную свободу под конкретные нужды. Недостаток - есть явное ручное описание этих "input-ов", причём из-за них как бы имеются общие файлы между разработчиками, но конфликты их правки разруливаются фактически автоматом. Ну и неплохо иметь какой-то плагин где-то, который помогает чего-то sql-генерировать, в т.ч. создавать новые файлы и шаблоны и эти start/input и т.д., SQL - тяжкая хрень. Сейчас, под действием этой темы форума, я вновь ломаю мозги над новым вариантом разработки БД. У нас используются костыли по выше приведенным мотивам (т.е. на базе выложенного стандарта). В основном, напряжно следующее: - выделять каждый объект в отдельный файл (в большинстве случаев) как-то геморно, слишком много файлов, причём частенько небольших. К этому, прежде всего, принуждает ручное управление последовательностью (через input/start), т.к. грануляция на уровне файлов; - хотелось бы писать как можно меньше, несмотря на всякие помогалки. Например, принят подход иметь create-скрипты для создания БД в текущей последней версии и отдельно update-скрипты для накатов версий (пусть без откатов, с ними обычно только больше гемора). С одной стороны, хорошо - имеется сразу в одном месте вся необходимая информация, например, "create table ..." сразу в конечном виде в актуальном состоянии, и все его "alter"-ы отдельно в истории или в накатах. Соответственно не нужно для каких-то вспомогательных целей собирать всё до кучи: брать базовый "create table" и слепливать размазанные по коду его "alter"-ы (и, например, в редакторе достаточно в соседнем буфере открыть только один файл с "create..." и он уже обеспечит быстрый автокомплит по словам (вместо контекстного, когда его нет или он хреновый)). Но с другой стороны - лишняя писанина (хорошо, если есть помогалки). Ещё масло в огонь подкинул проект Sqlmake , здесь на него кто-то давал ссылку. Вот примерно о подобном подходе в организации проекта, только по гибче, как-то и думалось раньше. Там выделяется как бы две части исходников - модель данных (грубо - таблицы с индексами) и "повторяемый код" - в основном PL/SQL ("CREATE OR REPLACE ...") и др. Сюда бы добавить некий явный "постпроцессинг" как в DbMaintain. Накаты в рамках модели задаются явно, и это правильно, т.к. в общем случае нельзя всё автоматизировать (т.е. автоматом сравнить две структуры, к тому же, это может оказаться далеко не быстрым процессом). Например, добавляется столбец как not null в таблицу с уже имеющимися данными, нужно знать чем заполнить данные (нулём/пустой строкой или чем-то другим), при этом нет данных о default-значении. А вот plsql и др. накатывается автоматом, на основе данных в БД. Причём, например, если DbMaintain накатывает "повторяемый" код на основе версии файла (или его даты), то Sqlmake основывается именно на исходном коде, вычисляет изменения, при этом ом может понять, что если какой-то файл удален или объект удален в исходнике или закомментирован, то значит нужен соответствующий "drop". Но нужно ещё подумать об удобной организации разбивки исходников по прикладным модулям/подмодулям с зависимостями, где в каждом модуле нужно вести свою "datamodel", причём так, чтобы достаточно было иметь только базовый "create table ..." и грамотно расположены связанные "alter" (тут всё-таки есть потребность в явной последовательности операций, причём перемешанной вокруг разных объектов, например, если СУБД не позволяет удалить используемый столбец, то предварительно нужно зависимые объекты сделать пустыми, чтобы убрать эту зависимость). Плюс для "инвариантности" можно подогнать "велопрепроцессор". Тут вспоминали про Rust, как раз можно добавить к условным директивам понятие аннотаций как у него (или как в жабе) по таким мотивам: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. Т.е. "#[...]" означает атрибут/аннотацию для конкретного SQL-оператора или группы операторов, если они расположены вместе, что уменьшает писанину именно как "if-else-end". Ряд СУБД имеют свой арсенал для создания вариантного кода, т.е. непосредственные sql-операторы вида "if not exits ... then create ...", но при этом выполняется манипуляция самим сервером на основе инфы внутри БД, а не на основе текстовой конфигурации сборки. Частично некоторый функционал реализует ряд придворных инструментов, например, подмена переменных в sql plus, но лишь частично. Но для реализации такой тулзы нужен полноценный разбор текста, причём нужны расширения как плагины, понимающие конкретный sql-диалект и потроха СУБД. Тогда возможно и решение смежных задач, вида поддержки доков-комментариев, создание скриптов как "create" в последней или нужной версии (т.е. все alter-ы свёрнуты в общий итог) и т.д. Возможно форматирование исходников и их реструктуризация (управляемая), а также и некоторая верификация. А если уж говорить о создании полноценного db-tools, то очень не хватает подобным инструментам интерактивности. Т.е. чтобы можно было запустить сервер, как emacs или JEdit, он постоянно висит себе и держит соединения с БД, к нему коннектишься, по своему протоколу или хоть с комстроки, хоть по rest-у и пр., он динамически выполняет sql-запросы, управляет каталогом sql-исходников, даёт автокомплит и т.д. И тогда пиши себе плагин хоть для иклипса, хоть для vim-а и пр., или вэб делай. Но это всё мечты и мысли в слух. А так, я это всё к тому, чтобы дать рекомендацию. Если разрабатываемая утилита удовлетворит какие-то свои конкретные потребности, то и хорошо, и увлекаться глобальной и супер-шаблонизацией особо нет смысла. Стандарт разработки БД (см. выше): ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.05.2013, 20:44:22 |
|
||
|
Выбор СУБД для небольшой Java-утилиты
|
|||
|---|---|---|---|
|
#18+
Petro123Максим НМожно хранить в одном файле, можно в разных, кому как удобнее. ну дак и будут разброд и шатания. Ты будешь свой скрипт гладить по головке и разделять всё по файлам. А те, кто ПИСАЛ такие скрипты, спросят: "Нафига лишняя работа?". И вся твоя теория - насмарку. Ты не распарсишь те скрипты, которые пишут программисты (студенты). Я о том, что можно определить структуру как угодну, какую нужно, ограничений нет (в рамках разумного конечно), а затем в рамках этой структуры создавать объекты, работать с ними, контроллировать их. В отличие от ИДЕшек, которые топорно представляют описание и код объектов в жестком не настраиваемом виде. Я смогу запустить тулзу и проверить созданный код на соответствие заданной структуре. А еще я могу организовать ночные билды (полную или частичную сборку базы из исходников) на основании этой тулзы и описанных типов объектов, и если база не соберется, то будет видно кто накосячил. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.05.2013, 20:44:36 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=38269489&tid=2129029]: |
0ms |
get settings: |
18ms |
get forum list: |
24ms |
check forum access: |
7ms |
check topic access: |
7ms |
track hit: |
52ms |
get topic data: |
23ms |
get forum data: |
6ms |
get page messages: |
118ms |
get tp. blocked users: |
3ms |
| others: | 305ms |
| total: | 563ms |

| 0 / 0 |
