2011-03-24 3 views
0

우리는 서버 측에서 Java를 사용하여 대용량 전자 상거래 웹 사이트 인 db40을 찾고 있습니다. 동시성 및 트랜잭션 지원은 우리에게 매우 중요합니다. 고객이 항목을 구매할 때 단일 거래 내에서 재고 및 고객 주문 내역을 각각 업데이트하기 위해 제품 및 고객 오브젝트를 잠글 필요가 있습니다. db4o로 가능합니까? 다중 객체 트랜잭션을 지원하는지 확인하고 싶습니다.db4o는 동시성과 트랜잭션을 어떻게 지원합니까?

답변

1

여기에도 비슷한 질문이 있습니다 (예 : one). 그리고 제 대답은 다소 다릅니다.

대용량 전자 상거래 웹 사이트 정보 : db4o는 대용량, 대용량 데이터베이스로 구축 된 것이 아니라 데스크탑 및 모바일 응용 프로그램과 같은 내장 된 유스 케이스로 제작되었습니다. 글쎄 그것은 '높은 볼륨'이 무엇을 의미하는지에 달려 있습니다. 수백 또는 동시 트랜잭션을 의미한다고 가정합니다. db4o의 범위를 벗어납니다.

동시성 및 트랜잭션 지원 : db4o 코어는 여전히 기본적으로 단일 스레드이므로 소량의 동시 작업 만 제공 할 수 있습니다. db4o supports transactionsread committed isolation입니다. 이는 트랜잭션이 다른 트랜잭션의 커밋 된 상태 만 볼 수 있음을 의미합니다. 실제로 이것은 매우 약한 보증입니다.

예를 들어, 한 번의 트랜잭션으로 제품 및 소비자의 구매를 업데이트 할 수 있습니다. 그러나 다른 트랜잭션은 이러한 오브젝트를 갱신하고 커밋 할 수 있습니다. 그런 다음 이미 일부 객체를 읽은 실행중인 트랜잭션은 이전 값으로 계산을 수행 할 수 있습니다. 그래서 약한 격리는 당신의 상태를 오염시킵니다. 잠금을 사용하여 잠금을 방지 할 수 있지만 db4o에는 멋진 개체 잠금 메커니즘이 없습니다. 그리고 그것은 성능을 더욱 감소시킬 것입니다.

모두 당신은 아마도 동시성과 트랜잭션 처리를 더 잘 지원하는 '더 큰'데이터베이스가 필요할 것이라고 생각합니다.

+0

코어가 단일 스레드입니까? db4o의 빅 브라 더 (Villant VOD)도 마찬가지입니까? 나는 믿기가 어렵다는 것을 알게된다. 코어에서 단일 스레드 인 경우, 간단한 읽기가 다른 읽기가 실행될 때까지 기다려야한다는 것을 의미합니다. RDBMS보다 10 배 성능이 정확히 나오는 곳은 어디입니까? – user646584

+0

물론 VOD에는 맞지 않습니다. db4o의 현재 상태를 설명했습니다. VOD는 또 다른 짐승이며 이러한 모든 기능을 지원합니다. – Gamlor

+0

데이터베이스 이론이 상당히 약하므로 '읽기 전용 격리'보다 나은 격리 계획에 대해 더 알고 싶습니다. '더 큰'데이터베이스가 이것을 어떻게 효과적으로 처리하는지 몇 가지 정보를 지적 할 수 있습니까? 나는 수색이 있었지만 많이 찾을 수는 없었다. 어쩌면 최소한 핵심 단어를 제공 할 수 있습니다. –

0

db4o semaphores을 사용해야하는 것 같습니다.

+0

물론 가능합니다. 그러나 세밀한 나뭇결 잠금 권한을 얻으려면 많은 노력이 필요합니다. 그리고 스케일링 측면을 더욱 악화시킵니다. 그 시점에서 나는 그러한 것들을 훨씬 더 잘 지원하는 '더 큰'데이터베이스를 골라야한다고 생각합니다. – Gamlor

관련 문제