[공부 노트] #12

2 minute read

NoSQL

SQL문을 사용하지 않는다(No SQL)기보다는 기존의 RDBMS형태 이외에도 다양한 데이터 모델을 제공한다(Not Only SQL)는 의미로써 주로 사용된다.(즉, sql을 쓸수도 있다는 얘기)

  • 비정형화된 데이터에 적합하다 : SQL은 정형화된 데이터(2차원 테이블)를 저장하는데 중점적인데 반해, NoSQL은 정형화되지 않은 다양한 데이터 형식을 사용한다.
  • 스키마가 유동적이다 : 데이터 구조를 미리 정의할 필요가 없으며, 시간이 지나서 얼마든지 바꿀 수 있다.
  • 분산형 컴퓨팅에 유리하다

NoSQL의 어떤 특징 때문에 분산형 컴퓨팅에 유리한 것 일까?
NoSQL은 일관성을 다소 포기하는 대신 확장성을 확보하여 분산형 컴퓨팅에서 이점을 가져갔다. 물론 RDBMS에서도 샤딩을 통해 테이블을 수평 분할하여 서로 다른 클러스터에 분산 저장할 수 있지만, 여러 샤드를 이용한 쿼리, 트랜잭션, 일관성 제어에 문제가 발생한다. 반면 NoSQL은 ‘Eventual Consistency’라는 특성을 가지는데, 여기서 분산 컴퓨팅에서의 CAP 개념을 먼저 소게하겠다.

  • Consistency
  • Availability
  • Partition tolerance

스키마

데이터베이스의 구조와 제약조건에 관한 명세

  • 개념 스키마 : 데이터베이스의 전체적인 논리구조. 개체간의 관계와 제약조건, DB접근 권한 및 무결성 규칙 (E-R 다이어그램)
  • 내부 스키마 : 데이터베이스의 물리적 저장구조. 실제로 저장될 레코드의 형식, 인덱스의 유무 등 실제 저장 방식
  • 외부 스키마 : 데이터베이스의 논리적인 부분으로, 서브스키마 라고도함. 필요로하는 데이터베이스의 논리적 구조를 정의한 것

인덱스

추가적인 공간과 쓰기 작업을활용하여 데이터베이스 테이블의 검색 성능을 향상시키는 자료구조를 말한다. 검색 성능을 위해서는 인덱스를 항상 정렬된 상태로 유지해야하는데, 이 때문에 INSERT, DELETE, UPDATE 작업을 할 때 추가적인 동작이 필요하여 오버헤드가 발생한다.

Table Full Scan과 Index Range Scan

Table Full Scan이란 해당 테이블의 전체 블록을 읽어서 데이터를 찾는 방식이고, Index Range Scan은 인덱스 루트 블록에서 리프 블록까지 수직적으로 탐색한 이후 리프블록을 필요한 범위까지 스캔하는 방식이다. 당연히 Index Range Scan가 더 효율적인 방법처럼 보이지만, 찾는 데이터의 크기가 커지다보면 Table Full Scan 방법이 더 유리하게 되는 순간이 온다.
Index Range Scan은 singleblock I/O 방식을 사용한다. 리프 블록에 도달하여 rowid를 얻고, table에 접근(Random access)하기 때문에 100개의 블록을 확인한다고 하면 100번의 I/O가 발생한다. 반면 Table Full Scan은 multiblock I/O 방식으로 연속된 블록을 한꺼번에 읽어들일 수 있으므로 100개의 블록을 확인할 때 10번의 I/O 정도만 필요할 수 있다.

B-Tree

이진트리를 확장한 구조로, 하나의 노드가 가질 수 있는 자식 노드의 수가 2보다 크고, 하나의 노드에 여러 데이터가 배치되는 트리 구조이다.

  1. 노드의 자료수가 K 이라면, 자식의 수는 K + 1 개이어야 한다.
  2. 자료는 정렬된 상태로 저장된다.
  3. 한 노드 N 의 왼쪽 서브트리는 N의 키 보다 작은 값으로 되어 있고, 오른쪽 서브트리는 큰 값으로 되어 있다.
  4. ROOT 노드는 적어도 2개 이상의 자식을 가져야한다. ( 트리가 ROOT 노드로만 구성되어있을 경우 예외, 위의 특징 1번 때문에)
  5. ROOT 노드를 제외한 모든 노드는 적어도 floor(M/2) 개의 키를 가지고 있어야 한다. (B 트리의 장점 - 저장 장치의 효율성, 즉 각 노드마다 반 이상 키 값이 저장되어 있다.)
  6. 리프노드로 가는 경로의 길이는 모두 같다 = 리프노드는 모두 같은 레벨에 있다.
  7. 입력 자료는 중복될 수 없다.

참고문헌

https://shoark7.github.io/programming/knowledge/what-is-NoSQL
https://embian.wordpress.com/2013/06/27/nosql-2/
https://cloud.google.com/datastore/docs/articles/balancing-strong-and-eventual-consistency-with-google-cloud-datastore
https://mangkyu.tistory.com/96

Leave a comment