본문 바로가기
2.2 DB/ORACLE

[Oracle] CLOB과 BLOB의 정의

by Dohi._. 2024. 10. 11.
728x90
 
LOB(Large Object)는 데이터베이스에서 대량의 데이터를 저장하기 위해 사용하는 데이터 타입입니다.
LOB은 크게 두 가지로 나눌 수 있습니다.
 
  1. CLOB (Character Large Object)
    • 주로 대용량의 텍스트 데이터를 저장
    • 예를 들어, 문서, XML 파일, 긴 문자열 등을 저장할 수 있습니다.
  2. BLOB (Binary Large Object)
    • 대용량의 이진 데이터를 저장
    • 이미지, 비디오, 오디오 파일 등 다양한 유형의 이진 데이터를 저장할 수 있습니다.
  3. 그외로 NCLOB, BFILE(외부).. 등이 있긴 하다.

BLOB (Binary Large Object)의 사용 이유

  1. 다양한 데이터 유형: 이진 데이터로 저장하기에 이미지, 비디오, 오디오 파일 등 다양한 이진 데이터를 저장가능
  2. 데이터 무결성: 이진 데이터로 저장됨으로써, 파일이 변형되거나 손상되지 않고 원본 상태로 유지될 수 있습니다.
  3. 편리한 관리: BLOB을 사용하면 데이터베이스에서 이진 데이터를 효율적으로 관리할 수 있으며, 데이터베이스와 애플리케이션 간의 데이터 전송이 간편

하지만 요즘에는 파일서버, 이미지서버등에 저장을 하고 파일경로를 DB에 저장하는 식으로 BLOB를 대체하기도 한다.

BFILE의 경우는 외부저장장치를 이용하는데 즉,  OS 파일에 저장된 데이터의 경로 정보와 파일명을 저장 (최대 4G 저장)

DB에서 큰 파일을 자체로 불러오는 것은 하나의 DB서버에게 큰 일이기도 하기 때문이다.

 

Character vs CLOB

  1. Character (CHAR, VARCHAR2 등)
    • 용도: 주로 짧은 문자열 데이터를 저장합니다.
    • 크기 제한: 최대 (CHAR  2000byte)  / (VARCHAR2  4000byte)
    • 성능: 일반 문자열 데이터에 최적화되어 있어, 검색 및 조작 시 성능이 좋습니다.
  2. CLOB (Character Large Object)
    • 용도: 대량의 텍스트 데이터를 저장하는 데 사용됩니다. 예를 들어, 긴 문서, XML 파일 등.
    • 크기 제한: 훨씬 큰 텍스트 데이터를 저장할 수 있으며,Oracle에서는 4GB까지 지원합니다.
    • 성능
      • 대량의 데이터를 다루기 때문에, 처리 속도는 일반 문자열에 비해 느릴 수 있다
        •  row 수가 많아진다면 성능면에서 큰 부담이 될 수 있다.
        • 그렇기 때문에 CLOB 컬럼 조회 시 전체 데이터가 아닌 일부 데이터만 보여지게 된다.
        • 따라서 LOB타입은 Key로 설정할 수없다. 
      • 특정 함수나 조작 방식이 필요할 수 있습니다.
        •  오라클 자체에서는 CLOB ↔ VARCHAR2 사이에 암시적 변환을 수행해주나  불러오는 방식(JDBC)에 따라oracle.sql.CLOB@123asdas2 이런식으로 나오는 경우가 있습니다. 
        • 즉, CLOB의 저장방식에 따른 주소값이 불러와지는 겁니다.
        • 전체 값을 조회할 때 dbms_lob.substr(컬럼명, dbms_lob.getlength(컬럼명))이용

LOB의 저장방식

LOB 데이터는 일반적인 데이터 타입(예: VARCHAR, BINARY)과는 다르게, 데이터베이스의 별도 저장 영역에 저장됩니다. 이로 인해 대량의 데이터를 효과적으로 처리할 수 있게 되는데

별도 저장 영역에 저장하는 LOB 데이터는 보통 하나의 식별자를 통해 관리됩니다.

이 식별자는 LOB 데이터의 위치를 참조하며, 실제 데이터는 데이터베이스의 LOB 전용 저장 영역에 저장됩니다.

LOB 데이터는 큰 사이즈로 인해 직접적으로 메모리에 로드하지 않고, 필요한 부분만 접근하여 읽거나 수정하기도 하는데 이를 통해서 메모리 효율성을 높일 수 있습니다.

 

 

알아 두면 좋은 정보

 

다른 DBMS에서의 지원

  • MySQL: CLOB은 TEXT로, BLOB은 BLOB으로 구현되어 있으며, 다양한 크기의 이진 및 텍스트 데이터를 지원
  • PostgreSQL: CLOB은TEXT, BLOB BYTEA로 지원
  • SQL Server: CLOB은 NVARCHAR(MAX)로, BLOB은 VARBINARY(MAX)로 지원
  • SQLite: CLOB은 TEXT로, BLOB은 BLOB으로 지원

 

DBMS_LOB

  • LOB(BLOB,CLOB)타입의 컬럼 데이터에 대한 연산을 제공하는 패키지

 

728x90

댓글