부호화와 발전
관계형 데이터베이스
일반적으로 모든 데이터베이스의 모든 데이터가 하나의 스키마를 따른다고 가정한다.
읽기 스키마(스키마리스) 데이터베이스
스키마를 강요하지 않으므로 다른 시점에 쓰여진 이전 데이터 타입과 새로운 데이터 타입이 섞여 포함될 수 있다.
데이터 구조
- object, struct(구조체), list, array, hash table, tree 등
- CPU에서 효율적으로 접근하고 조작할 수 있게 (보통은 포인터를 이용해) 최적화된다.
부호화
- 인메모리 표현 -> 바이트열(ex : JSON 문서)로의 전환 - 직렬화, 마샬링이라고 함
- 파이썬의 pickle, 루비의 Marchal
- 바이트열 -> 인메모리 표현 : 복호화 - 파싱, 역직렬화, 언마샬링이라고도 함
- 보통 특정 프로그래밍 언어와 묶여 있어 다른 언어에서 데이터를 읽기는 매우 어렵다.
- 자바의 내장 직렬화는 성능이 좋지 않고 비대해지는 부호화로 유명하다.
JSON과 XML, 이진 변형
JSON
- 자바스크립트의 일부이기 때문에 웹 브라우저에 내장된 지원, XML 대비 단순함
- 하지만 이진 형식과 비교하면 많은 공간 사용
-> JSON, BSON, BISON, XML 용으로 사용 가능한 다양한 이진 부호화의 개발로 이어짐
부호화된 데이터는 숫자 1,2,3과 같은 필드 태그를 포함
이진 스키마 기반 형식
- 스리프트, 프로토콜 버퍼, 아브로
스키마
스키마 발전 : 스키마는 필연적으로 시간이 지남에 따라 변함
쓰기 스키마와 읽기 스키마
쓰기 스키마
- 스키마를 애플리케이션에 포함하고, 스키마로 데이터를 부호화함
읽기 스키마
- 파일이나 데이터베이스/네트워크 등에서 읽은 데이터를 복호화
스키마의 장점
- 자체한 유효성 검사 규칙을 지원
- 스키마를 기반으로 한 이진 부호화의 장점
- 필드 이름을 생략할 수 있기 때문에 크기가 훨씬 작을 수 있다.
- 복호화를 할 때 스키마가 필요하기 때문에 스키마가 최신 상태인지를 확신할 수 있다.
- 스키마 변경이 적용되기 전에 상위 호환성과 하위 호환성을 확인할 수 있다.
- 컴파일 시점에 타입 체크를 할 수 있다. (정적 타입 프로그래밍 언어 사용의 경우)
마이그레이션
- 데이터를 새로운 스키마로 다시 기록하는 작업
- 대용량 데이터셋 대상으로는 값비싼 작업이기 때문에 대부분의 데이터베이스에서 가능하면 이런 상황을 피함
- 대부분의 관계형 데이터베이스는 기존 데이터를 다시 기록하지 않고 null을 기본값으로 갖는 새로운 칼럼을 추가하는 간단한 스키마 변경을 허용
메시지 브로커 (메시지 큐)
- 메시지를 직접 네트워크 연결로 전송하지 않고 임시로 메시지를 저장
- 수신자가 사용 불가능하거나 과부하 상태라면 버퍼처럼 동작할 수 있음 -> 시스템 안정성 향상
- 죽었던 프로세스에 메시지를 다시 전달할 수 있기 때문에 메시지 유실을 방지
- 하나의 메시지를 여러 수신자로 전송할 수 있음
- 논리적으로 송신자를 수신자로 분리
- 메시지에 대한 응답을 기대하지 않는 비동기 통신 (메시지를 보낸 다음 잊는다)
- RabbitMQ, Apache Kafka 등
큐와 버퍼의 차이
- 버퍼 : 그릇같은 것
- 큐 : 통로
버퍼와 큐, 메시지 브로커의 차이가 나에겐 헷갈리는 점이었는데 그 부분을 구분할 수 있게 되어 좋았던 장이다.
그거 말고는 앞부분의 부호화 복호화 부분이 난해했다... 2회독 해도 좀 난해하다...
'인프라,데이터' 카테고리의 다른 글
AWS Elasticache service update를 하면 일어나는 일 (0) | 2023.04.21 |
---|---|
카프카 SASL_SSL 방식 + jks truststore로 로그스태시 연결하기 (0) | 2022.08.04 |
데이터 중심 애플리케이션 설계 3장 정리 (0) | 2022.05.22 |
데이터 중심 애플리케이션 설계 2장 정리 (0) | 2022.05.15 |
데이터 중심 애플리케이션 설계 1장 정리 (0) | 2022.05.08 |