RDBMS는 행과 열을 가지는 표 형식 데이터를 저장하는 형태의 데이터베이스를 가리키며 SQL이라는 언어를 써서 조작합니다. MySQL, PostgreSQL, 오라클, SQL server, MSSQL 등이 있습니다.
MySQL은 대부분의 운영체제와 호횐되며 현재 가장 많이 사용하는 DB입니다. C, C++로 만들어 졌으며 인덱스 압축기술, B-트리 기반의 인덱스, 스레드 기반의 메모리 할당 시스템, 빠른 조인 최대 64개 인덱스를 제공합니다.
MySQL 다음으로 개발자들이 선호하는 DB 기술입니다.
NoSQL이라는 슬로건에서 생겨난 DB입니다. SQL을 사용하지 않는 DB를 말하며, 대표적으로 MongoDB와 redis가 있습니다.
MongoDB는 JSON을 통해 데이터에 접근할 수 있고, Binary JSON 형태로 데이터가 저장되며 와이어드 타이거 엔진이 기본 스토리지 엔진으로 장착된 키-값 데이터 모델에서 확장된 도큐먼트 기반의 DB입니다.
redis는 인메모리 DB이자 키-값 데이터 모델 기반의 DB입니다.
인덱스는 데이터를 빠르게 찾을 수 있는 하나의 장치입니다.
인덱스는 보통 B-트리라는 자료구조로 되어있습니다. 이는 루트 노드, 리프 노드, 그리고 루트 노드와 리프 노드 사이에 있는 브랜치 노드로 구성됩니다.
인덱스가 효율적인 이유는 효육적인 단계를 거쳐 모든 요소에 접근할 수 있는 균형 잡힌 트리 구조와 트리 깊이의 대수 확장성 때문입니다.
인덱스를 만드는 방법은 DB마다 다릅니다.
클러스터형 인덱스와 세컨더리 인덱스가 있습니다.
도큐먼트를 만들면 자동으로 ObjectID가 형성되며, 해당 키가 기본키로 설정됩니다. 그리고 세컨더리키도 부가적으로 설정해서 기본키와 세컨더리키를 같이 쓰는 복합 인덱스를 설정할 수 있습니다.
인덱스 최적화 기법은 DB마다 다르지만 기본적인 골조는 같습니다.
인덱스 리스트 , 컬렉션 순으로 탐색하기 때문에 관련 읽기 비용이 들게 됩니다.
서비스에서 사용하는 객체의 깊이, 테이블의 양 등이 다르기 때문에 테스팅을 해야합니다.
EXPLAIN
SELECT * FROM t1 JOIN t2 ON t1.c1 = t2.c1
여러 필드를 기반으로 조회를 할 때 복합 인덱스를 생성하는데, 이 인덱스를 생성할 때는 순서에 맞게 생성해야 합니다. (같음 -> 정렬 -> 다중 값 -> 카디널리티)
참고
https://velog.io/@tastestar/Mysql-%EC%8A%A4%ED%86%A0%EB%A6%AC%EC%A7%80-%EC%97%94%EC%A7%84
.
https://velog.io/@ragnarok_code/PostgreSQL%EC%9D%B4%EB%9E%80
.
https://www.mongodb.com/
.
https://rastalion.me/redis-summary/
.
https://rebro.kr/169