2011-03-25 2 views
2

우리는 동시 작업을 피하고 무결성을 유지하기 위해 자원을 액세스/수정하기 전에 잠글 필요가있는 응용 프로그램의 요구 사항이 있습니다. 리소스에 대해 수행 된 일련의 작업이 있으므로 리소스에 액세스하는 모든 구성 요소가 존중해야하는 응용 프로그램 수준 잠금 개념을 구현하기로 결정했습니다.응용 프로그램 수준 잠금 구현

리소스가 여러 프로세스에 의해 액세스/수정되므로 동기화가 오버 헤드가된다는 점에 유의하십시오. 이것은 응용 프로그램 수준 잠금을 선택하는 이유 중 하나이기도합니다.

응용 프로그램 수준 잠금을 구현하기위한 방법 중 하나는 리소스 이름, 잠금 유형 (읽기 잠금, 쓰기 잠금 또는 전체 배타적 잠금)과 같은 열을 갖는 데이터베이스 테이블의 항목을 삽입하고 업데이트하는 것입니다. 잠금을 획득 한 프로세스에 대한 정보를 제공합니다. 데이터베이스 테이블은 리소스에 액세스하는 모든 프로세스에 집중되는 유일한 구성 요소이므로 옵션으로 선택했습니다. 그러나 누군가 다른 가능성을 탐색 할 수 있다면 도움이됩니다.

데이터베이스 접근 방식의 또 다른 문제점은 구현시 비관적 잠금을 사용해야한다는 것입니다. (우리의 응용 프로그램은 DB 서버로 Oracle을 사용합니다.)

이 질문의 목적은 응용 프로그램 수준 잠금을 구현하는 다양한 방법을 탐색하는 것입니다.

편집 한

나는 데이터베이스 접근 방식은 다양한 응용 프로그램 구성 요소에 의해 수정 액세스

  1. 자원은 /의 사용자가 동적으로 추가되기 때문에 비관적 잠금이 구현한다는 것을 언급하는 이유 소프트웨어. 따라서 항상이 데이터베이스 테이블에 항목을 삽입하는 것은 추악합니다.
  2. 리소스 항목이이 테이블에서 만들어진 경우에도 이러한 항목을 언제 삭제합니까?

낙관적 인 잠금 방식이 좋았지 만 구현 방법에 대해 생각할 수 없었습니다. 3 개 잠금 유형

  1. 읽기 잠금이 있다는 것을 내가 지정하는 위의 문제 문을 업데이트 한 잠금 유형 에 대한 세부 정보를 추가

    편집 2 - 취득 할 수있는 모든 다른 잠금 장치 중 하나 경우 읽기 또는 쓰기

  2. 쓰기 독점 잠금 - 다른 모든 잠금
  3. 전체 독점 잠금을 읽을 경우 획득 할 수 -이 자원에는 잠금 장치가없는 경우 획득 할 수
+2

어떤 종류의 응용 프로그램 (웹/GUI/CLI/etc?)을 개발하고 프로그래밍 언어로 사용하고 있습니까? – Teekin

+0

glassfish 클러스터에 배포되는 웹 응용 프로그램입니다. Java 프로그래밍 언어로 응용 프로그램을 개발 중입니다 –

답변

1

데이터베이스 스타일 잠금에 대해 고려해야 할 추가 필드는 현재 시간입니다. 또한 응용 프로그램의 모든 조작이 X 시간을 초과 할 수 없다는 것에 동의 할 수도 있습니다.

제안에 대한 추론은 가능한 응용 프로그램이 충돌하고 데이터베이스와의 연결이 끊어지는 등의 상황을 방지하고 잠금을 "실행 취소"할 수없는 경우를 방지하기위한 것입니다. 다른 응용 프로그램에는 오래된 잠금을 제거하고 새 잠금을 만드는 기능이 포함됩니다.

응용 프로그램에서 열을 삽입 한 다음 임의의 시간 동안 기다린 다음 다시 확인하려고 할 수도 있습니다. 이렇게하면 데이터베이스가 작업을 완료하기를 기다리는 동안 리소스에 응용 프로그램이 충돌 할 가능성을 줄일 수 있습니다.

+0

답장을 보내 주셔서 감사합니다. timestamp 열을 추가하는 이유는 낙관적 인 잠금이 있다고 가정하기 때문입니다. 낙천적 인 잠금 기능을 구현할 수 없다고 생각하는 이유로 위의 편집을보십시오. 복구에 관한 두 번째 요점은 대단히 필요하지만 리소스에 대한 잠금을 획득 한 프로세스에 대한 정보로 수행 할 수 있다고 생각합니다. 새 열을 삽입하는 것에 대한 세 번째 요점을 이해하지 못했습니다. –

+0

"이 행을 언제 삭제합니까?" 편집에서. 위의 두 번째 단락의 요지이기도합니다. 응용 프로그램이 잠금을 해제하면 부실 잠금을 제거하도록합니다. 세 번째 단락은 두 응용 프로그램이 동시에 같은 리소스를 잠그려고 할 때 가능한 경쟁 조건을 중지하는 것이 었습니다. 두 번째 잠금 확인과 함께 무작위로 지정된 시간은 동시 액세스를 방해 할 수 있습니다. – tamarintech

+0

잠금 유형에 대한 세부 사항을 지정하기 위해 문제점 설명을 갱신했습니다. 나중에이 정보를 추가하는 것에 대해 죄송합니다. 1. 언제 응용 프로그램이 타임 스탬프 열을 업데이트합니까? 2. 다른 응용 프로그램이 오래된 잠금을 제거하고 새로운 잠금을 생성하고 동시에 해당 자원에 대한 잠금 요청이있을 때 경쟁 조건이 발생하지 않습니다. 3. 세 번째 단락에서 응용 프로그램이 열을 삽입한다고 언급합니다. 이 새로운 컬럼은 무엇입니까? –

관련 문제