2010-07-27 2 views
8

나는 최대 절전 모드 낙관적 잠금에 대해 아래 블로그를 읽고 있었다. 최대 절전 모드로 사용할 계획입니다. 하지만 한 가지 우려가 있습니다. 우리는 자바 코드와 C++ 코드를 가지고 있습니다. 둘 다 하나의 데이터베이스에 연결됩니다. 자바 코드는 낙관적 잠금을 달성하기 위해 최대 절전 모드를 사용할 수 있지만, C++ 코드를 똑같이 만들고 싶습니다. 또한 C++ 코드는 일부 레거시 코드를 사용합니다.최대 절전 모드 낙관적 잠금 .. 어떻게 작동합니까?

http://turgaykivrak.wordpress.com/2009/05/16/72/

최대 절전 모드가 낙관적 잠금을 달성하는 방법을 설명하는 문서가 있습니까?

모든 의견을 환영합니다.

는 정확히 말하면, 당신은 낙관적 잠금하지만 (잠금 없음) 낙관적 동시성을 의미하지 않는다 당신에게
발라

답변

11

감사드립니다. 버전에 타임 스탬프를 사용하는 것은 레거시 데이터베이스 지원을위한 것일뿐입니다. 현대 데이터베이스가 (적어도 이론적으로) 타임 스탬프 저장 정확도보다 빠르게 작동 할 수 있기 때문입니다. 1 증가 버전과 모든 SQL에 "버전 = @ 버전을"추가 :

삽입에
  • : 설정 버전 업데이트에 대한
  • 1 및 삭제 정수 버전 속성을 사용

    매우 간단합니다 성명서. 변경된 레코드의 수를 돌려줍니다. 변경된 레코드의 수가 예상과 다른 경우 StaleObjectStateException을 던집니다. 즉, 비즈니스 로직이 중복 될 수 있으며 변경시 변경 또한, 두 개의 응용 프로그램에 적용 할 수 있다는 것을 의미하기 때문에

개인적으로, 나는 비 레거시 상황에서 동일한 데이터를 작성하는 두 개의 별도의 응용 프로그램을 만들 수없는 것 하나의 응용 프로그램에만 관련이 있습니다.

+0

감사합니다. @Paco. mysql에서 integer 대신 bigint를 사용할 수 있습니까? – Boolean

+1

이 질문은 MySQL에 대해서는 맞지만 SQL Server를 사용하는 경우에는 TimeStamp를 사용하는 것이 좋습니다. http://ayende.com/Blog/archive/2009/04/15/nhibernate-mapping-concurrency.aspx를 참조하십시오. –

+0

mysql과 결합 된 NHibernate 버전 속성에 대한 경험이 없습니다. 나는 당신이 버전 속성 매핑에서 오랫동안 타입을 지정함으로써 mysql bigint를 자바에 오랫동안 매핑 할 수 있다고 생각한다. – Paco