SQL
Structured Query Language
구조화된 쿼리언어로 SQL을 사용하면 관계형 데이터베이스 관리 시스템(RDMS)에서 데이터를 저장, 수정, 삭제 및 검색할 수 있습니다.
- 데이터는 정해진 데이터 스키마에 따라 테이블에 저장된다.
- 데이터는 관계를 통해 여러 테이블에 분산된다.
데이터는 테이블에 레코드로 저장되는데,
각 테이블마다 명확하게 정의된 구조가 있다. 해당 구조는 필드의 이름과 데이터 유형으로 정의된다.
따라서 스키마를 준수하지 않은 레코드는 테이블에 추가할 수 없다.
즉, 스키마를 수정하지 않는 이상은 정해진 구조에 맞는 레코드만 추가가 가능한 것이 관계형 데이터베이스의 특징 중 하나다.
덕분에,
+
- 하나의 테이블에서 중복 없이 하나의 데이터만을 관리하기 때문에 다른 테이블에서 부정확한 데이터를 다룰 위험이 없어지는 장점이 있습니다.
하지만,
-
- 데이터 스키마를 사전에 계획해야 되기 때문에 유연하지 못합니다.
- 관계를 맺고 있어서 조인문이 많은 복잡한 쿼리가 만들어질 수 있습니다.
- 대체로 수직적 확장만 가능합니다.
NoSQL
스키마도, 관계도 없는
비 관계형 데이터베이스로 SQL과 반대되는 접근방식을 따르는 SQL의 한계점으로 인해 탄생한 데이터베이스입니다.
다른 구조의 데이터를 같은 컬렉션에 추가가 가능합니다.
NoSQL에서는 SQL과 달리 레코드를 문서(documents)라고 부르는데,
SQL에서 테이블을 나누는것과 달리 관련 데이터를 컬렉션 -> Orders(특정 열에 대한 값의 순서:값이 정렬되어 있는 방식으로 값을 저장하고 검색하는 데 사용)에 한꺼번에 포함해서 저장하게 됩니다.
여러 테이블에 조인할 필요없이 이미 필요한 모든 것을 갖춘 문서를 작성하는 것이 NoSQL입니다.
덕분에,
+
- 언제든지 저장된 데이터를 조정하고 새로운 필드추가가 가능해 유연합니다.
- 데이터를 읽어오는 속도가 향상됩니다.
- 수평 확장이 가능해서 애플리케이션이 발생시키는 모든 읽기/쓰기 요청처리가 가능합니다.
하지만,
-
- 유연성으로 인해 데이터 구조 결정을 미루게 될 수도 있습니다.
- 데이터 중복을 계속 업데이트 해야 합니다.
- 데이터가 여러 컬렉션에 중복되어 있기 때문에 수정 시 모든 컬렉션에서 수행해야 합니다.
SQL VS NoSQL
SQL 데이터베이스는 수직 확장이 가능합니다. 단일 서버에서 하드웨어 용량 (CPU, RAM, SSD 등)을 늘려 확장 할 수 있습니다. | NoSQL 데이터베이스는 수평 확장이 가능합니다. 대규모로드를 관리하고 힙을 줄이기 위해 인프라에 더 많은 서버를 추가하여 확장 할 수 있습니다. |
SQL 데이터베이스는 주로 관계형 데이터베이스 (RDBMS)입니다. | NoSQL 데이터베이스는 주로 비 관계형 또는 분산 데이터베이스입니다. |
오래된 기술. | 비교적 젊은 기술. |
SQL 데이터베이스는 행 및 열 형식의 테이블 기반이며 표준 스키마 정의를 엄격하게 준수해야합니다. 다중 행 트랜잭션이 필요한 응용 프로그램에 더 나은 옵션입니다. |
NoSQL 데이터베이스는 문서, 키-값 쌍, 그래프 또는 열을 기반으로 할 수 있으며 표준 스키마 정의를 고수 할 필요가 없습니다. |
구조화 된 데이터를 위해 잘 설계된 사전 정의 된 스키마가 있습니다. | 구조화되지 않은 데이터에 대한 동적 스키마가 있습니다. 데이터는 미리 정의 된 구조없이 유연하게 저장할 수 있습니다. |
SQL 데이터베이스는 정규화 된 스키마를 선호합니다. | NoSQL 데이터베이스는 비정규 화 된 스키마를 선호합니다. |
확장 비용이 많이 듭니다. | 관계형 데이터베이스에 비해 확장 비용이 저렴합니다. |
SQL에는 쿼리 처리를위한 표준 인터페이스가 있으므로 복잡한 쿼리에 적합합니다. SQL 쿼리 구문이 수정되었습니다. |
NoSQL에는 쿼리 처리를위한 표준 인터페이스가 없기 때문에 복잡한 쿼리에는 적합하지 않습니다. NoSQL의 쿼리는 SQL 쿼리만큼 강력하지 않습니다. 이를 UnQL이라고하며 구조화되지 않은 쿼리 언어를 사용하는 구문은 구문마다 다릅니다. |
SQL 데이터베이스는 계층 적 데이터 저장소에 적합하지 않습니다. | NoSQL 데이터베이스는 데이터 저장을위한 키-값 쌍 방법을 따르므로 계층 적 데이터 저장에 가장 적합합니다. |
상업적 관점에서 SQL 데이터베이스는 일반적으로 오픈 소스 또는 폐쇄 소스로 분류됩니다. | 키-값 저장소, 문서 저장소, 그래프 저장소, 열 저장소 및 XML 저장소로 데이터를 저장하는 방식에 따라 분류됩니다. |
SQL 데이터베이스는 ACID 속성 (원 자성, 일관성, 격리 및 내구성)을 올바르게 따릅니다. | NoSQL 데이터베이스는 Brewers CAP 정리 (일관성, 가용성 및 파티션 허용 오차)를 올바르게 따릅니다. |
SQL 데이터베이스에 새 데이터를 추가하려면 데이터 백필, 스키마 변경과 같은 일부 변경이 필요합니다. | 새 데이터는 이전 단계가 필요하지 않으므로 NoSQL 데이터베이스에 쉽게 삽입 할 수 있습니다. |
모든 SQL 데이터베이스에 대해 우수한 공급 업체 지원 및 커뮤니티 지원이 제공됩니다. | NoSQL 데이터베이스에는 제한된 커뮤니티 지원 만 사용할 수 있습니다. |
높은 트랜잭션 기반 애플리케이션에 가장 적합합니다. | 무거운 트랜잭션 목적으로 NoSQL을 사용할 수 있습니다. 그러나 이것은 이것에 가장 적합하지 않습니다. |
계층 적 데이터 저장에는 적합하지 않습니다. | 계층 적 데이터 저장 및 대용량 데이터 세트 (예 : 빅 데이터) 저장에 적합합니다. |
SQL 데이터베이스의 예 : MySQL, Oracle, MS-SQL, SQLite. | NoSQL 데이터베이스의 예 : MongoDB, Apache CouchDB, Redis, HBase. |
Reference Path
'CS' 카테고리의 다른 글
프로세스와 스레드 + 멀티 스레드 (0) | 2023.01.12 |
---|---|
SQL Injection (0) | 2023.01.09 |
교착상태 (Deadlock) (0) | 2023.01.09 |
트랜잭션 (0) | 2022.12.27 |
정규화 (0) | 2022.12.27 |