PostgreSQL의 BLOB 또는 참조


11

바이너리 데이터 파일을 Ubuntu 서버에서 실행되는 PostgreSQL 데이터베이스에 저장해야합니다. 처음에는 각각 약 250kb 크기의 수십 개의 파일이 있습니다. 그러나 파일 수는 시간이 지남에 따라 증가합니다. 다른 다운 스트림 분석을 위해 파일에서 데이터를 추출해야 할 수도 있습니다.

이진 데이터를 BLOB 또는 참조로 저장해야한다는 오래된 질문에 대해 조사했습니다. 둘 다 분명히 장단점이 있습니다. PostgreSQL과 관련하여 알아야 할 특정 문제가 있습니까? PostgreSQL 함수 또는 외부 Python 프로그램을 통해 파일에서 데이터를 추출하려는 경우 하나의 방법 또는 다른 방법이 선호됩니까?

데이터 파일을 데이터베이스에 직접 저장하려면 다른 모든 필드가 포함 된 테이블이 아니라 "주"테이블을 참조하는 외래 키를 사용하여 별도의 테이블에 저장하는 것이 더 낫습니까?

나는 여기 에서 질문과 답변을 읽었습니다 . 주석은 리눅스에서 (파일 시스템에서) 참조로 바이너리 파일을 저장하는 것이 좋습니다. 내 질문은 구체적으로 PostgreSQL과 관련이 있으며 다양한 분석을 위해 파일에서 데이터를 추출하는 것과 관련이 있습니다.

업데이트 : 비슷한 질문 .


PostgreSQl을 사용 하면 참조가 포함 된 레코드가 삭제 될 때 파일 시스템 에서 파일을 자동으로 삭제 하는 규칙 을 설정할 수 있습니다.
jp

이 질문에 대한 답변이 두 개 이상 있다고 확신합니다. 무슨 일이야? 포스터에서 삭제 한 경우 볼 수있는 방법이 있습니까? 그것에 대한 의견은 어떻습니까?
SabreWolfy

예, 내가 작성한 bytea의 성능 문제를 피할 수 있으므로 삭제했습니다. 주석은 "bytea를 사용하면 문제가 없습니다. 데이터베이스에서 인쇄 할 수없는 문자를 이스케이프하지 말고 응용 프로그램에서 다시 이스케이프하지 않아야합니다. araqnid가 언급 한대로 대신 사용해야합니다. libpq에서 지원하는 16 진수 이스케이프 "
jp

답변:


9

데이터베이스에 데이터를 일반 bytea열로 저장해야한다고 생각합니다 . 이렇게하면 데이터베이스의 모든 이점을 얻을 수 있으며 데이터베이스 기능 (및 원하는 경우 PL / Python)을 사용하여 데이터를 처리 할 수 ​​있습니다. 더 큰 데이터 항목은 자동으로 라인 외부에 저장되므로 다른 참조 간접 참조를 도입 할 이유가 없습니다.

데이터베이스 외부에 큰 이진 개체를 저장하는 주된 이유는 개체가 너무 커서 데이터베이스를 실용 할 수없는 수준으로 팽창 시키거나 파일을 파일로 파일에 액세스해야하는 경우 만족스러운 시간에 개체를 저장하고 검색 할 수없는 것입니다 별도의 응용 프로그램. 내가 알 수있는 한 그중 아무것도 적용되지 않습니다.


자세한 내용에 감사드립니다. 별도의 응용 프로그램에서 파일에 액세스하는 것에 대한 당신의 요점은 나중에 사용자가 바이너리 파일을 다운로드하여 자신의 컴퓨터에서 로컬로 사용하도록 허용하고 싶다는 것을 깨달았습니다. 파일이 데이터베이스에 저장된 경우 수행 할 수 있습니까?
SabreWolfy

확실한. 이를 위해 (데이터베이스에서 파일 데이터 가져 오기, HTTP 다운로드 정렬 등) 작은 코드를 작성해야하지만 이는 차단 기능이 아닙니다.
피터 아이젠 트라우트
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.