2011-09-15 4 views
5

크기가 가변적 인 원시 이진 문자열 (100k에서 800k까지)을 캡처하고 있으며이 개별 문자열을 저장하려고합니다. 색인을 생성 할 필요가 없으며 필드 내용에 대한 조회가 없습니다.긴 이진 (원시 데이터) 문자열 저장

이러한 삽입 물의 양은 매우 클 것입니다 (보관 목적으로 사용하는 경우), 하루에 10,000 개라고 가정 해 봅시다. 다음과 같은 대형 바이너리 문자열에 가장 적합한 필드 유형은 무엇입니까? text 또는 blob 또는 다른 항목이 있어야합니까?

답변

13

까지 PostgreSQL에 대해서는 text이 문제가되지 않습니다. 그것은 더 느리고, 더 많은 공간을 사용하며, 목적을 위해 bytea보다 에러가 발생하기 쉽습니다. 파일 시스템에서 파일로

  1. 사용 유형 bytea (은 SQL BLOB 유형의 기본적 페이지에 해당)

  2. 사용 "large objects"

  3. 저장 모양 :
    는 기본적으로 3 개 방법이 있습니다 파일 이름 만 데이터베이스에 저장하십시오.

각각에는 장점과 단점이 있습니다.

  1. 은 처리하기가 쉽지만 디스크 공간이 가장 많이 필요합니다. 일부 디코딩 및 인코딩이 필요하므로 속도가 느려집니다. 백업 크기가 빠르게 커집니다!

  2. 은 처리가 약간 어색하지만 필요한 경우 BLOB를 조작하기위한 자체 인프라가 있습니다. 또한 별도의 백업을보다 쉽게 ​​만들 수 있습니다.

  3. 은 가장 빠른 방법이며 최소한의 디스크 공간을 사용합니다. 그러나 데이터베이스에 저장할 때 참조 무결성을 제공하지는 않습니다. 참조 무결성 및 빠른 참조를위한 bytea와 필드에 작은 썸네일를 저장 :

나는 이미지 파일 같은 구현의 번호를 가지고있다. 원본 이미지를 파일 시스템에 파일로 저장하십시오. 물론 오래된 파일을 삭제할시기와 방법, 외부 파일을 백업하는 방법 등을 고려해야합니다.

+0

위대한 답변입니다. 감사. – teustis

+1

이러한 접근 방식을 비교 한 최근 데이터가 있습니까? 객관적인 비교가 있었다면 멋질 것입니다. – beldaz

2

대부분의 데이터베이스에서 blob을 사용해야합니다. text 열은 종종 텍스트 인코딩이나 로캘에 따라 정규화되거나 변환됩니다. 실제 바이트는 예상대로 보존되지 않을 수 있습니다. 대부분의 경우이 값은 textblob 열의 유일한 차이입니다.

0

우리는 최대 300MB의 파일을 저장할 사용자 VARBINARY 열을 보유하고 있습니다.

관련 문제