Как Решить использовать Транзакции базы данных

Говоря с точки зрения производительности "2" (с JMH):

class A{}
class B extends A{}

public class InstanceOfTest {

public static final Object a = new A();
public static final Object b = new B();

@Benchmark
@BenchmarkMode(Mode.AverageTime)
@OutputTimeUnit(TimeUnit.NANOSECONDS)
public boolean testInstanceOf()
{
    return b instanceof A;
}

@Benchmark
@BenchmarkMode(Mode.AverageTime)
@OutputTimeUnit(TimeUnit.NANOSECONDS)
public boolean testIsInstance()
{
    return A.class.isInstance(b);
}

@Benchmark
@BenchmarkMode(Mode.AverageTime)
@OutputTimeUnit(TimeUnit.NANOSECONDS)
public boolean testIsAssignableFrom()
{
    return A.class.isAssignableFrom(b.getClass());
}

public static void main(String[] args) throws RunnerException {
    Options opt = new OptionsBuilder()
            .include(InstanceOfTest.class.getSimpleName())
            .warmupIterations(5)
            .measurementIterations(5)
            .forks(1)
            .build();

    new Runner(opt).run();
}
}

Это дает:

Benchmark                            Mode  Cnt  Score   Error  Units
InstanceOfTest.testInstanceOf        avgt    5  1,972 ? 0,002  ns/op
InstanceOfTest.testIsAssignableFrom  avgt    5  1,991 ? 0,004  ns/op
InstanceOfTest.testIsInstance        avgt    5  1,972 ? 0,003  ns/op

Таким образом, мы можем сделать вывод: instanceof так быстро, как isInstance () и isAssignableFrom () недалеко (+ 0,9% времени выполнения). Так что нет никакой разницы, что бы вы ни выбрали

9
задан John Saunders 7 July 2009 в 18:19
поделиться

4 ответа

Транзакция должна использоваться, когда вам нужно, чтобы набор изменений был полностью обработан, чтобы операция считалась завершенной и действительной. Другими словами, если только часть выполняется успешно, приведет ли это к тому, что в вашей базе данных будут храниться неполные или недействительные данные?

Например, если у вас есть вставка, за которой следует обновление, что произойдет, если вставка будет успешной и обновление не удается? Если это приведет к получению неполных данных (в данном случае потерянной записи), вы должны заключить два оператора в транзакцию, чтобы они завершились как «набор».

13
ответ дан 4 December 2019 в 06:27
поделиться

Если вы выполняете два или более операторов, которые, как вы ожидаете, будут функционально атомарными, вы должны заключить их в транзакцию.

9
ответ дан 4 December 2019 в 06:27
поделиться

Когда вам не понравится, если часть операции может быть завершена, а часть - нет.

7
ответ дан 4 December 2019 в 06:27
поделиться

если у вас есть более одного оператора изменения данных, который нужно выполнить для выполнения задачи, все они должны находиться в транзакции.

Таким образом, если первый из них успешен, но любой из следующие содержат ошибку, вы можете откатить (отменить) все, как будто ничего не было сделано.

7
ответ дан 4 December 2019 в 06:27
поделиться
Другие вопросы по тегам:

Похожие вопросы: