我有一个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;
}
...
}
答案 0 :(得分:0)
我刚刚注意到你正在开始一个事务,然后做一个saveOrUpdate()
,这可能解释了减速,因为hibernate将首先尝试从数据库中检索行(正如另一个{{3}所述})。
如果您知道该实体是否是新来电save()
,并且您必须更新实体,请致电update()
。
另一个建议,但我不确定这是否适用于MySQL,如果您打算更新blob / clobs,请尝试将blob / clobs存储在存储数据的不同表中。在过去,这种混合使MySQL运行缓慢,因为它必须调整分配给一行的“块”。所以有一个包含所有属性的表和一个仅用于blob / clob的不同表。如果表是只读的,则不是这种情况。