在hibernate上保存大对象需要太长时间

时间:2016-02-26 11:34:28

标签: mysql hibernate blob

我有一个Blob列 requestData 和文本列“requestDataText”的对象。 这两个字段可能包含大数据。在我的示例中,blob数据大约为1.2 MB,Text列保存与该Data相当的文本。

当我尝试提交此单个实体时,大约需要20秒。

DBUtil.beginTransaction();
session.saveOrUpdate(entity);
DBUtil.commitTransaction();

是否存在问题,或者有没有办法缩短这段时间?

package a.db.entity;
// Generated Feb 22, 2016 11:57:10 AM by Hibernate Tools 3.2.1.GA


/**
 * Foo generated by hbm2java
 */
@Entity
@Table(name="foo"
    ,catalog="bar"
)
public class Foo  implements java.io.Serializable {
 private Long id;
 private Date reqDate;
 private byte[] requestData;
 private String requestDataText;
 private String functionName;
 private boolean confirmed;
 private boolean processed;
 private boolean errorOnProcess;
 private Date processStartedAt;
 private Date processFinishedAt;
 private String responseText;
 private String processResult;
 private String miscData;

public AsyncRequestLog() {
}


 @Id @GeneratedValue(strategy=IDENTITY)

@Column(name="Id", unique=true, nullable=false)
public Long getId() {
    return this.id;
}

public void setId(Long id) {
    this.id = id;
}

...

}

1 个答案:

答案 0 :(得分:0)

我刚刚注意到你正在开始一个事务,然后做一个saveOrUpdate(),这可能解释了减速,因为hibernate将首先尝试从数据库中检索行(正如另一个{{3}所述})。

如果您知道该实体是否是新来电save(),并且您必须更新实体,请致电update()

另一个建议,但我不确定这是否适用于MySQL,如果您打算更新blob / clobs,请尝试将blob / clobs存储在存储数据的不同表中。在过去,这种混合使MySQL运行缓慢,因为它必须调整分配给一行的“块”。所以有一个包含所有属性的表和一个仅用于blob / clob的不同表。如果表是只读的,则不是这种情况。