2010-06-24 1 views
1

시나리오를 설명하기 위해 간단하지만 복잡한 대답을해야 할 수도 있습니다 만 아키텍처를 읽을 복수의 무결성을 보장하는 방법에 대해 설명합니다. 그런 다음 약 5 ~ 6 개의 읽기 전용 데이터베이스가 있습니다. 쓰기 데이터베이스에는 특정 인벤토리에 대한 개수가 있습니다. 당신은 수십만 명의 사용자가이 특정 인벤토리 아이템을 치고 있지만 수량은 제한되어 있습니다. 논쟁을 위해, 10 개의 항목을 말하십시오.MySQL의 :</p> <p>가 하나 개 쓰기 만 MySQL의 데이터베이스가있는 경우를 상상해 :

10 개 품목 만 판매되도록하는 가장 좋은 방법은 무엇입니까? 읽기 전용 슬레이브가 업데이트되는 시간 사이에 200ms 델타가있는 경우 카운트의 무결성을 유지할 수 없으므로 보유하지 않은 인벤토리를 판매 할 수 있습니까?

이 문제를 어떻게 해결 하시겠습니까?

+0

재고가 제로 이하로가는 것은 흔히 볼 수 있습니다. 사업으로서, 당신은 실제로 물건을 가지고 있지 않기 때문에 당신은 정말로 단지 $만을 받아들이지 않겠습니까? ;) –

+0

그 이상의 질문은 무엇보다도 문제입니다. 나는 방금 내가 더 알고 싶어하는 가설적인 시나리오를 만들었다. – randombits

+0

@OMG 조랑말 : 그것은 사업에 달려 있습니다. 품목이 희소하고 재고가 없거나 납기일이있는 경우 $을 수락 할 위험이 있습니다. –

답변

1

동시 사용자를위한 기본 솔루션도이 문제를 다룰 것입니다. "구매"트랜잭션의 어떤 시점에서 (서버 쓰기) 인벤토리를 감소시켜야합니다. 어떤 방법을 통해서든 인벤토리가 0 이하로 떨어지지 않도록하십시오.

남은 항목이 하나 있고 구매하려고하는 두 사람이 있다면 운이 좋지 않을 것입니다.

복제 대기 시간은 똑같습니다. 두 명의 사용자가 사용할 수있는 제품을 보지만 구매할 때까지 사라졌습니다. 이 시나리오에 대한 좋은 해결책은 복제 대기 시간과 사용자가 단순히 마지막 항목을 다른 사용자 아래로 빼내는 것입니다.

0

모두 업데이트를 위해 마스터 테이블을 잠그기로 결정한시기와 창에 따라 다릅니다.

가. 반드시 100 % 확신해야하는 경우, 해당 항목을 반드시 구입해야합니다. 특정 사용자에 대해 항목을 등록하자 마자 해당 항목을 잠 가야합니다 (즉, 인벤토리 재고를 일시적으로 감소시킬 것임을 나타냄)

B. "미안하다고 표시되면 괜찮습니다. 재고 없음 "메시지가 표시됩니다. 당신은 청구하기 직전에 아이템을 잠 가야합니다. (거래가 완료된 후에도 할 수 있지만 매우 분노한 고객을 희생시켜야합니다.)

나는 잠금을 위해 접근 방식 A를 선택하고 "판매 곧 재고가 남아 있음 "을 경고합니다. (매우 빈번한 상황 인 경우, 항목에 타격하는 동시 사용자의 수를 산정하고 더 정확한 경고를 줄 수 있습니다.)

비즈니스 관점에서 볼 때, 동시 구매자 수보다 낮습니다.) 재고가 없어도 "크리스마스"시간에 당연히 불가피합니다.