[DB] 데이터 베이스 비교

[DB] 데이터 베이스 비교

** 그동안 사용했던 DB 들을 정리한 내용입니다.

MS-SQL

  • 마이크로 소프트에서 개발한 관계형 데이터베이스 관리 시스템
  • 기업 환경에서 많이 사용되는 데이터베이스 시스템으로, 데이터의 저장, 검색, 관리 및 분석을 위한 기능을 제공
  • 주로 windows 환경에서 사용
  • 하나의 서버에 여러 개의 데이터베이스를 생성하고, DB 서버마다 독립적인 스토리지를 할당
  • 중첩 루프 조인, 해시 조인, 소트 머지 조인 방식 제공

장점

  • 트랜잭션 관리, 백업 및 복구 등 고급 기능과 도구 제공
  • 데이터 암호화, 접근 제어, 감사 로깅 등 RDBMS에서 가장 강력한 보안 성능 제공
  •  데이터가 변경되거나 손상되는 위험이 적음

단점

  • 라이선스 비용 발생
  • 운영체제 종속적
  • 메모리와 디스크 공간을 상당히 많이 사용

=> Microsoft 제품에 크게 의존하는 엔터프라이즈급 기업인 경우 적합

=> 기업 인턴할 때, 사용한 경험이 있음

 

** Stored Procedure

  • 쿼리 문들의 집합으로, 어떤 동작을 여러 쿼리를 거쳐서 일괄적으로 처리할 때 사용
  • SQL Server에서는 저장 프로시저를 처음 실행하면 최적화, 컴파일 단계를 거쳐 그 결과가 캐시에 저장되기 때문에 실행속도가 빠름
  • 수정 사항이 발생하면 SP파일만 수정하면 되기 때문에 유지 보수 측면에서 좋음
  • 저장 프로시저에만 접근 권한을 부여할 수 있기 때문에 보안 강화
  • 저장프로시저의 이름, 매개변수로만 호출할 수 있기 때문에 부하 감소

✅ 이슈

[원인]

쿼리가 갑자기 느려지는 경우에는 원인 중 하나가 Lock이 걸려서 그런 경우가 많음

SQL Server는 잠금 기법을 사용하여 트랜잭션 무결성 및 DB 일관성을 유지하기 때문

  • 대용량 데이터 처리로 인해 실행시간이 길어져 Lock을 오래 잡고 있는 경우
  • 트랜잭션을 건 후 Commit 또는 Rollback을 하지 않은 경우
  • 리소스 경합으로 인한 교착상태 발생

[해결방안]

Lock 걸린 쿼리를 조회한 후, 쿼리 kill

 

Oracle DB

  • 오라클 사의 관계형 데이터베이스 관리 시스템
  • 유닉스/리눅스 환경에서 가장 널리 사용되는 RDBMS, 대표적인 기업용 데이터베이스
  • 로컬 환경과 원격 환경에서 사용할 수 있도록 Database Server(데이터베이스 서버 역햘)와 Client Application Program(데이터 해석과 표시 담당)으로 분리
  • 하나의 서버에 하나의 DB가 생성되고, DB 서버가 통합된 하나의 스토리지를 공유
  • 중첩 루프 조인, 해시 조인, 소트 머지 조인 방식 제공

장점

  • 고성능 데이터베이스를 지원하여 대량의 정보 관리 시 가장 좋은 성능 보임
  • 다수의 사용자가 동시 접근 가능
  • Oracle은 데이터를 읽을 때, Undo를 사용하고 락을 사용하지 않아 락 경합이 적게 발생

단점

  • 메모리 사용률이 커서 최소 수백 MB를 요구
  • 라이선스 비용이 비쌈

=> 대량의 데이터를 관리해야 하는 대규모 조직인 경우 적합

=> 시퀀스와 가상 스레드를 지원하여 대량의 데이터 처리를 용이하게 하고자 사용

 

✅ 이슈

[원인]
Oracle Lock 이슈로 인한 타임아웃 발생
테이블에 락이 걸린 상태에서 다른 사용자가 락을 걸려고 하면, 데드락이 발생

 

[해결방안]

  •  
  • 락걸린 테이블 확인
