Какой кросс-платформенный язык сценариев мы должны принять для группы администраторов баз данных? - PullRequest
5 голосов
/ 25 августа 2010

Я хотел бы получить отзывы сообщества о выборе языка, который наша команда собирается сделать в ближайшем будущем.Мы являемся разработчиком программного обеспечения, и я работаю в команде администраторов баз данных Oracle и SQL Server, поддерживающих кроссплатформенное Java-приложение, которое работает на Oracle Application Server.У нас есть кодовые базы SQL Server и Oracle, и мы поддерживаем клиентов на серверах Windows, Solaris и Linux.

Многие из часто выполняемых нами задач недостаточно автоматизированы, а там, где они есть, как правило, гораздо больше.автоматизировано с помощью сценариев оболочки, с небольшим количеством эквивалентной функциональности в Windows.К сожалению, теперь у нас есть проблема перепроектирования скриптов и т. Д. На двух платформах.Поэтому я хочу, чтобы мы выбрали межплатформенный язык для сценариев, вместо использования Bash и неловкого перевода в файлы Cygwin или Batch, где это необходимо.

Это должно быть:

  1. Динамический (поэтому не предлагайте Java или C!)
  2. Легко доступен на каждой платформе (Windows, Solaris, Linux, возможно, AIX)
  3. Очень мало требует настройки (root-доступ не всегда доступен!)
  4. Легко быть принятым для сценаристов оболочки, то есть администраторов баз данных, которые не являются хардкорными разработчиками.
  5. Легко понять код других людей
  6. Дружелюбный с SQL Server и Oracle, без суеты.
  7. Несколько хороших функций XML не сработают.

Было бы предпочтительнее, если бы он работал на JVM, так какэто почти всегда будет установлено на каждом сервере (конечно, на всех серверах приложений), и в нашей компании есть много Java-разработчиков, так что придерживаться JVM имеет смысл.Это не исключение, поскольку я знаю, что Python является очень жизнеспособным языком.

Я создал список опций, но их может быть больше: Groovy, Scala, Jython, Python, Ruby, Perl.

Никто не имеет большого опыта, за исключением того, что у меня достаточно опыта Java и Groovy.Мы ищем что-то динамичное, простое в освоении, легко работающее как с SQL-сервером, так и с Oracle, обладающее некоторыми упрощающими XML-функциями, и это не станет поворотным моментом для администраторов баз данных.Многие из нас очень ориентированы на Bash - что может отвлечь нас от этой зависимости?

Каково мнение людей по этому поводу?

спасибо!

Крис

Ответы [ 6 ]

5 голосов
/ 25 августа 2010

Я думаю, что ваши лучшие три варианта - это Groovy, Python и Scala. Все три позволяют писать код на высоком уровне (по сравнению с C / Java). Python имеет свои совершенно адекватные привязки к БД, а Groovy и Scala могут использовать те, которые созданы для Java.

Преимущества Python в том, что он уже широко используется, поэтому вокруг него есть множество инструментов, библиотек, опыта и т. Д. У него особенно чистый синтаксис, что делает работу с ним эстетически приятной. Недостатки в том, что он медленный (что не может быть проблемой для вас), нетипизированный (поэтому у вас есть ошибки времени выполнения вместо ошибок времени компиляции), и вы не можете переключаться между Jython и Python, так что вы Вы должны выбрать, хотите ли вы большое количество Python или огромное количество Java, минус множество хороших Python.

Преимущества Groovy в том, что вы его уже знаете, и он хорошо взаимодействует с библиотеками Java. Его недостатками также являются медлительность и отсутствие статической типизации. (Таким образом, в отличие от Python, выбор таков: вы больше цените чистый синтаксис и широкое распространение Python, или же вы цените обширный набор библиотек Java больше в языке, который хорошо работает в этой среде?)

Преимущества Scala заключаются в том, что он статически типизирован (то есть, если код проходит через компилятор, у него больше шансов на работу), быстр (так же быстр, как Java, если вы хотите работать достаточно усердно) и взаимодействует. хорошо с библиотеками Java. Недостатки в том, что вам нужно немного больше работать, чтобы заставить статическую типизацию работать (хотя и намного, намного меньше, чем в Java, и в то же время быть более безопасным), и что канонический стиль для Scala представляет собой гибридную объектно-функциональную смесь, которая чувствует себя более отличается от двух других (и, следовательно, требует большей подготовки для использования при полной эффективности ИМО). В отличие от Groovy, вопрос заключается в том, важнее ли знакомство и простота начала работы, чем скорость и правильность.

Лично я сейчас делаю почти всю свою работу в Scala, потому что моя работа требует скорости и потому, что компилятор улавливает те ошибки в кодировании, которые я обычно делаю (так что это единственный язык, который я использовал там, где меня нет) удивляюсь, когда большие блоки кода работают правильно, когда я получаю их для компиляции). Но у меня был хороший опыт работы с Python в других контекстах - взаимодействие с большими базами данных кажется хорошим вариантом использования.

