2012-04-18 1 views
3

특정 검색 관련 작업을 위해 JPL을 통해 Prolog가 필요한 Java EE 웹 응용 프로그램을 개발하고 싶습니다. 웹 응용 프로그램이 JBoss 응용 프로그램 서버에 배포됩니다. Prolog 엔진은 YAP 또는 SWI (afaik는 현재 JPL과 호환되는 유일한 Prolog 엔진) 일 수 있습니다. Prolog 쿼리는 잠재적으로 큰 데이터베이스에 저장된 정보에 의존합니다. 사람이이 식물 또는 유사한 무언가를 시도 경우Java EE 웹 응용 프로그램에서 JPL (Java + Prolog) 사용

, 당신은 나에게 다음과 같은 질문?

  • 프롤로그 엔진에 액세스해야하는 동시 HTTP 세션을 관리하는 가장 좋은 방법은 무엇인가에 대한 피드백을 제공하시기 바랍니다 수 있습니다? 각각의 개별 세션에 Prolog 엔진을 할당하는 것이 바람직할까요? 이 솔루션이 효과가 있다면 '프롤로그 엔진 풀링'과 비슷한 것을 구현하여 프롤로그 엔진을 새 세션에 신속하게 할당 할 수 있습니까? . 또는 최상의 솔루션은 모든 쿼리 요청을 동 기적으로 관리하는 단일 Prolog 엔진을 갖는 것입니다. (그리고 천천히).
  • Prolog와 데이터베이스의 상호 작용을 어떻게 관리 할 수 ​​있습니까? 데이터가 데이터베이스에서 자주 변경되고 Prolog가 쿼리를 해결하기 위해이 데이터를 필요로하는 경우 Prolog 엔진의 사실을 데이터베이스의 데이터와 동기화 된 상태로 유지하는 가장 좋은 전략은 무엇입니까? 데이터베이스가 커지면 새 세션 (예 : Prolog 사실로 데이터베이스의 모든 데이터를 다시로드)에서 처음부터 시작하는 해군 옵션은 좋지 않은 것처럼 보입니다.
  • 구현 중 java-prolog-database interaction과 관련된 다른 모든 문제점/어려움이 있습니까?

미리 감사드립니다.

+0

질문을 여러 질문으로 나눌 수 있습니다. 웹 서비스를 수행하는 방법 및 영구 데이터를 수행하는 방법에 대한 솔루션은 약간 관련되어 있지만 한 가지 대답에 포함될 때 혼란 스러울 수 있습니다. –

+0

안녕하세요 @ CookieMonster!, 잘게 분할하는 것이 좋은지 확실하지 않습니다. 두 질문 모두 동일한 문맥을 공유하며 아마도 한 질문 (예 : 웹 응용 프로그램의 프롤로그 엔진 관리)에 대한 해결책은 다른 하나에 대한 적절한 해결책 (예 : 프롤로그 엔진을 데이터베이스와 동기화 된 상태로 유지하는 방법)에 영향을줍니다. 문제의 전체적인 그림을 보여 주려고합니다. – Sergio

답변

1

Prolog 엔진에 액세스해야하는 동시 http 세션을 관리하는 가장 좋은 방법은 무엇입니까?

JPL의 소스를 보면 엔진 풀을 사용하는 것처럼 보입니다. 쿼리 데이터 형식은 열거 자 패턴과 close() 작업을 구현합니다. 엔진이 활성화되어있는 한 쿼리에 엔진이 자동으로 할당됩니다.

각 HTTP 요청은 새로운 쿼리 개체를 통해 Prolog 시스템에 독립적으로 액세스 할 수 있습니다. HTTP 요청 중에 조회 오브젝트를 닫으 려하지 않으려면 http 세션에 첨부 할 수도 있습니다. 그리고 다른 요청을 다시 사용하십시오.

어떻게 Prolog와 데이터베이스의 상호 작용을 관리 할 수 ​​있습니까?

이는 데이터베이스의 데이터 사용 패턴과 사용 가능한 액세스 경로에 따라 다릅니다. 요청하는 동안 매우 큰 데이터베이스에 빠르게 액세스하고 각 요청 중에 데이터를 다시 페치 할 수 있습니다. 예를 들어 필요한 일치하는 데이터 세트가 작고 데이터베이스에 적합한 인덱스가있는 경우 일치하는 데이터에 빠르게 액세스 할 수 있습니다.

그렇지 않으면 지능형 캐싱을 구현해야합니다. 나는 현재 일종의 체크 인/체크 아웃 패턴을 사용하는 솔루션에서 일하고있다. 그러나 이것은 여러 사용자가있는 웹 서버에는 적합하지 않습니다. 나는이 패턴을 한 사용자가 있고 하나는 메모리에있는 데이터 쓰레기를 체크 한 독립 실행 형 솔루션에 사용하고 있습니다. 다양한 사용자가있는 웹 서버의 경우 정크가 웹 서버 메모리를 오버 플로우시킬 수 있습니다.

그래서 캐싱은 정크를 제한하고 스로틀 할 수 있거나 매우 큰 웹 서버 메모리가있는 경우에만 작동합니다. 어쩌면 당신은 당신의 어플리케이션에 대해 그러한 불변성을 찾을 수 있습니다. 그렇지 않으면 Prolog 사용 여부와 상관없이 Java EE를 수행 할 수 없다는 결론이 나올 수 있습니다.