SELECT  DO.OBJECT_NAME, DO.OWNER, DO.OBJECT_TYPE, DO.OWNER,
        VO.XIDUSN, VO.SESSION_ID, VO.LOCKED_MODE
FROM    V$LOCKED_OBJECT VO, DBA_OBJECTS DO
WHERE   VO.OBJECT_ID = DO.OBJECT_ID;
  • 해당 테이블에 락이 걸렸는지 확인
SELECT A.SID, A.SERIAL#, B.TYPE, C.OBJECT_NAME
FROM V$SESSION A, V$LOCK B, DBA_OBJECTS C
WHERE A.SID = B.SID AND B.ID1 = C.OBJECT_ID
AND B.TYPE='TM' AND C.OBJECT_NAME IN ('TB_CO_GENO');

 

  • 락 발생 사용자와 SQL, OBJECT 조회
SELECT DISTINCT X.SESSION_ID, A.SERIAL#, D.OBJECT_NAME, A.MACHINE, A.TERMINAL,
                A.PROGRAM, B.ADDRESS, B.PIECE, B.SQL_TEXT
FROM V$LOCKED_OBJECT X, V$SESSION A, V$SQLTEXT B, DBA_OBJECTS D
WHERE X.SESSION_ID = A.SID AND
X.OBJECT_ID = D.OBJECT_ID AND A.SQL_ADDRESS = B.ADDRESS
ORDER BY B.ADDRESS, B.PIECE;
  • 락 세션 kill
ALTER SYSTEM KILL SESSION 'SESSION_ID, SERIAL#

 

MySQL

  • 오픈 소스 기반의 RDBMS
  • 웹 애플리케이션과 소규모 프로젝트에 주로 사용

장점

  • 경량이면서도 높은 성능을 제공하며, 확장성이 우수
  • 오픈 소스 라이센스기 때문에 무료 사용 가능
  • 다양한 운영체제에서 사용 가능
  • 사용하기 쉽고 개발자 친화적인 인터페이스를 가지고 있으며, 데이터 저장, 조작, 관리 등의 작업을 지원
  • 용량이 작고 백업이 편리

단점

  • 복잡한 쿼리에는 성능 저하 발생
  • 트랜잭션을 처리하는 방식이 비효율적이고 안정성 문제가 발생하기 때문에, 이러한 애플리케이션에는 적합하지 않음

=> 안정적인 가동 시간으로 애플리케이션을 위한 간소하고 사용하기 쉬운 데이터베이스를 찾는 중소기업 및 개인 사용자에 적합

=> 오픈 소스 기반, 개발 프로젝트 용도로 적합하여 사용하게 됨

MariaDB

  • 오픈 소스 데이터베이스 기술
  • MySQL이 Oracle Corporation에 인수된 후 라이선스 및 배포 문제로 인해 MySQL의 원래 개발 팀이 개발
  • MySQL 을 MariaDB로 전환 가능

차이점

  • Json 데이터 검색 및 저장 지원
    • MariaDB: Json 보고서를 문자열로 저장, 10.2 이후 버전에서만 JSON 데이터 유형 지원
    • MySQL : Json 보고서를 바이너리 객체로 지원
  • 저장데이터와 전송 중인 데이터 암호화
    • MariaDB:  InnoDB 및 AES를 사용하여 저장 데이터를 암호화
    • MySQL: 바이너리 로그 암호화와 임시 테이블 암호화 지원
  • 스레드 풀링
    • MariaDB: Community Edition의 일부인 스레드 풀 플러그인에 스레드 풀링이 포함, 한 번에 20만 개 이상의 연결을 관리할 수 있는 기능을 제공
    • MySQL: Enterprise 버전에 스레드 풀 플러그인이 존재, 그러나 MariaDB만큼 많은 연결을 한 번 처리할 수는 없음

=> 빈번한 쿼리 지원, 빠른 응답 시간 및 소량의 데이터 처리 기능이 필요한 엔터프라이즈 트랜잭션 애플리케이션에 적합

=> 오픈 소스 기반, 개발 프로젝트 용도로 적합하여 사용하게 됨

