데이터베이스 - TEXT, BLOB

이강용·2024년 7월 29일
0

CS

목록 보기
107/109

TEXT 데이터 타입

  • TEXT 데이터 타입은 주로 길고 큰 문자열 데이터를 저장하는 데 사용

특징

  1. 문자 데이터 : TEXT는 문자 데이터를 저장하는 데 최적화되어 있음
    • 이는 일반적인 문자열, 문서, JSON, XML 등의 데이터를 저장하는 데 유용
  2. 가변 길이 : TEXT 데이터는 가변 길이의 문자열을 저장할 수 있으며 최대 크기는 DB 시스템에 따라 다름
  3. 사이즈 : 많은 DB 시스템에서 TEXT 타입은 다양한 크기로 구분됨
    • TINYTEXT : 최대 255 바이트
    • TEXT : 최대 65,535 바이트 (64KB)
    • MEDIUMTEXT: 최대 16,777,215 바이트 (16 MB)
    • LONGTEXT: 최대 4,294,967,295 바이트 (4 GB)
  4. 인덱싱 : TEXT 필드 전체를 인덱싱하기에는 비효율적이므로 일반적으로 텍스트의 앞부분만 인덱싱함
  5. 저장 방법 : TEXT 데이터는 일반적으로 테이블의 행(row)에 직접 저장되지 않고, 외부에 저장된 후 그 위치가 테이블의 해엥 저장됨

VARCHAR와 TEXT의 차이

VARCHAR

  1. 저장 위치
  • 행 내부(메모리)에 데이터를 직접 저장
  • 예를 들어, VARCHAR(100)을 선언하면 해당 칼럼을 위한 최대 100 문자(utf8 기준 최대 400 바이트)의 공간이 필요
  1. 최대 크기
  • 최대 65535 문자 길이까지 선언할 수 있음 (실제로는 65533으로 선언 가능, 2바이트는 길이 정보를 저장하는 데 사용)
  1. 인덱스
  • 인덱스를 걸 수 있음, VARCHAR 컬럼에 대한 인덱스는 일반적으로 전체 문자열을 인덱싱함

TEXT

  1. 저장위치
  • 행 외부(디스크)에 데이터를 저장하며 행 내부에는 데이터의 위치를 가리키는 포인터가 저장
  • 예를 들어, TEXT 필드를 선언하면 해당 포인터를 위한 공간이 필요함(일반적으로 8바이트)
  1. 최대 크기
  • 65535 바이트 (약 64KB)까지 데이터를 저장할 수 있음, 이 크기 한도는 UTF-8 인코딩 기준으로 최대 약 21845자까지 지정할 수 있음
  1. 인덱스
  • 인덱스를 걸 때 크기 제한을 해야함, 인덱스에 대한 크기 제한을 설정하지 않으면 다음과 같은 에러가 발생할 수 있음
Specified key was too long; max key length is 767 bytes
CREATE TABLE board(
	id INT NOT NULL AUTO_INCREMENT, title VARCHAR(255),
	content TEXT,
	PRIMARY KEY (id)
);
CREATE INDEX idx_content ON board (content(20));

BLOB 데이터 타입

  • BLOB(Binary Large Object) 데이터 타입은 바이너리 데이터를 저장하는 데 사용

특징

  1. 바이너리 데이터 : BLOB은 이미지, 비디오, 오디오, 압축 파일 등 바이너리 데이터를 저장하는 데 최적화되어 있음
  2. 가변 길이 : BLOB 데이터도 가변 길이의 바이너리 데이터를 저장할 수 있으며 최대 크기는 데이터베이스 시스템에 따라 다름
  3. 사이즈 : 많은 DB 시스템에서 BLOB 타입은 다양한 크기로 구분
    • TINYBLOB: 최대 255 바이트
    • BLOB: 최대 65,535 바이트 (64 KB)
    • MEDIUMBLOB: 최대 16,777,215 바이트 (16 MB)
    • LONGBLOB: 최대 4,294,967,295 바이트 (4 GB)
  4. 인덱싱 : BLOB 데이터는 인덱싱이 어렵기 때문에 일반적으로 인덱싱되지 않음
    • 일부 DB 시스템에서는 BLOB 데이터의 일부만 인덱싱할 수 있음
  5. 저장 방법 : BLOB 데이터는 TEXT와 유사하게 테이블의 행에 직접 저장되지 않고 외부에 저장된 후 그 위치가 테이블의 행에 저장됨

예시

INSERT INTO `leesfact`
(`img`)
VALUES
(LOAD_FILE('C:/Users/leesfact/Desktop/dev/a.png'))

그렇다면, 왜 BLOB를 많이 사용하지 않을까?

  • DB에서 BLOB(Binary Large Object)를 사용하여 큰 이진 파일(예: 이미지, 비디오, 오디오)을 저장하는 것은 몇 가지 이유로 일반적으로 추천하지 않음

1. 성능 문제

  1. 성능 저하
    • DB에 큰 이진 파일을 저장하면 DB의 성능이 저하될 수 있음
      • 이는 읽기 및 쓰기 작업이 더 오래 걸리고 전체 시스템의 성능에 영향을 미칠 수 있음
  2. 처리 시간 증가
    • 큰 파일을 DB에 처리하고 관리하는 데 시간이 많이 걸림
      • 이는 DB의 응답 시간을 늘리고 사용자 경험에 부정적인 영향을 미칠 수 있음
  3. 백업 및 복구 시간 증가
    • DB에 큰 파일이 많이 저장되어 있는 경우, DB 백업 및 복구 시간이 상당히 증가함
      • 이는 시스템 가용성에 영향을 미치고 긴 다운타임을 초래할 수 있음

2. 보안문제

  1. 접근 제어 복잡성
    • DB에 이미지를 저장하면 이 이미지에 대한 접근을 제어하고 관리하는 것이 더 복잡해짐
      • 이는 세밀한 접근 제어 정책을 적용하고 유지하는 데 어려움을 초래할 수 있음
  2. 보안 정책 적용의 어려움
    • 큰 이진 파일의 경우 파일 자체의 보안 정책을 적용하기가 어려움, 이는 DB 레벨에서의 보안 설정과 파일 시스템 레벨에서의 보안 설정이 일치하지 않을 수 있음

3. 파일 시스템과의 비교

  1. 파일 시스템 사용의 효율성
    • 일반적으로 큰 이진 파일은 데이터베이스가 아닌 파일 시스템에 저장하고 파일 경로를 DB에 저장하는 방식이 더 효율적임
      • 이는 파일 접근 속도를 높이고 DB의 부담을 줄임
  2. 파일 시스템의 확장성
    • 파일 시스템은 대용량 파일 저장 및 관리를 위한 최적화가 되어 있으며 대규모 파일 처리에 더 적합함
      • 파일 시스템을 사용하면 DB의 성능 저하를 방지할 수 있음
profile
HW + SW = 1

0개의 댓글