ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [database] 데이터베이스 종류
    기타 등등 2025. 8. 31. 16:34

    데이터베이스 종류는 관계형과 noSQL 만 존재하는게 아니구나!?

    그동안 웹, 앱 개발을 진행하면서 사용해본 데이터베이스는 관계형과 noSQL 을 사용했었는데 최근에 회사 업무를 진행하며 처음으로 마주친 데이터베이스가 보였습니다.

    influxDB 라는건데 시계열 데이터베이스의 대표라고 하더라구요.

    너무 생소해서 이건 또 뭐에 사용하는건가 했는데 iot 센서 데이터나, 주식 시세, 서버 모니터링에 주로 사용하는 데이터베이스네요.

    엄청나게 많은 데이터를 시간순으로 저장시키는게 가능하다고합니다. 이런 데이터를 이용하는건 기존에 많이 사용한 관계형 데이터베이스보다 훨씬 좋은 성능을 나타낸다고 합니다.

    그래서 또 다른 데이터베이스는 뭐가 있나 찾아보니 그래프 데이터베이스라는것도 있네요. 이건 노드와 엣지로 관계 표현을 하고 cypher 라는 쿼리 언어를 사용한다고 합니다. 주로 SNS, 지식 그래프 등 뭔가 관계가 있는곳에 사용하는 그래프라고 합니다.

     

    그냥 관계형 데이터베이스를 사용해도 문제 없지 않나?

    RDBMS(MySQL, PostgreSQL 등) 로도 SNS 데이터나 IoT 데이터를 저장하고 읽는 건 충분히 가능합니다. 실제로도 많은 기업이 한동안은 RDB만으로 모든 걸 처리했어요.

    하지만 각 서비스별로 특화된 데이터베이스를 사용하는게 유리한지 아래 내용을 참고해보시면 이해가 될겁니다.

     

    1️⃣ SNS

     

    • RDB로 구현 가능:
      • User 테이블, Friend 관계 테이블로 저장 (예: user_id, friend_id)
      • "철수의 친구 → 친구의 친구" = JOIN 두 번 이상
    • 문제점:
      • 깊은 관계 탐색 (친구의 친구의 친구의 친구 …) → JOIN이 기하급수적으로 늘어나면서 성능 저하
      • 수백만 유저가 얽히면 쿼리 성능 급격히 떨어짐
    • 그래프 DB는?
      • 관계(Edge)를 1급 시민으로 저장 → JOIN 없이 탐색 가능
      • "철수의 친구의 친구 찾기" 같은 쿼리가 O(1)에 가까운 속도로 탐색됨
      • 추천 시스템, 네트워크 분석 등에 최적화

     그래프 탐색이 많을수록 그래프 DB가 훨씬 효율적입니다.

     

     

    2️⃣ IoT

     

     

    • RDB로 구현 가능:
      • device_data 테이블 (device_id, timestamp, value)
      • SELECT + GROUP BY + ORDER BY 로 시간별 분석 가능
    • 문제점:
      • IoT 센서는 초당 수천~수백만 건 데이터 발생
      • RDB는 INSERT 부하와 대량 시계열 집계(rolling average, downsampling)에 취약
      • 시간축 기반 인덱싱 최적화 부족
    • 시계열 DB는?
      • 쓰기(INSERT) 처리량 최적화 (배치 압축 저장)
      • 시간 기반 쿼리(WHERE time > now() - 1h)에 특화 인덱싱
      • 다운샘플링(1분 단위 평균, 1시간 단위 최대값) 자동 지원
      • 시계열 함수(윈도우 함수, moving average) 내장

     

    관계형 데이터베이스로도 서비스 구성은 가능하지만 최적화가 되어있지 않기 때문에 성능에 문제가 발생합니다. 때문에 특정한 서비스 조건에서는 최적화된 데이터베이스를 사용하는것이 훨씬 빠르고 효율적입니다.

     

    실제로 빅테크 기업중에 X(트위터)는 그래프DB(참고 블로그) 를 적용했고, 넷플릭스는 시계열DB(참고 블로그) 를 적용해서 사용중입니다.

     

    관련된 내용은 아래에 좀 더 체계적으로 정리해놓고 표로도 정리해놨으니 천천히 한 번 살펴보시는것도 좋을 것 같습니다.

     

    1️⃣ 관계형 데이터베이스(RDB, Relational DB)

    • 구조: 테이블, 행(Row), 열(Column)
    • 관계 표현: Foreign Key, JOIN
    • 특징: ACID 트랜잭션 지원, SQL 사용
    • 사용 예: 은행 계좌, 쇼핑몰 주문, ERP
    • 대표 DB: MySQL, PostgreSQL, Oracle, SQL Server

    2️⃣ NoSQL 데이터베이스

    • 구조: 테이블 대신 자유로운 형태로 저장
    • 특징: 스키마 유연, 수평 확장 용이, 일부는 ACID 대신 eventual consistency
    • 하위 유형:
      1. 문서형(Document): JSON/BSON 형태 저장
        • 예: MongoDB, Couchbase
      2. 키-값(Key-Value): 단순 조회에 최적화
        • 예: Redis, DynamoDB
      3. 컬럼형(Column-Family): 대용량 데이터 분석에 적합
        • 예: Cassandra, HBase
      4. 그래프(Graph): 노드-엣지 구조로 관계 탐색 최적화
        • 예: Neo4j, ArangoDB

    3️⃣ 그래프 데이터베이스(Graph DB)

    • 구조: 노드(Node)와 엣지(Edge)로 관계 표현
    • 특징: 관계 탐색에 최적화, Cypher 등 쿼리 언어 사용
    • 사용 예: 소셜 네트워크, 추천 시스템, 지식 그래프
    • 대표 DB: Neo4j, Amazon Neptune, ArangoDB

    4️⃣ 시계열 데이터베이스(Time-Series DB)

    • 구조: 시간 순으로 저장되는 데이터
    • 특징: 시계열 데이터 삽입/조회/집계 최적화, 다운샘플링, 윈도우 연산 지원
    • 사용 예: IoT 센서 데이터, 주식 시세, 서버 모니터링
    • 대표 DB: InfluxDB, TimescaleDB, OpenTSDB

    5️⃣ 기타 특수 목적 DB

    • 객체 DB(Object DB): 객체 지향 언어 객체 그대로 저장 (db4o, ObjectDB)
    • 멀티모델 DB(Multi-Model DB): 여러 모델 지원 (문서+그래프 등)
      • 예: ArangoDB, OrientDB, CosmosDB
    • 검색 엔진/인덱스 DB: 텍스트 검색 최적화
      • 예: Elasticsearch, Solr

     

    ❖ 분류구조/특징사용 예대표 DB

    관계형 RDB 테이블 기반, SQL, ACID 은행, ERP MySQL, PostgreSQL, Oracle
    문서형 NoSQL JSON/BSON, 스키마 유연 로그, 앱 데이터 MongoDB, Couchbase
    키-값 NoSQL 단순 KV 저장, 빠른 조회 캐시, 세션 Redis, DynamoDB
    컬럼형 NoSQL 컬럼 패밀리, 분석 최적화 빅데이터 분석 Cassandra, HBase
    그래프 DB 노드/엣지, 관계 탐색 최적화 SNS, 추천, 지식 그래프 Neo4j, Amazon Neptune
    시계열 DB 시간 기반, 시계열 연산 최적화 IoT, 모니터링, 주식 InfluxDB, TimescaleDB

    댓글

Designed by Tistory.