Mongo에서는 샤딩과 복제의 차이점은 무엇입니까?
실제로 샤딩이 실현하려고 하는 이점을 놓치지 않는 한 복제는 샤딩보다 훨씬 간단해 보입니다.둘 다 수평 스케일링이 되지 않나요?
MongoDB 확장의 경우:
복제는 추가 데이터 복사본을 생성하여 다른 노드에 대한 자동 페일오버를 허용합니다.레플리케이션은, 최신이 아닐 가능성이 있는 데이터를 읽어낼 수 있는 경우에, 판독의 수평적인 확장에 도움이 됩니다.
샤딩에서는 샤드 키를 사용하여 여러 서버에 걸쳐 데이터를 분할함으로써 데이터 쓰기를 수평으로 확장할 수 있습니다.좋은 샤드 키를 선택하는 것이 중요합니다.예를 들어 샤드 키를 제대로 선택하지 않으면 단일 샤드에만 데이터가 "핫 스팟"으로 기록될 수 있습니다.
샤드 환경에서는 MongoDB가 샤드 간의 데이터 배포와 요구를 관리해야 하기 때문에 복잡성이 증가합니다.이러한 측면을 관리하기 위해 설정 프로세스와 라우팅 프로세스가 추가됩니다.
레플리케이션과 샤딩은 일반적으로 조합되어 샤딩 클러스터를 만듭니다.각 샤드는 레플리카 세트에서 지원됩니다.
클라이언트 애플리케이션의 관점에서도, 레플리케이션/샤딩의 상호 작용에 관해서, 특히 다음과 같은 제어가 가능합니다.
하드디스크에 훌륭한 음악 컬렉션이 있고 음악을 발매 연도에 따라 논리적인 순서로 다른 폴더에 저장합니다.드라이브에 장애가 발생하면 수집이 손실될까 걱정됩니다.따라서 새 Disk를 얻고 동일한 폴더 구조를 유지한 채 전체 컬렉션을 복사할 수 있습니다.
샤딩>> 다른 폴더에 음악 파일 보관
레플리케이션 >> 컬렉션을 다른 드라이브와 동기화
리플리케이션은 대부분 기존의 마스터/슬레이브 셋업으로 데이터는 백업멤버와 동기화되며 프라이머리 멤버 중 하나가 장애가 발생했을 경우 백업멤버를 대체할 수 있습니다.상당히 간단한 도구입니다.복제 세트 구성원을 추가하여 읽기 크기를 조정할 수 있지만, 주로 이중화를 위한 것입니다.조금 복잡하지만 일부 앱에서는 매우 잘 작동합니다.
일반적으로 샤딩은 복제의 맨 위에 위치합니다.MongoDB의 "Shars"는 "router"라고 불리는 것이 앞에 있는 복제 세트일 뿐입니다.애플리케이션은 라우터에 접속해 쿼리를 발행해, 전송처의 레플리카 세트(샤드)를 결정합니다.처리할 라우터와 구성 서버가 있기 때문에 단일 복제 세트보다 훨씬 복잡합니다(이러한 서버는 어떤 데이터가 어디에 저장되는지 추적합니다).
Mongo를 수평으로 확장하려면 shard를 사용합니다. 10gen은 라우터/config 서버 셋업을 auto-sharding이라고 부릅니다.어떤 DB에 쓸지 앱이 결정하도록 하는 게토 형태의 샤딩을 더 많이 할 수도 있습니다.
샤딩
샤딩은 여러 서버 간에 대량의 컬렉션을 분할하는 기술입니다.는 여러 샤드를 합니다.mongod
맨 에는요, 맨 앞이 있어요.mongos
이 이합니다.애플리케이션은 이 라우터와 통신합니다. 다음 이 한 서버,즉 '하다'와 합니다.mongod
및 s.mongos
는, 은 같은에 같은 장소에 다릅니다. 여러 개 수 요.mongos
동일한 머신에서 실행되는 서비스입니다.mongod
s(복제 세트라고 함), 단일이 아닌mongod
각 서버에 있습니다.복제본 세트는 여러 인스턴스에서 데이터를 동기화하여 둘 중 하나가 중단되어도 데이터가 손실되지 않도록 합니다.논리적으로 각 복제 세트를 샤드로 볼 수 있습니다.어플리케이션에 대해 투과적이고MongoDB
샤드 키를 선택하면 됩니다.
를 들어, 정, 가, assume에 대해 가정합니다.student
가 가지고 있는 ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★」stdt_id
이데올로기 때문에 ★★★★★★★★★★★★★★★★.mongos
서버는 범위 기반 시스템입니다. 이 기호에 stdt_id
, , , 오른쪽, 오른쪽, 왼쪽, 오른쪽, 오른쪽, 오른쪽, 오른쪽, 오른쪽, 왼쪽, 왼쪽, 왼쪽, 왼쪽, 왼쪽, 왼쪽, 왼쪽, 왼쪽, 왼쪽, 왼쪽, 왼쪽, 왼쪽, 왼쪽, 왼쪽, 왼쪽, 왼쪽, 왼쪽, 왼쪽, 왼쪽, 왼쪽, , 왼쪽, 왼쪽, 왼쪽, 왼쪽, 왼쪽, 왼쪽, 왼쪽, 왼쪽, 왼쪽, 왼쪽, 왼쪽,mongod
★★★★★★ 。
그렇다면 개발자로서 우리가 알아야 할 것은 무엇일까요?
insert
하기 키일 키 .다중 문자 샤드 키일 경우 샤드 키 전체를 포함해야 합니다.- 우리는 수집 자체에 대한 샤드 키가 무엇인지 이해해야 한다.
- 잠 an an
update
,remove
,find
- 약약mongos
에는 샤드 키가 부여되지 않습니다.그러면 컬렉션을 커버하는 모든 다른 샤드에 요청을 브로드캐스트해야 합니다. - 잠 an an
update
- 샤드 키 전체를 지정하지 않으면 브로드캐스트해야 한다는 것을 알 수 있도록 다중 업데이트를 해야 합니다.
샤딩이나 레플리케이션에 대해 생각할 때는, 기입자/갱신 조작의 관점에서 생각할 필요가 있습니다.쓰기를 확장할 필요가 없는 경우, 레플리케이션이 매우 간단합니다.
한편, 워크로드의 대부분이 갱신/기입인 경우, 어느 시점에서 기입의 병목현상이 발생합니다.쓰기 요청이 오면 Mongo는 다른 쓰기 요청을 차단합니다.이러한 쓰기 요청 블록은 첫 번째 요구가 실행될 때까지 계속됩니다.이 쓰기를 확장하고 병렬화하려면 샤딩을 구현해야 합니다.
이걸 어딘가에 두기 위해서...
mongo를 실행하는 가장 기본적인 방법은 스탠드아론 서버입니다.
- 설정(파일 또는 CLI 옵션)을 작성합니다.
- 를 사용하여 를 기동하다
mongod
이 사진에는 "클라이언트"를 포함하지 않았습니다.다음 것을 확인해 주세요.
- 복제 세트는 다른 구성 파일로 정확히 위와 같이 초기화된 서버 세트입니다.
- 링크하기 위해 이들 중 하나에 연결하여 복제 세트 모드를 초기화합니다.
- (가장 일반적인 구성에서) 서로 미러링합니다.이 시스템은 데이터의 고가용성을 보장합니다.
복제본 세트의 초기화는 빨간색 테두리 상자에 표시됩니다.
- 샤딩은 데이터를 복제하는 것이 아니라 데이터를 조각화하는 것입니다.
- 데이터의 각 조각을 청크라고 하며 서로 다른 샤드로 이동합니다. 샤드 = 각 복제본 집합.
- "main" 서버 실행, "main" 서버
mongos
mongod
이것은 클라이언트로부터의 쿼리를 위한 라우터입니다.
명백:단점은 더 복잡한 아키텍처입니다.신규성: 컨피규레이션서버(이것도 다른 컨피규레이션파일).
덧붙여야 할 것은 많지만, 그 말들을 제외하면 그림들은 거의 똑같다.
심지어 mongoDB도 샤딩을 하기 전에 사례를 주의 깊게 검토할 것을 권장합니다.수직 스케일링(vs)은 수평 스케일링(hs) 전에 한 번 이상 사용하는 것이 좋습니다.
vs는 하드웨어(CPU, RAM 등) 업그레이드를 완료했습니다.hs는 더 많은 컴퓨터를 필요로 합니다(단, 저렴한 컴퓨터일 수도 있습니다).
레플리케이션과 샤딩은 모두 (개별 또는 함께) MongoDB 설치 수평 확장에 사용할 수 있습니다.
샤딩은 데이터 증가의 요구를 충족시키기 위한 MongoDB의 솔루션입니다.샤딩은 여러 서버에 걸쳐 데이터 레코드를 저장하여 특히 매우 큰 데이터 세트의 읽기 및 쓰기 쿼리에 대한 처리량을 향상시킵니다.샤드 클러스터 내의 모든 서버는 읽기 또는 쓰기 작업에 응답할 수 있으므로 쿼리 응답 속도가 크게 향상됩니다.
복제는 MongoDB 설치에 안정성, 백업 및 재해 복구를 제공하기 위한 MongoDB의 솔루션입니다.이 프로세스는 여러 서버에 걸쳐 복제본 데이터 세트를 복사하고 동기화합니다.이것에 의해, 1대의 서버가 오프 라인이 되었을 경우의 다운 타임을 방지할 수 있습니다.
세컨더리 서버는 모두 읽기 쿼리에 응답할 수 있지만 프라이머리 서버만 쓰기 작업을 수행합니다.기입 조작의 결과는, 세컨더리 서버에 전파됩니다.
시나리오 1: 폴트 톨러런스 이 시나리오에서는 사용자가 MongoDB 설치 환경에 과금 데이터를 저장합니다.이 데이터는 사용자의 비즈니스에 매우 중요하며 서버가 중단되거나 오프라인으로 전환된 경우에도 24시간 365일 사용 가능해야 합니다.
MongoDB 복제는 이 사용자에게 최적의 솔루션입니다.레플리케이션에서는, 데이터 세트 전체가 복수의 서버에 미러링 됩니다.서버에 장해가 발생하거나 오프라인 상태가 되면, 클러스터내의 다른 서버가 처리를 계승합니다.
시나리오 2: 하이 퍼포먼스 이 시나리오에서 사용자는 MongoDB 데이터베이스에서 실행되는 소셜 네트워킹 사이트를 실행하고 있습니다.소셜 네트워크가 성장함에 따라 MongoDB 데이터 세트도 함께 성장했습니다.사용자에게 쿼리 시간과 페이지 로드가 허용 가능한 지점을 초과하여 증가하고 있습니다.사용자의 MongoDB 설치가 대폭적인 성능 향상을 가져오는 것이 중요합니다.
이 사용자에게는 샤드 MongoDB 클러스터를 설정하는 것이 가장 좋은 솔루션입니다.샤드 클러스터는 사용자의 데이터 세트를 분할하고 그 일부를 별도의 보조 서버에 저장합니다.각 secondary 서버는 데이터 부분의 읽기 또는 쓰기 쿼리에 응답할 수 있으므로 설치 응답 시간이 대폭 단축됩니다.
MongoDB Atlas는 Database as a Service 입니다.Azure , AWS, GCP 등 3대 클라우드 프로바이더를 지원합니다.클라우드 환경에서는 일반적으로 고가용성 및 확장성에 대해 설명합니다.Atlas "클러스터"에서 는 복제 세트 또는 샤드 클러스터일 수 있습니다.이 두 가지는 클라우드 환경의 고가용성 및 확장성 기능에 대해 설명합니다.
일반적으로 클러스터는 특정 작업을 수행하기 위해 사용되는 서버 그룹입니다.따라서 샤드 클러스터는 데이터 증가의 요구를 충족하기 위해 여러 머신에 걸쳐 데이터를 저장하는 데 사용됩니다.데이터의 사이즈가 커짐에 따라, 1대의 머신이 데이터를 격납하기에 충분하지 않을 수도 있고, 허용 가능한 읽기 및 쓰기 처리량을 제공할 수도 있습니다.샤드 클러스터는 기본 클라우드 환경의 수평적 확장성을 지원합니다.
MongoDB의 복제 세트는 동일한 데이터 세트를 유지하는 mongod 프로세스 그룹입니다.복제 세트는 이중화 및 고가용성을 제공하며 모든 프로덕션 배포의 기반이 됩니다.복제본에서 하나의 노드는 모든 쓰기 작업을 수신하는 기본 노드입니다.secondary와 같은 다른 모든 인스턴스는 동일한 데이터 세트를 가지도록 primary에서 작업을 적용합니다.복제 세트는 주로 데이터 가용성에 초점을 맞춥니다.
문서를 확인하십시오.
감사해요.
언급URL : https://stackoverflow.com/questions/11571273/in-mongo-what-is-the-difference-between-sharding-and-replication
'code' 카테고리의 다른 글
AngularJS HTML을 동적으로 추가하고 컨트롤러에 바인드하는 방법 (0) | 2023.03.04 |
---|---|
스프링 테스트 및 보안:인증을 모의하는 방법 (0) | 2023.03.04 |
jq를 사용하여 이중 따옴표를 사용하지 않는 JSON의 Concat 번호 (0) | 2023.03.04 |
스프링 부트 유닛 테스트에서 JWT 인증을 모의하는 방법 (0) | 2023.03.04 |
봄에 application.properties를 상속하는 방법 (0) | 2023.03.04 |