[DB] 데이터베이스, Index
CS/Database

[DB] 데이터베이스, Index

데이터베이스

데이터베이스는 통합하여 관리되는 데이터의 집합체를 의미한다. 이는 중복된 데이터를 없애고, 자료를 구조화하여 효율적인 처리를 할 수 있도록 관리된다. 이런 데이터베이스는 응용 프로그램과는 다른 별도의 미들웨어에 의해 관리되며 이를 데이터베이스 관리 시스템 (DBMS)라고 한다.

데이터 베이스를 사용하는 이유

  • 파일 시스템을 사용했을 때의 문제점
    • 데이터의 중복과 비일관성
    • 데이터 접근 시 필요한 데이터를 편리하고 효율적으로 검색하기 힘듬
    • 데이터가 여러 파일에 흩어져 있고 파일 형식이 서로 다를 수 있음
    • 데이터 동시 접근 시 데이터가 잘못 업데이트 될 수 있음
    • 무결성 문제
    • 보안 문제
  • 데이터베이스의 장점
    • 데이터의 논리적, 물리적 독립성, 일관성, 무결성, 보안성 보장
    • 데이터의 중복 최소화
    • 저장된 자료를 공동으로 이용 가능
    • 데이터를 통합하여 관리 가능
    • 데이터읫 실시간 처리가 가능
  • 데이터베이스의 단점
    • 전산화 비용 증가
    • 대용량 디스크로의 집중적인 access로 과부하가 발생할 수 있음

데이터베이스 용어 정리

긍정적 단어

  • 독립성 (Data Independence)
    • 논리적 독립성 : 응용 프로그램과 데이터베이스를 독립시킴으로써, 데이터의 논리적 구조를 변경시키더라도 응용 프로그램은 변경되지 않는다.
    • 물리적 독립성 : 응용 프로그램과 보조기억장치 같은 물리적 장치를 독립시킴으로써, 데이터베이스 시스템의 성능 향상을 위해 새로운 디스크를 도입하더라도 응용 프로그램에는 영향을 주지 않고 데이터의 물리적 구조만을 변경한다.
  • 무결성 (Data Integrity) : 삽입, 삭제, 갱신 등의 연산 후에도 데이터베이스에 저장된 데이터가 정해진 제약 조건을 항상 만족해야 한다.
  • 일관성 (Data Consistency) : 데이터베이스에 저장된 데이터와 특정 질의에 대한 응답이 변함 없이 일정해야 한다.

부정적 단어

  • 종속성 (Data Dependency) : (⇔ 독립성) 응용 프로그램의 구조가 데이터의 구조에 영향을 받는다.
  • 중복성 (Data Redundancy) : 같은 데이터가 중복되어 저장되는 것으로, 데이터 수정/삭제 시 연결된 모든 데이터를 수정/삭제해줘야 하는 문제점이 있다.
  • 비일관성 (Data Inconsistency) : 동일한 데이터의 여러 사본이 서로 다른 값을 보유하고 있는 상태로, 데이터 중복성에 이어서 발생할 수 있다.

데이터베이스의 성능

데이터베이스의 성능 이슈는 디스크 I/O를 어떻게 줄이느냐에서 시작된다.

성능 개선을 위한 방법으로는 인덱스, 옵티마이저, 분산기법 등이 있다.

관계형 데이터베이스 시스템 (RDBMS)

  • 테이블 기반 DBMS로, 테이블의 집합으로 데이터의 관계를 표현
  • 데이터를 테이블로 관리
  • 중복 데이터 최소화 (정규화)
  • 여러 테이블에 분산되어 있는 데이터 검색 시 테이블 간의 관계(join)을 이용해 필요한 데이터를 검색
  • 언어 종류
    • DDL(Data Definition Language): 데이터 정의어 CREATE, ALTER, DROP, RENAME
    • DML(Data Manipulation Language): 데이터 조작어 INSERT, SELECT, UPDATE, DELETE
    • DCL(Data control Language): 데이터 제어어 GRANT, REVOKE
    • TCL(Transaction Control Language): 트랜잭션 제어어 COMMIT, ROLLBACK, Savepoint

Index

  • 데이터가 저장된 레코드의 주소
  • 항상 정렬되어 있음
  • 중복이 많은 데이터에는 인덱스 추가를 안하는게 좋음
  • 데이터의 저장 성능을 희생하고 그 대신 데이터의 읽기 속도를 높이는 기능임
  • 장점
    • 테이블을 조회하는 속도와 그에 따른 성능을 향상시킬 수 있음
    • 전반적인 시스템의 부하를 줄일 수 있음
  • 단점
    • Index 생성시, .mbd 파일 크기가 증가함
    • 한 페이지를 동시에 수정할 수 있는 병행성이 줄어듬
    • 인덱스 된 field에서 데이터를 업데이트하거나, Record를 추가 또는 삭제시 성능이 떨어짐
    • 데이터 변경 작업이 자주 일어나는 경우, index를 재작성해야 하므로 성능에 영향을 미침
  • 사용하면 좋은 경우
    • Where 절에서 자주 사용되는 column
    • 외래키가 사용되는 column
    • JOIN에 자주 사용되는 column
    • ORDER BY절에서 자주 사용되는 column
    • 항상 =으로 비교되는 column
    • 중복되는 데이터가 최한인 column
  • 사용을 피해야 하는 경우
    • Data 중복도가 높은 column
    • DML이 자주 일어나는 column
  • DBMS의 인덱스 자료구조: B+-Tree (최상위에 root, 최하위에 leaf, 중간에 branch 노드로 구성)
    1. B-Tree
      • 한 노드당 자식노드가 2개 이상 가능
      • key값을 이용해 데이터를 찾음
      • 데이터를 찾는 속도가 비슷함
      • 균형트리
      • 브랜치 노드에 key, data담기 가능
    2. B+Tree
      • 오직 리프노드에만 key, data 담기 가능
      • 브랜치 노드에서는 key만
      • 리프노드는 링크드 되어 있음
      • 리프노드만 데이터를 담아 메모리 손실 줄여 더 많은 key 수용

 

 

참고

https://github.com/Seogeurim/CS-study/tree/main/contents/database

728x90
반응형