(Я исключил бы, что Perl сложнее поддерживать без существенных преимуществ по сравнению, например, с Python, и я бы исключил, что Ruby недостаточно мощен, чем Python, чтобы гарантировать менее интуитивный синтаксис и более низкую скорость принятия / наличие инструмента.)

5 голосов
/ 25 августа 2010

Вы можете выбрать Python.Его динамический (интерпретируемый), доступный в Windows / Linux / Solaris, имеет легко читаемый синтаксис, что облегчает обслуживание вашего кода.Есть модули / библиотеки для взаимодействия с Oracle, а также различные другие серверы баз данных.Есть также библиотека поддержки XML.Все 7 пунктов покрыты.

4 голосов
/ 25 августа 2010

XML-вещь почти требует Scala.Теперь я люблю Scala, но я предлагаю Python здесь.

3 голосов
/ 25 августа 2010

Если вам нужен динамический язык и в вашей компании уже много Java-разработчиков, то Groovy кажется очевидным выбором, так как Java-разработчикам очень легко его выбрать (также вы сказали, что у вас есть опыт работы с Groovy) .

Groovy работает на JVM и имеет отличную поддержку для работы с XML . Он также имеет очень простой синтаксис для работы с реляционными базами данных .

Он поставляется с консолью и оболочкой (хотя я никогда не использую оболочку), которые позволяют очень легко тестировать / запускать скрипты или фрагменты кода Groovy.

1 голос
/ 25 августа 2010

Хотя я предпочитаю работать над JVM, одна вещь, которая меня отвлекает, это необходимость раскрутить JVM для запуска скрипта. Если вы можете работать в REPL, это не такая уж большая проблема, но она действительно замедляет вас при выполнении сценариев edit-run-debug.

Теперь, конечно, у Oracle есть много Java-вещей, где необходимо взаимодействие, но это только то, что вы можете оценить, насколько это важно. Для простой работы с БД Oracle я видел очень мало Java и много PLSQL / SQL.

Если ваш dba теперь выполняет свою работу в bash, то он, скорее всего, за короткое время подхватит Perl, поскольку есть хороший, логичный путь развития.

Поскольку ruby ​​был спроектирован как улучшенная версия perl, он также может подходить для этой категории. На самом деле Python также.

Scala статически типизируется как Java, хотя и с гораздо лучшим выводом типов.

Я бы порекомендовал пойти по маршруту Perl. CPAN - это туз в дыре, вам не нужно иметь дело с вещами OO, которые могут отключить некоторых администраторов баз данных (хотя это для опытных пользователей).

0 голосов
/ 25 августа 2010

Я был в подобной ситуации, хотя и в небольшом масштабе. Предыдущая ситуация заключалась в том, что любая автоматизация в базах данных SQL Server осуществлялась с помощью VBScript, который я начал использовать. Поскольку я хотел что-то кроссплатформенное (и менее раздражающее, чем VBScript), я выбрал Python.

То, что я узнал, это:

  • Очевидно, что вам нужен язык, который поставляется с библиотеками для удобного доступа к вашим базам данных. Меня не слишком интересовало абстрагирование различий (т. Е. Я все еще писал SQL-запросы на соответствующем диалекте с параметрами). Тем не менее, я был бы немного менее доволен, например, PHP, который имеет только очень специфичные для поставщика библиотеки и функции для определенных баз данных. Я вижу, что это не в вашем списке.
  • Главным препятствием была аутентификация. Если ваш SQL Server использует аутентификацию домена Windows, вам нужно будет поработать, чтобы войти. Другая система также имела особые потребности, так как требовала поддержки токенов RSA.

Во-вторых, Python достаточно универсален, чтобы справляться с трудностями, но он попал на «плохо поддерживаемую» территорию, особенно в Windows. Первую проблему было легко обойти с хоста Windows, и для хоста Unix это возможно , хотя и нелегко. Если вы используете аутентификацию SQL Server, это станет намного проще.

Из вашего другого выбора я бы ожидал, что для Perl существуют различные способы аутентификации и драйверов БД, что с философской точки зрения будет проще для администраторов баз данных, использующих сценарии оболочки. Ruby - без опыта, но он имеет тенденцию иметь пятнистую поддержку для некоторых методов проверки подлинности и соединителей. Scala, я бы ожидал быть слишком «языком программирования» - OOO и FP? Это очень интересный язык, но, возможно, не тот, который я выбрал сначала. Что касается остальных опций на основе Java, у меня нет мнения, но убедитесь, что все типы соединений, которые вы хотите установить, надежно поддерживаются.

...