多线程:写入重复数据的最佳方式

时间:2017-12-08 08:28:33

标签: java multithreading oracle performance

我使用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;
    }

使用这段代码,我可以得到我所期望的,但是有一段时间我得到了例外,它会使性能下降。

规则是:

  • 我无法更新架构
  • 我不想使用synchronized,因为它会降低性能

您还有其他解决方案吗? 表现非常重要。

1 个答案:

答案 0 :(得分:1)

描述似乎很模糊,但仍在尝试回答。

如果无法同步或删除约束,您可以考虑如何将数据提供给线程。

根据我所理解的描述,有时不止一个线程会选择相同的数据进行处理。

如果是这种情况,你可能会想出一些逻辑来在线程之间分配输入数据,而不是让线程随机地获取输入数据。

如果您可以提供有关输入数据的信息,则很容易提供解决方案

相关问题