【问题标题】:How to stream huge data from DB to client如何将大量数据从数据库流式传输到客户端
【发布时间】:2017-11-09 06:55:05
【问题描述】:

我想在数据库中存储大量二进制数据。 客户端应该能够检查内容大小、创建日期等元数据 以及流式传输内容。

使用 JPA,持久化元数据非常简单。

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

但是如何对内容进行建模? 如果我会使用

byte[] content;

那么完整的内容必须保存在内存中,这是不需要的。

使用 Hibernate,以下工作,但其他 JPA 提供程序,例如 openJPA, 抱怨content 既不持久也不注释@Transient

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

问题:是否有允许流式传输的便携式解决方案 无需将全部内容保存在字节数组中?

【问题讨论】:

  • 便携?不。 JPA 规范中没有任何内容。所有 JPA 提供者都有自己支持的类型和支持的处理方式。正如您所说,“byte []”不是合适的类型,但是 Blob 也不是,因为它与存在的 JDBC 驱动程序相关联。像 Reader 或 InputStream 这样的东西更有意义......如果你的 JPA 提供者支持它们

标签: java hibernate jpa openjpa


【解决方案1】:

不确定您是单独使用 JPA 还是与 Spring 一起使用。如果是 Spring 那么看看Spring Content?该库提供了一种用于处理可跨存储移植的内容(包括大量内容,因为 API 基于流)的抽象; RDBMS、文件、S3、Mongo 的 GridFS。在 RDBMS 的情况下,它以内存有效的方式管理流,因此您可以将内容延迟流回调用客户端(在打开的 DB 连接之外)。可能值得一看。

【讨论】:

    猜你喜欢
    • 2013-05-10
    • 2018-07-15
    • 1970-01-01
    • 1970-01-01
    • 2020-06-21
    • 1970-01-01
    • 2018-07-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多