私はSpring、Java、Ibatis、Oracleを使用しています。 多くのデータを処理するためにマルチスレッドを使用するジョブが1つあります。マルチスレッド:重複したデータを書き込むときの最良の方法
すべてのスレッドでは、データベース内の同じテーブルにデータを書き込むことになるが、いくつかの時間は、スレッドのデータがそのように、contraintによって同じです。
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;
}
は、私が期待され得ることができますが、いくつかの時間は、私は、例外が発生しました、そしてそれは、性能がダウンします。
ルールは以下のとおりです。
- 私は、スキーマ
- を更新することはできません、それはパフォーマンスが
を下に行かせるので、私は、同期を使用したくないあなたはいずれかを持っていますかこれのための他のソリューションですか? パフォーマンスは非常に重要なポイントです。
を与えるために、その簡単にはこれを見てます。https://dba.stackexchange.com/questions/72501/duplicate-key-violates-unique-constraint-when -using-multi-threading –
ありがとう@AmolRaje、しかし、スキーマを更新できません。つまり、ストアドプロシージャを作成できません。他のアイデア? – BIZ
* "パフォーマンスは非常に重要です" *しかし、データベースのパフォーマンスを管理する最も重要な要素を変更することはできません。悲しい。 – APC