java - 为什么 TRANSACTION_READ_COMMITTED 是 Java 中的默认值?

标签 java transactions

交易教程在Using Transactions to Preserve Data Integrity一节解释:

The default transaction isolation level depends on your DBMS. For example, for Java DB, it is TRANSACTION_READ_COMMITTED.

对于我的 Postgresql 数据库,它是一样的。但这似乎不是最好的,因为只有TRANSACTION_SERIALIZABLE防止所有不一致:

Isolation Level             │Transactions │Dirty Reads   │Non-Repeatable Reads│Phantom Reads
=============================================================================================
TRANSACTION_NONE            │Not supported│Not applicable│Not applicable      │Not applicable
TRANSACTION_READ_COMMITTED  │Supported    │Prevented     │Allowed             │Allowed
TRANSACTION_READ_UNCOMMITTED│Supported    │Allowed       │Allowed             │Allowed
TRANSACTION_REPEATABLE_READ │Supported    │Prevented     │Prevented           │Allowed
TRANSACTION_SERIALIZABLE    │Supported    │Prevented     │Prevented           │Prevented

为什么最佳选项不是默认值?

最佳答案

交易安全与性能之间存在反比关系。
如果您选择最佳隔离级别,您也会获得最差的性能。
你必须做一个 trade-off两者之间。

查看此 benchmark了解更多详情。

关于java - 为什么 TRANSACTION_READ_COMMITTED 是 Java 中的默认值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63683580/

相关文章:

java - Collectors.groupingBy 具有自定义键名称

c# - 单个事务中的多线程

oracle - ADO.NET,在没有事先提交或回滚的情况下关闭 OracleConnection : Will it leak?

python - ZODB:transaction.savepoint 向哪里写入数据?

java - 如何将选定的 Maven 配置文件传递到 Spring 配置文件?

Java SDK Mac OS X 构建说明

java - 使用整数和字符进行数组排序

java - request.getParameter - 无法读取 &

mysql - 我们可以在不创建过程的情况下在 mysql 中运行代码吗

java - 调用 query.list() 后 Hibernate session 关闭