在我的应用程序需要大规模地提高插入性能。 例如:用约21K记录的文件接管100分钟来插入。 还有原因可能会需要一些时间,比如20分钟左右,但在100分钟实在太长了。
数据被插入到3个表(许多一对多)。 ID是由序列产生,但我已经用Google搜索,并设置hibernate.id.new_generator_mappings = true
和allocationSize +顺序递增至1000。
另外的数据量是没有什么非凡可言,该文件是90 MB。
我已经与大部分的时间在JDBC驱动程序(PostgreSQL的)都花在和休眠的视觉VM验证。 我认为这个问题是关系到子表的唯一约束。 服务层使得插入之前手动检查(= SELECT)。 如果记录已经存在,它重新使用它,而不是等待约束的例外。
所以,概括起来为特定的文件会有每桌1将(可能是不同的,但不是这个文件,这是理想的(最快)的情况下)。 这意味着总60K插入+ 20K选择。 不过在100分钟似乎很长(是硬件计数,这是一个简单的PC用7200转硬盘,SSD没有或RAID上)。 然而,这是在以前的应用(纯JDBC),在其上该硬件的相同的插入了约15分钟的改进版本。 考虑到在这两种情况下,约4-5分钟花费在“前处理”的增加是巨大的。
谁这可以改善任何提示? 有没有批量加载功能?