Вопрос

Я нашел статью 2008 года, в которой обсуждалось, как вызов Java-кода из MySQL.Было много предостережений и отказов от ответственности, потому что процесс включал работу с экспериментальной ветвью MySQL.

Для проекта, который я имею в виду, было бы очень полезно иметь возможность доступа к библиотекам Java в MySQL, аналогичным библиотекам Oracle Хранимые процедуры Java.Существует ли эта возможность сейчас как стандартная функция MySQL?Если нет, то какие СУБД с открытым исходным кодом поддерживают что-то похожее на хранимые процедуры Oracle Java?

Это было полезно?

Решение

PostgreSQL поддерживает подключаемые языки процедур, и существует проект по расширению PostgreSQL с PL/Java как язык.

Я не рекомендую помещать слишком много кода в СУБД.Инструменты для разработки, тестирования и отладки кода на прикладном уровне лучше, чем инструменты для кода в СУБД.

Также многие разработчики не понимают, что код внутри СУБД должен подчиняться изоляции транзакций.Они пытаются отправлять электронные письма с помощью триггеров и так далее.Я думаю, что код с побочными эффектами должен быть на прикладном уровне, чтобы вы не создавали фантомные эффекты (напримерэлектронное письмо может уведомлять об изменении базы данных, даже если изменение было откатано).

Другие советы

Если вы можете использовать HSQLDB, то вы можете вызывать методы java непосредственно из SQL: http://hsqldb.org/doc/2.0/guide/sqlroutines-chapt.html#N1240C

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

Такой зверь был бы интересен для сценариев, где меняются не только параметры, но и формулы могут меняться.

Трудно дать хороший совет, основываясь на той ограниченной информации, которую вы предоставили до сих пор.Однако:

...в примере используется тип данных на основе графика (химические структуры), который не может быть сопоставлен запросу с использованием встроенных функций MySQL.Библиотека Java преобразует запрос и содержимое текстового поля в объект в памяти, который может быть сопоставлен.Сохранение этой логики на уровне базы данных привело бы, например, к сохранению объединений в базе данных, которая, похоже, там, где им и место.По крайней мере, такова идея.

Я не думаю, что я бы использовал Java на стороне базы данных в MySQL для этого.Вместо этого, я думаю, я бы рассмотрел следующие варианты:

  • Используйте объектно-реляционное сопоставление, такое как JDO или JPA (например, используя Hibernate), чтобы иметь дело с сопоставлением между вашей моделью данных на основе графов и тем, что предоставляет база данных.Вам не обязательно использовать СУБД в качестве серверной части, но это, вероятно, лучшее место для начала ...если только вы уже не обнаружили, что это проблема с производительностью.

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

  • Если вам действительно нужно использовать логику приложения на стороне сервера (по соображениям производительности!), придерживайтесь механизмов, поддерживаемых вашей СУБД.Например, в Oracle вы бы использовали PL / SQL и PostgreSQL, у вас есть несколько опций.Будьте готовы переключиться на другую СУБД, которая лучше соответствует требованиям вашего приложения.

Я (лично) избегал бы зависимости от экспериментальной ветви какой-либо базы данных:

  • Рассмотрим, что произойдет, если экспериментальная ветвь не будет объединена обратно с основной ветвью.Вы застряли бы со своей кодовой базой в зависимости от ветки, которая не поддерживается и, скорее всего, перестанет поддерживаться и выдохнется.

  • Использование (в настоящее время) неподдерживаемой ветви СУБД станет препятствием для других пользователей, которые, возможно, захотят использовать ваше программное обеспечение.

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top