2017-11-09 12 views
0

거대한 이진 데이터를 데이터베이스에 저장하고 싶습니다. 클라이언트는 콘텐츠 크기, 생성 날짜 등 과 같은 메타 데이터를 검사하고 콘텐츠를 스트리밍 할 수 있어야합니다.DB에서 클라이언트로 거대한 데이터를 스트리밍하는 방법

JPA를 사용하면 메타 데이터를 지속적으로 유지할 수 있습니다.

@Entity 
public class MyData { 
    @Id 
    private String name; 
    private Timestamp creationDate; 
    private long contentSize; 

콘텐츠 모델을 만드는 방법은 무엇입니까? 내가

byte[] content; 

을 사용한다면 전체 콘텐츠는 원치 않는 인 메모리에 저장해야합니다. 최대 절전 모드, 다음 작동하지만 다른 JPA - 공급자, 예는 OpenJPA, 와

content가 지속도 @Transient을 주석도 아닌 불평.

@Lob 
@Basic(fetch=FetchType.LAZY) 
private java.sql.Blob content; 

질문 : 바이트 배열의 전체 내용을 저장할 필요없이 을 스트리밍 할 수있는 휴대용 솔루션이 있습니까?

+0

휴대용? 아니. 그 점에 대한 JPA 스펙에는 아무것도 없습니다. 모든 JPA 제공 업체는 자체 지원되는 유형과이를 지원하는 방법을 지원합니다. "byte []"는 적절한 유형이 아니지만 현재 존재하는 JDBC 드라이버에 묶여 있기 때문에 Blob도 마찬가지입니다. Reader 나 InputStream과 같은 것이 더 의미가 있습니다 ... JPA 공급자가 지원한다면 – DN1

답변

0

JPA를 단독으로 사용하는지 또는 스프링과 함께 사용하는지 확실하지 않습니다. 그것이 봄과 함께라면 Spring Content을 봐라? 이 라이브러리는 Storage 전체에서 이식 가능한 콘텐츠 (API가 스트림을 기반로하는 거대한 콘텐츠 포함)를 처리하기위한 추상화를 제공합니다. RDBMS, File, S3, Mongo의 GridFS. RDBMS의 경우 메모리 효율적인 방식으로 스트림을 관리하기위한 작업을 수행하므로 호출 클라이언트 (열려있는 DB 연결 외부)로 다시 컨텐츠를 스트리밍 할 수 있습니다. 좀 봐봐.