DataBase

SQL과 NoSQL의 종류와 장단점

SQL의 종류

 

SQL 데이터베이스의 종류 :

  1. MySQL : 오픈 소스 기반으로 대부분의 웹 애플리케이션에서 사용됩니다.
  2. Oracle : 대규모 기업에서 사용되며, 보안, 성능, 안정성 등에 대한 높은 요구 사항을 갖추고 있습니다.
  3. PostgreSQL : 고성능, 안정성, 확장성이 뛰어나며, 무료이며 오픈소스 입니다.
  4. Microsoft SQL Server: 윈도우 플랫폼에서 작동하는 관계형 데이터베이스입니다.
  5. SQLite : 파일 기반 데이터베이스이며, 모바일 장치에서 많이 사용됩니다.

NoSQL 데이터베이스 종류 :

  1. MongoDB : 문서 기반 NoSQL 데이터베이스이며, 스케일 아웃과 빠른 읽기 쓰기 속도를 지원합니다.
  2. Cassandra: 분산형 NoSQL 데이터베이스로, 대용량 데이터 저장에 적합합니다.
  3. Redis : 메모리 기반 데이터베이스로, 속도가 빠르며, 데이터 캐싱, 메시지 브로커 등에 사용됩니다.
  4. Couchbase : 멀티모델 NoSQL 데이터베이스로, 문서, 키-값, 그래프 등 다양한 데이터 모델을 지원합니다.
  5. Amazon DynamoDB : AWS에서 제공하는 관리형 NoSQL 데이터베이스로, 스케일링, 고가용성, 보안 등을 제공합니다.

SQL 쿼리 예제 

SELECT * FROM customers WHERE >= 30; 
(고객 중 나이가 30세 이상인 모든 데이터를 선택)

INSERT INTO orders (customer_id, product_name, price) VALUES (1, 'Product A', 100);
(주문 테이블에 새로운 주문 정보를 추가)

UPDATE employees SET salary = 50000 WHERE department = 'IT';
(IT 부서의 모든 직원의 연봉을 50,000으로 업데이트)

DELETE FROM products WHERE stock_quantity < 10;
(재고 수량이 10 보다 적은 모든 제품 정보를 삭제)

 

 

NoSQL 쿼리 예제 (JSON or BSON)

db.customers.find({age: {$gt:30}});
(고객 중 나이가 30세 이상인 모든 데이터를 선택)

db.orders.insertOne({customer_id: 1, product_name: 'Product A', price: 100});
(주문 컬렉션에 새로운 주문 정보를 추가)

db.employees.updateMany({department: 'IT'}, {$set: {salary: 50000}});
(IT 부서의 모든 직원의 연봉을 50,000으로 업데이트)

db.products.deleteManay({stock_quantity: {$lt: 10}});
(재고 수량이 10보다 적은 모든 제품 정보를 삭제)

 


SQL의 장단점

  • 장점
    • 데이터 무결성 보장 : 관계형 데이터베이스에서 데이터의 무결성과 일관성을 보장할 수 있습니다.
    • ACID 트랜잭션 지원 : Atomicity, Consistency, Isolation, Durability의 약자로, 데이터 베이스의 트랜잭션 처리에서 주요한 개념으로, 안정적인 데이터 처리를 보장합니다.
    • 유연한 질의 언어 : SQL은 데이터베이스에 대한 강력한 질의 언어를 제공하므로 데이터를 쉽게 검색하고 처리할 수 있습니다.
  • 단점
    • 수직적 확장의 한계 : 대규모 데이터를 처리하거나 복잡한 쿼리를 실행할 때는 성능이 저하될 수 있습니다.
    • 스키마의 고정성 : 스키마는 데이터베이스의 구조를 정의하는 개념으로, 관계형 데이터베이스에서 스키마를 변경하려면 많은 노력이 필요합니다.
    • 복잡한 구조 : 다양한 테이블 간의 관계에 있어 복잡한 데이터 구조를 갖추기에는 비용이 크고, 구조가 복잡해져서 개발 및 유지보수가 어려울 수 있습니다.

NoSQL의 장단점

  • 장점
    • 수평적 확장의 용이성: 대규모 데이터를 처리할 때 수평적 확장이 가능하여 성능을 향상시킬 수 있습니다.
    • 유연한 스키마 : 스키마를 미리 정의할 필요가 없고, 필요한 시점에서 데이터를 추가하거나 수정할 수 있습니다.
    • 다양한 데이터 모델 : 다양한 데이터 모델을 제공하여 비정형 데이터를 처리할 때 용이합니다.
  • 단점
    • 데이터 무결성 보장의 어려움 : NoSQL은 데이터의 일관성을 보장하지 않을 수 있으므로, 데이터 무결성 보장이 어려울 수 있습니다.
    • 질의 언어의 한계 : SQL에 비해 다양한 질의 언어를 제공하지 않습니다.
    • 부적합한 사용 사례 : 일부 NoSQL은 특정 사용 사례에서 적합하지 않을 수 있습니다.
  • 특정사례 예시
    • 복잡한 트랜잭션 : NoSQL 데이터베이스는 일반적으로 ACID (원자성, 일관성, 격리성, 지속성) 특성을 제공하지 않습니다. 따라서 데이터 간의 트랜잭션을 관리하는 경우에는 관계형 데이터베이스가 더 적합합니다. 예를 들어 은행 업무와 같이 금융 거래의 경우 데이터 일관성과 원자성이 보장되어야 합니다.
    • 복잡한 집계 : NoSQL 데이터베이스는 대량의 데이터를 빠르게 쿼리할 수 있도록 설계되었습니다. 하지만 데이터 집계와 같이 데이터를 복잡하게 처리해야 하는 경우, SQL 데이터 베이스가 더 적합합니다.
    • 데이터 정규화 : 데이터베이스 설계에서 데이터 정규화는 데이터를 일관성 있게 유지하는 것을 목적으로 합니다. NoSQL 데이터베이스는 데이터를 반정규화하여 빠른 읽기 속도를 제공하기 때문에, 데이터 정규화가 필요한 경우에는 SQL 데이터베이스가 더 적합합니다.
    • 복잡한 쿼리 : NoSQL 데이터베이스는 쿼리 작성이 SQL 데이터베이스에 비해 제한적입니다. 따라서 복잡한 쿼리를 작성해야 하는 경우에는 SQL 데이터 베이스가 더 적합합니다.
  • NoSQL을 고려하는 경우
    • 아주 낮은 응답 지연시간(latency)이 요구됨
    • 다루는 데이터가 비정형(unstructured)이라 관계형 데이터가 아님
    • 데이터(JSON, YAML, XML 등)를 직렬화하거나(serialize) 역직렬화(deserialize) 할 수 있기만 하면 됨
    • 아주 많은 양의 데이터를 저장할 필요가 있음