2010-11-21 3 views
0

에 의해 파일 청크를 추가하는 I가 내가 최대 절전 모드 사용하여 PostgreSQL 데이터베이스에서이 파일을 저장할 수있는 방법 덩어리매핑 바이트 [] 최대 절전 모드 및 덩어리

public void addFileChunk(Long fileId, byte[] buffer) 

100 메가 비디오 파일을 수신 웹 서비스?

정규 JDBC를 사용하는 것은 매우 간단합니다. 내 웹 서비스 메서드 내에서 다음 코드를 사용합니다 :

LargeObject largeObject = largeObjectManager.Open(fileId, LargeObjectManager.READWRITE); 
        int size = largeObject.Size(); 
        largeObject.Seek(size); 
        largeObject.Write(buffer); 
        largeObject.Close(); 

최대 절전 모드를 사용하여 동일한 기능을 어떻게 얻을 수 있습니까? 청크로이 파일을 저장 하시겠습니까?

각 파일 청크를 bytea로 별도의 행에 저장하는 것은 나에게 너무 영리한 생각 인 것 같습니다. 피스 조언.

+0

왜 당신은 단순히 그 동안 최대 절전 모드를 우회하지 않습니까? –

+0

이것은 Spring 통합 웹 서비스이기 때문에 나는 이미 Hibernate와 Transaction 관리 빈을 주입했고 다른 메소드에서 널리 사용되었다. 그래서이 파일을 저장하기 위해서만 새로운 JDBC 연결을 열고 싶지 않습니다. –

답변

1

이제 데이터베이스에 100MB 파일을 저장하는 것이 좋습니다. 대신 파일 시스템에 저장하고 싶지만 트랜잭션이 활성화되어 있다고 생각하면 서블릿을 사용하는 것이 합리적인 것처럼 보입니다.

  1. 파일 (수신 된 파일)이 일부 임시 위치에 저장되도록 HTTP 요청을 처리합니다.
  2. 오픈 트랜잭션, 임시 위치를 포함한 파일 메타 데이터 유지, 닫기 트랜잭션
  3. 임시 파일을 모니터링하는 외부 프로세스를 사용하여이 파일을 최종 서 버로 전송하여 일부 서블릿을 통해 사용자에게 제공됩니다.
+0

PostgreSQL에서 큰 개체로 저장하는 것이 왜 도움이되지 않을지 모르겠습니다. LOB 인터페이스는 파일 시스템과 같은 스트리밍 인터페이스를 제공하므로 원하는대로 입력 또는 출력을 청크 할 수 있습니다. 그것은 잘 작동하고 필요한 경우 중요한 데이터의 오프셋을 색인화하기 위해 색인을 작성할 수도 있습니다. –