我使用Spring,Java,Ibatis,Oracle。 我有一个使用多线程处理大量数据的工作。
所有线程都会将数据写入数据库中的相同表,但有时候线程的数据是相同的,例如:
CONSTRAINT n_uc1 UNIQUE (name, title, language, ...)
。像这样的示例代码:
public Long write(Input input) {
Long key = read(input);
if (key != null)
{
return key;
}
try
{
key = write(input);
}
catch (org.springframework.dao.DuplicateKeyException ex)
{
// if exception happend, it means already wrote data, read it again
key = read(input);
}
return key;
}
使用这段代码,我可以得到我所期望的,但是有一段时间我得到了例外,它会使性能下降。
规则是:
您还有其他解决方案吗? 表现非常重要。
答案 0 :(得分:1)
描述似乎很模糊,但仍在尝试回答。
如果无法同步或删除约束,您可以考虑如何将数据提供给线程。
根据我所理解的描述,有时不止一个线程会选择相同的数据进行处理。
如果是这种情况,你可能会想出一些逻辑来在线程之间分配输入数据,而不是让线程随机地获取输入数据。
如果您可以提供有关输入数据的信息,则很容易提供解决方案