2014-04-05 3 views
2

이유를 이해하려고하는데 auto-increment pattern is bad when scaling입니다.MongoDB에서 스케일링 할 때 자동 증가 패턴이 왜 나쁜가요?

나는 또한 this article을 읽었습니다.

  • 대신에 적절한 UUID 방법을 사용해야 경쟁 조건에 부딪치지 않고 ID가 진정으로 클러스터 전체에서 고유하다는 것을 확인해야합니다.

_id 샤드에서 중복 된 상황을 정확히 파악하려고합니다.

또 하나의 질문 : 기본이 아닌 키의 자동 증가는 어떻게됩니까? 안전 해요?

대단히 감사합니다!

답변

2

자동 증분 값이 고유하도록하려면 단일 호스트의 단일 스레드에서 ID 생성을 수행해야합니다. 다중 스레드가 사용되는 경우에도 ID 생성 지점은 다른 스레드를 차단해야합니다. 따라서 100 개의 서버 클러스터에서 ID는 100 개의 서버 중 1 개의 스레드에서 생성되어야합니다. 이는 성능 병목 현상뿐만 아니라 2 개의 자동 증가 ID 생성이 서로를 차단할 가능성이 있습니다. 이는 인용 한 인용문에 명시된 경쟁 조건입니다.

오라클 및 SQL Server와 같은 트랜잭션 RDBMS 시스템은 경쟁 조건 문제를 해결했지만 성능 병목 현상에 대한 해결책은 없다는 점에 유의해야합니다.

시스템을 확장해야 할 필요가 있다고 생각되면 기본 키 이외의 키에서 자동 증가를 사용하지 마십시오.

+0

답장을 보내 주셔서 감사합니다. RDBMS에 대한 정보도 유용합니다. 저에게 불분명 한 단 한가지가 있습니다 : 원자 AFAIK 인'findAndModify'를 사용할 때 어떻게 경쟁 조건이 될 수 있습니까? 내가 놓친 게 있니? 이걸 설명해 주시겠습니까? – Curious

+1

경쟁 조건을 얻으려면 다른 ID가 생성되는 동안 직접 또는 간접적으로 하나의 ID를 생성해야합니다. 참조하는 코드에 경쟁 조건 취약점이 표시되지 않습니다. 그러나 고유 한 정수 ID 시퀀스를 생성하는 것이 요구 사항의 일부라면 Mongo가 최상의 구현 선택이 아니라고 말할 수 있습니다. 이 목적을 위해 설정된 RDBMS에서 ID 순서를 생성하는 것이 더 좋습니다. Mongo가 생성되면 ID를 사용할 수 있습니다. 확장 성 문제가 아니라면 Mongo findAndModify 해킹을 사용하십시오. –

+0

고맙습니다. 이제 나는 무엇이 무엇인지 이해한다. – Curious