분산 컴퓨팅 환경에서의 CAP 및 BASE 이론
Consistency: 분산 시스템을 이루는 다수의 노드로부터 동일한 응답을 얻을 수 있어야 한다. (필수)
Availability: 분산 시스템을 이루는 특정 노드에 장애가 발생하더라도 분산 시스템이 동작해야한다. (필수 가능성)
Partition Tolerance: 장애로 인해 노드 사이의 통신이 불가능해도 분산 시스템은 동작해야 한다. (선택)
+ CAP을 모두 만족하는 모델은 없으며, 이 중에서 보통 2가지를 선택해 우선 순위를 둔다.
Basically Available: 분산 시스템은 언제나 요청에 응답할 수 있어야 한다.
Soft State: 분산 시스템의 상태는 외부의 요청이 없더라도 언제든 바뀔 수 있다.
Eventually Consistent: 일관성이 일시적으로는 깨질 수 있지만 최종적으로는 일관성을 유지한다.
분산 환경에서 새로운 ACID 모델
이전
Atomicity(원자성): 트랜잭션과 관련된 작업들이 부분적으로 실행되다가 중단되지 않음
Consistency(일관성): 트랜잭션이 성공하면 언제나 일관된 데이터베이스 상태를 유지함
Isolation(독립성): 트랜잭션 수행시 다른 트랜잭션의 연산이 끼어들지 않음
Durability(영속성): 성공적으로 수행된 트랜잭션 내용은 다음 트랜잭션이 수행되기 전까지 보장됨
현재
Assiciative(결합)
Commutative(교환)
Idempotent(멱등성)
Distributed(분산)
MongoDB 특징
레코드 구조
Size: 헤더를 포함(4byte)
Extent Offset: 레코드가 속한 offset(4byte)
Next Offset: 다음 레코드(4byte)
Prev Offset: 이전 레코드(4byte)
Bson Object: 데이터를 저장함
조회는 동시에 가능
데이터 변경은 DB lock을 획득 후 가능
데이터 추가/삭제시 메모리에서 인덱스 재정렬
게임 서비스시 고려 해야 하는 사항들
분할이 균등하지 않다면 스케일 산정 불가 => 데이터를 분할해 처리하기 위한 샤드키가 중요함
읽기/쓰기 비율을 고려 => 게임 DB의 경우 쓰기 비중이 최소 30% 이상
서비스 분석을 위한 처리가 필요 => RDBMS로 데이터 마이그레이션
CPU의 Numa 설정은 꺼두는게 좋음 => Non-Uniformed Memory Access로 각 프로세서에 달려있는 전용 메모리를 사용하는 방식
증설시 각 노드에 연결되는 connection 개수를 고려해야함
성능 이슈는 물리적인 리소스보다 데이터 구조 설계가 더 중요함
데이터 모델 비교
관계형 데이터 베이스 | NoSQL 데이터 모델 |
데이터 정규화를 통한 독립적인 엔티티 | 비 정규형의 문서 |
데이터 중복 제거 및 무결성 보장 | 응용프로그램 고유의 접근형태의 데이터 모델이 결정 |
What answer do i have? | What questions do i have? |
데이터 형태에 대한 대답 | 어플리케이션의 질문에 적합한 설계 |
데이터 모델 최적화
호출되는 형태에 맞춰 최적화 => 비표준화 / 집합체
어플리케이션 레벨에서 M:N 관계 데이터
Atomic Aggregates(원자적 집합체) => 단일 key나 문서로 최소 단위로 통합하여 처리
Dimensionality Redection(차원 감소) => 하나의 키 값 모델이 다차원 데이터를 매핑
Inverted Search(역검색) - Direct Aggregation (직접 집계)
Tree Aggregation => 트리를 한 번에 조회시 효율적이지만 업데이트 비용이 클 수 있다.
Materialized Paths(실체화된 경로) => 그룹의 실체화된 데이터를 포함하여 저장
Nested Sets(중첩된 집합) => 중첩 집합 범위로 나누어 사용
출처: 넥슨코리아
http://ndcreplay.nexon.com/NDC2013/sessions/NDC2013_0034.html
그 외에 추가 참고하면 좋을?
https://velog.io/@devstone/MongoDB-%EC%B5%9C%EC%A0%81%ED%99%94
'NDC > DB' 카테고리의 다른 글
[NDC 2015] 마비노기 듀얼: 분산 데이터베이스 트랜잭션 설계와 구현 (0) | 2023.01.09 |
---|---|
[NDC 2015] 이 쿼리를 어떻게 짜야 잘 짰다고 소문이 날까? (0) | 2023.01.06 |
[NDC 2014] 데이터베이스에서 데드락이란 무엇인가? (사례 포함) (0) | 2022.12.25 |
[NDC 2014] 라이브 상황에서 윈도우 서버 개발자가 겪은 좌충우돌 Redis 적용 경험담 (0) | 2021.12.25 |
[NDC2013] 너무너무 훌륭한 MySQL (0) | 2021.11.12 |