2010-01-09 3 views
9

2008 년 기사에서 call Java code from MySQL에 대해 토론했습니다. 그 과정에는 MySQL의 실험적인 부분을 다루는 것이 포함되어 있었기 때문에 많은주의 사항과 면책 조항이있었습니다.MySQL에서 Java 코드를 호출하는 방법은 무엇입니까?

내가 염두에두고있는 프로젝트에서 MySQL의 Java 라이브러리에 액세스 할 수 있다는 것은 오라클의 Java Stored Procedures과 유사합니다. 이 기능은 현재 MySQL의 표준 기능으로 제공됩니까? 그렇지 않은 경우, 오라클의 Java 저장 프로 시저와 유사한 어떤 오픈 소스 RDBMS를 지원합니까?

+3

+1 흥미 롭습니다. 나는 항상 db에 데이터를 저장하고 비즈니스 계층에서 모든 로직을 구현했습니다. 사실 저는 이것에 대해 종교적이었습니다. db에서 Java 코드를 호출하는 것이 좋은 설계 결정이었던 프로젝트를 보는 데 관심이 있습니다. 어떤 링크? –

+1

예를 들어 DB의 기능을 뛰어 넘는 사용자 지정 기능. 그러나 나는 또한 그러한 일을 할 수 있다는 가치에 대해 매우 의문을 품습니다. DB는 데이터를 저장/관리하기위한 것이지 비즈니스 물건을 저장하는 것이 아닙니다. – BalusC

+1

@darren이 예제에는 내장 된 MySQL 함수를 사용하여 쿼리와 일치 할 수없는 그래프 기반 데이터 유형 (화학 구조)이 포함됩니다. Java 라이브러리는 텍스트 필드의 쿼리와 내용을 일치시킬 수있는 메모리 내 객체로 변환합니다. DB 계층에이 논리를 유지하면 데이터베이스에 조인을 유지할 수 있습니다. 조인은 데이터베이스에 속해있는 것처럼 보입니다. 그것이 적어도 아이디어입니다. –

답변

6

PostgreSQL은 플러그 형 프로 시저 언어를 지원하며 PostgreSQL을 언어로 PL/Java으로 확장하는 프로젝트가 있습니다.

RDBMS에 코드를 너무 많이 넣지 않는 것이 좋습니다. 응용 프로그램 계층에서 코드를 개발, 테스트 및 디버그하는 도구는 RDBMS의 코드 도구보다 낫습니다.

또한 많은 개발자는 RDBMS 내의 코드가 트랜잭션 격리를 따라야한다는 것을 이해하지 못합니다. 그들은 트리거 등으로부터 전자 메일을 보내려고합니다. 부작용이있는 코드는 응용 프로그램 계층에 있어야하므로 팬텀 효과를 만들지 않아야합니다 (예 : 변경 사항이 롤백 되었음에도 불구하고 전자 메일이 데이터베이스 변경을 알릴 수 있음).

+1

물론, 올바른 생각을 가진 사람은 RDBMS에서 직접 전자 메일을 보냅니다 (예 : 메일 서버가 다운되었을 수 있음). 올바른 방법은 이메일을 이메일 큐 테이블에 추가하고 별도의 프로세스에서이 이메일 큐 테이블을 확인하고 실제로 이메일을 보내는 것입니다. 이렇게하면 롤백이 전자 메일을 큐 테이블에 롤백 할 것이므로 트랜잭션 문제가 해결됩니다. –

1

전 Bill과 완전히 동의하지만 비즈니스 규칙이 데이터베이스에 저장 (처리되지 않음)되는 것을 상상할 수 있습니다. 나는 drools을 여기에서 생각하고있다. 엔진은 응용 프로그램에 있지만 규칙은 관리 프런트 엔드가있는 데이터베이스에있을 수 있습니다.

이러한 짐승은 매개 변수가 변경 될뿐만 아니라 수식도 변경 될 수있는 시나리오에서 흥미로울 것입니다.

1

그것은 당신이 지금까지 제공 한 것으로 제한된 정보를 바탕으로 좋은 조언을 제공하기가 어렵습니다. 그러나 :

... 예제에는 내장 된 MySQL 함수를 사용하여 쿼리와 일치시킬 수없는 그래프 기반 데이터 형식 (화학 구조)이 포함됩니다. Java 라이브러리는 텍스트 필드의 쿼리와 내용을 일치시킬 수있는 메모리 내 객체로 변환합니다. DB 계층에이 논리를 유지하면 데이터베이스에 조인을 유지할 수 있습니다. 조인은 데이터베이스에 속해있는 것처럼 보입니다. 그것이 적어도 아이디어입니다.

저는 MySQL에서 데이터베이스 측 Java를 사용할 것이라고 생각하지 않습니다.

  • 은 JDO 또는 그래프 기반 데이터 모델과 무엇 사이의 매핑을 처리하는 (최대 절전 모드를 사용하여 예를 들어) JPA와 같은 객체 - 관계형 매핑을 사용하는 대신에, 나는 다음과 같은 옵션을 고려할 것이라고 생각 데이터베이스가 제공합니다. 반드시 RDBMS를 백엔드로 사용할 필요는 없지만, 이것이 성능상의 문제라는 것을 이미 알지 못한다면 아마 시작하기 가장 좋은 장소 일 것입니다.

  • 데이터 모델 및 데이터 액세스 패턴을 다시 한 번 살펴보십시오. 서버 측 응용 프로그램 로직에 의존하지 않고 응용 프로그램의 기본 쿼리를 (효율적인) 테이블 조인으로 구현할 수있는 변환을 이해할 수 있는지 확인하십시오.

  • 성능 측면에서 서버 측 응용 프로그램 논리를 사용해야 할 경우 RDBMS에서 지원하는 메커니즘을 고수하십시오.예를 들어, Oracle에서는 PL/SQL과 PostgreSQL을 사용할 수 있습니다. 응용 프로그램 요구 사항에 더 잘 맞는 다른 RDBMS로 전환 할 준비를하십시오.

나는 (개인적으로) 일부 데이터베이스의 실험 지점에 따라 피할 것 :

  • 이 실험 분기 다시 주요 지점에 병합되지 않은 경우 어떤 일이 발생하는지 생각 해보자. 지원되지 않는 브랜치에 따라 코드 기반을 고수하게 될 것이며 유지 관리가 어려워 질 수 있습니다.

  • (현재) 지원되지 않는 RDBMS 브랜치를 사용하면 소프트웨어를 사용하고자하는 다른 사람들에게 장애가됩니다.

분명히 소프트웨어의 장기적인 실행 가능성이 주요 관심사가 아니라면이 조언을 무시할 수 있습니다. 그러나 그것은 아마도 누군가에게 중요합니다. 예 : 연구 책임자.

+0

ORM을 사용하면 아무 것도 해결되지 않습니다. 단지 문제를 가린 것입니다 : http://blogs.tedneward.com/2006/06/26/The+Vietnam+Of+Computer+Science.aspx – Gili

관련 문제