메모리에 임시 저장 (In-Memory)
프로그래밍 언어에서 데이터를 다룰 때에는 프로그램이 실행될 때에만 존재하는 데이터가 있고 프로그램이 종료되면 데이터도 같이 없어집니다.
파일 입/출력 (I/O)
파일을 읽는 방식으로 작동하는 형태를 말합니다 그러나 한계가 존재합니다.
- 데이터가 필요할 때마다 전체 파일을 매번 읽어야 합니다. 파일의 크기가 커질수록 이 작업은 버겁고, 비효율적이어서 파일 입출력 방식의 큰 단점입니다.
- 파일이 손상되거나 여러 개의 파일들을 동시에 다뤄야 하거나 하는 등 복잡하고 데이터량이 많아질수록 데이터를 불러들이는 작업이 점점 힘들어 집니다.
RDBMS vs NoSQL
- 데이터베이스는 크게 관계형 데이터베이스와 비관계형 데이터베이스로 구분합니다. 관계형 데이터베이스는 SQL을 기반으로 하고, 비관계형 데이터베이스는 NoSQL로 데이터를 다룹니다.
- 관계형 데이터베이스에서는 테이블의 구조와 데이터 타입 등을 사전에 정의하고, 테이블에 정의된 내용에 알맞은 형태의 데이터만 삽입할 수 있습니다. 관계형 데이터베이스는 행(row)과 열(column)로 구성된 테이블에 데이터를 저장합니다. 대표적인 관계형 데이터베이스는 MySQL, Oracle, SQlite, PostgreSQL, MariaDB 등이 있습니다.
- NoSQL은 SQL 앞에 붙은 'No'에서 알 수 있듯이, 주로 데이터가 고정되어 있지 않은 데이터베이스를 가리킵니다. NoSQL에서는 데이터를 읽어올 때 스키마에 따라 데이터를 읽어 옵니다. 이런 방식을 'schema-on-read'라고도 합니다. 대표적인 비관계형 데이터베이스는 MongoDB, Casandra 입니다.
NoSQL 구성
- Key-Value 타입 : 속성을 Key-value의 쌍으로 나타내는 데이터를 배열의 형태로 저장합니다
- 문서형 (Document) 데이터베이스 : 데이터를 테이블이 아닌 문서처럼 저장하는 데이터베이스를 의미합니다. 많은 문서형 데이터베이스에서 JSON과 유사한 형식의 데이터를 문서화하여 저장합니다.
- Wide-Column 데이터베이스 : 데이터베이스의 열(column)에 대한 데이터를 집중적으로 관리하는 데이터베이스입니다. 각 열에는 key-value 형식으로 데이터가 저장되고, 컬럼 패밀리(column families)라고 하는 열의 집합체 단위로 데이터를 처리할 수 있습니다.
- 그래프 (Graph) 데이터베이스 : 자료구조의 그래프와 비슷한 형식으로 데이터 간의 관계를 구성하는 데이터베이스입니다. 노드(nodes)에 속성별(entities)로 데이터를 저장합니다.
SQL 기반의 데이터베이스와 NoSQL 데이터베이스의 차이점
데이터 저장 (Storage)
- NoSQL은 key-value, document, wide-column, graph 등의 방식으로 데이터를 저장합니다.
- 관계형 데이터베이스는 SQL을 이용해서 데이터를 테이블에 저장합니다. 미리 작성된 스키마를 기반으로 정해진 형식에 맞게 데이터를 저장해야 합니다.
스키마(Schema)
- SQL을 사용하려면, 고정된 형식의 스키마가 필요합니다. 다시 말해, 처리하려는 데이터 속성별로 열(column)에 대한 정보를 미리 정해두어야 합니다. 스키마는 나중에 변경할 수 있지만, 이 경우 데이터베이스 전체를 수정하거나 오프라인(down-time)으로 전환할 필요가 있습니다.
- NoSQL은 관계형 데이터베이스보다 동적으로 스키마의 형태를 관리할 수 있습니다. 행을 추가할 때 즉시 새로운 열을 추가할 수 있고, 개별 속성에 대해서 모든 열에 대한 데이터를 반드시 입력하지 않아도 됩니다.
쿼리(Querying)
- 쿼리는 데이터베이스에 대해서 정보를 요청하는 질의문입니다. 관계형 데이터베이스는 테이블의 형식과 테이블 간의 관계에 맞춰 데이터를 요청해야 합니다. 그래서 정보를 요청할 때, SQL과 같이 구조화된 쿼리 언어를 사용합니다.
- 비관계형 데이터베이스의 쿼리는 데이터 그룹 자체를 조회하는 것에 초점을 두고 있습니다. 그래서 구조화되지 않은 쿼리 언어로도 데이터 요청이 가능합니다. UnQL(UnStructured Query Language)이라고 말하기도 합니다.
확장성(Scalability)
- 일반적으로 SQL 기반의 관계형 데이터베이스는 수직적으로 확장합니다. 높은 메모리, CPU를 사용하는 확장이라고도 합니다. 데이터베이스가 구축된 하드웨어의 성능을 많이 이용하기 때문에 비용이 많이 듭니다. 여러 서버에 걸쳐서 데이터베이스의 관계를 정의할 수 있지만, 매우 복잡하고 시간이 많이 소모됩니다.
- NoSQL로 구성된 데이터베이스는 수평적으로 확장합니다. 보다 값싼 서버 증설, 또는 클라우드 서비스 이용하는 확장이라고도 합니다. NoSQL 데이터베이스를 위한 서버를 추가적으로 구축하면, 많은 트래픽을 보다 편리하게 처리할 수 있습니다. 그리고 저렴한 범용 하드웨어나 클라우드 기반의 인스턴스에 NoSQL 데이터베이스를 호스팅할 수 있어서, 수직적 확장보다 상대적으로 비용이 저렴합니다.
SQL과 NoSQL 중에서 어떤 것을 사용해야 하나요?
NoSQL 기반의 비관계형 데이터베이스가 확장성이나 속도면에서 더 뛰어납니다. 그러나 고차원으로 구조화된 SQL 기반의 데이터베이스가 더 좋은 성능을 보여주는 서비스도 있습니다.
SQL 기반의 관계형 데이터베이스를 사용하는 케이스
1. 데이터의 구조가 거의 또는 전혀 없는 대용량의 데이터를 저장하는 경우 -> 데이터의 유형에 제한이 없고 필요에 따라 언제든지 데이터의 새 유형을 추가할 수 있습니다.
2. 클라우드 컴퓨팅 및 저장공간을 최대한 활용하는 경우 -> 저렴한 비용의 솔루션을 제공받을 수 있습니다.
3. 빠르게 서비스를 구축하는 과정에서 데이터 구조를 자주 업데이트 하는 경우 -> 스키마를 미리 준비할 필요가 없기 때문에 빠르게 개발하는 과정에 매우 유리합니다.
관계형 데이터베이스의 표준 언어 SQL
SQL (Structured Query Language) 데이터베이스에 쿼리를 보내 원하는 데이터를 가져오거나 삽입할 수 있습니다. 그리고 이름에서 유추할 수 있듯이, SQL은 (relation 이라고도 불리는) 데이터가 구조화된(structured) 테이블을 사용하는 데이터베이스에서 활용할 수 있습니다.
퀴리란?
쿼리는 '질의문' 이라는 뜻을 가지고 있습니다. 예를 들면 검색을 할 때 입력하는 검색어가 일종의 쿼리입니다.
'데이터베이스 기초' 카테고리의 다른 글
DevOps Day 18 (3.30) 데이터베이스_데이터 파이프라인 (0) | 2023.03.31 |
---|---|
DevOps Day 17 (3.29) 데이터베이스_수평확장된 데이터베이스와 중복처리 (0) | 2023.03.31 |
DevOps Day 17 (3.29) 데이터베이스_배치 작업에 따른 성능 저하 (0) | 2023.03.31 |
DevOps Day 17 (3.29) 데이터베이스_데이터 파티셔닝 + 캐시 (0) | 2023.03.31 |
DevOps Day 17 (3.29) 데이터베이스_문제 상황에 따른 해결책 (0) | 2023.03.31 |