表列太小时,如何处理来自Spring JDBC的批处理SQL插入

|| 我正在尝试将大量数据批量插入MYSQL数据库中,并且需要有关如何处理表列不足以应付传入数据大小的情况的建议。 由于数据集非常大(超过1Gb),因此我正在将输入数据流式读取到内存中。在某些时候,我“刷新”数据并尝试使用jdbcTemplate.batchUpdate将其插入表中。目标表的所有列都是VARCHAR,并假定其大小为50。这对于绝大多数数据而言完全合适。但是,由于偶尔到达的数据大于15号,因此INSERT将失败(数据对于列而言太长)。 解决此问题的最佳方法是什么?我不想盲目地将所有表列都变大,因为这似乎是一种无法很好扩展的策略。由于大小,我也不想预先准备数据。因此,我应该等待失败,然后执行适当的\“ ALTER TABLE \”并重新提交数据吗?是否可以缓存掉失败的项目,确定所需的列大小并仅重新提交失败的项目? 我正在寻找有关执行此操作的最佳方法的指针和一般建议。 谢谢。     
已邀请:
我相信您最好的选择是在将数据放入插入批处理之前验证数据。这样,您可以拒绝字符串太长的对象,也可以将字符串截断为所需的大小。     
您指示您正在使用MySQL和varchar列。目前尚不清楚我当前的列宽是15还是50,但是无论哪种情况,使用列定义varchar(255)都不会降低性能。我认为这将使许多失败案例获得成功。 您没有说明是否要求所有数据都必须原样保留在数据库中,或者您是否可以截断或修改数据以使其适合。假设您可以更改数据,那么还有另外两个想法: 对于仍然过长的数据处理,我喜欢Olaf的建议,即在包含在批处理中之前先验证数据。我将在读取每个记录时对其进行验证,然后决定是将其添加到插入批处理中还是将其作为失败处理(存储在文件中?)。 另外,您实际上并没有指出读取和插入数据库之前对数据进行了多少处理。如果您什么都不做,那么也许您应该研究可用于MySQL的批量加载工具(我不太熟悉,无法告诉您)。通常,这些工具能够为您处理这些类型的案件。     

要回复问题请先登录注册