PostgreSQL

  • 뛰어난 안정성, 유연성, 개방형 기술 표준 지원으로 알려진 오픈 소스 데이터베이스
  • 객체 관계형 데이터베이스
  • 특정 시점 복구 가능
  • 트리, 표현식 인덱스, 부분 인덱스 및 해시 인덱스가 포함
  • 온라인 트랜잭션 처리 프로토콜 관리, GIS(지리 정보 시스템), 데이터베이스 통합에 용이

장점

  • 대규모 데이터베이스 시스템에서 높은 성능 지원
  • 지형 공간 지원 및 무제한 동시성과 같이 다양한 성능 최적화 지원
  • MVCC를 사용하여 동시성을 효율적으로 관리
  • 최다 SQL 기능을 지원하며, 모든 구성에서 ACID와 완벽하게 호환
  • 구체화된 뷰, INSTEAD OF 트리거, 여러 언어의 저장 프로시저와 같은 최고급 데이터베이스 기능을 지원
  • 높은 빈도의 쓰기 작업 성능을 개선
  • 풍부한 데이터 유형 및 프로그래밍 언어 지원

단점

  • update 쿼리에 약함
  • 모든 새로운 클라이언트 연결에 대해 새로운 프로세스 형식으로 일으키기 때문에, 많은 연결이 있는 경우 메모리 성능이 떨어짐

=> 데이터 무결성, 다양한 도구들과의 호환성, 복잡한 작업연산을 수행해야 하는 경우 적합

=> SonarQube 등 다른 도구들과의 호환성으로 인해 선정해서 구현

 

MongoDB

  • 오픈 소스 비관계형 데이터베이스 관리 시스템 
  • Document 지향 데이터베이스
  • 다양한 유형의 데이터를 저장할 뿐만 아니라 여러 시스템 전반에 분산 처리 가능
  • BSON 데이터 형식
    • 이진 직렬화 방식으로, 분산 시스템에서 데이터를 저장하고 전송하기 위해 생성
    • 텍스트 형식보다 적은 용량을 사용하며 처리 속도가 빠름
    • 길이 정보가 포함되어 있어 데이터 트래버스를 용이

장점

  • 유연한 스키마 구조
  • read 기능에 대한 확장을 위한 레플리카 세트와 write 확장을 위한 샤딩을 제공하여 수평적 확장에 뛰어남
    • 많은 수의 레코드를 삽입하거나 업데이트하는 데 뛰어남

단점

  • 트랜잭션 지원의 한계
    • BASE 기반의 트랜잭션 처리로, ACID보다 느슨한 일관성 모델을 사용하여 높은 가용성과 분산 시스템에 적합한 성능을 목표
    • 기본적으로 사용 가능: 항상 응답 제공, 높은 가용성
    • 소프트 상태: 일관성이 항상 보장되지 않음
    • 최종 일관성: 일정 시간 후에야 최종적으로 일관된 상태 달성
  • 복잡한 트랜잭션, 엄격한 일관성 또는 전통적인 조인 연산이 필요한 애플리케이션에는 적합하지 않음

=> 소셜 네트워크, 미디어 또는 사물 인터넷(IoT)과 같은 사용 사례에서 비정형 데이터로 작업할 때 즉, 끊임없이 변화하고 확장되는 데이터를 처리하는데 적합

=> 실시간 채팅에서 대량의 데이터 삽입과 read에 적합하여 선정해서 구현함

 

InfluxDB

  • InfluxData에서 개발 중인 오픈 소스 시계열 DBMS
  • GO 언어로 작성되어 있으며, 다양한 언어로 된 client 라이브러리 제공
  • 스키마를 따로 정의하지 않지만, sql과 비슷한 쿼리 언어 제공

장점

  • 빠른 쓰기 및 읽기가 가능
  • Web 환경에서 편리하게 사용 가능
  • 데이터 보관 주기 설정 가능
  • 플러그인 아키텍쳐 설계로 타사 제품과 통합이 용이

단점

  • update와 delete는 고려하지 않음
  • timestamp 오름차순 정렬이다보니, 랜덤 읽기에서는 성능이 떨어짐
  • 데이터 일관성을 보장하지 않음

=> IOT 프로젝트에서 일정 주기마다 제공되는 센서 데이터에 대한 쓰기 작업과 쿼리 부하를 처리하기 위해 도입

 

 

'BackEnd > DB' 카테고리의 다른 글

[DB] 조인의 원리  (0) 2024.05.27