处理并发 Java 级别与 database/JPA 级别
Handle Concurrency Java level vs database/JPA level
场景:在任何类型的在线预订应用程序中,人们都有可能同时访问该应用程序。
因此,在该特定应用程序中可能存在并发问题。
问题:
在这种情况下,如果一个或多个人同时访问该应用程序,则存在并发问题。
为了解决并发问题,我们有两个解决方案
1) Java 客户端级别的并发性
2) 持久性级别的 JPA 乐观或悲观锁定
如果数据库包含 1000 万条或更多记录,那么哪一个是最佳解决方案?
性能问题和并发问题完全是两个不同的问题域。两者最好不要混用。
关于并发问题:
Java 并发或多线程 在在线预订系统中的用途可能非常有限。为避免 lost updates 的问题,您必须使用 JPA 乐观锁定(最好)或悲观锁定。这是因为如果您的应用程序的多个实例是 运行 并行(或多线程),那么使用 JVM 级线程安全技术就不可能避免丢失更新。
您可以参考以下教程:
这完全取决于应用程序。如果数据模型不复杂也不庞大,那么 JPA 乐观锁定是最佳解决方案。
Java和数据库并发各有优缺点。
数据库级别:
优点:
1) 更易于实施和维护。
缺点:
1)如果数据库中包含大量复杂的数据,则可能会导致死锁和超时。
Java 等级:
优点:
1) 更好的资源利用率
缺点:
1) 调试和测试非常复杂。
2) 可能发生死锁。
3) 难以在 Java 编程中实现。
4) 不良设计所涉及的风险因素。(饥饿)
5) 它不能从一个环境移植到另一个环境
参考:java Concurrency vs JPA concurrency
参考:
场景:在任何类型的在线预订应用程序中,人们都有可能同时访问该应用程序。 因此,在该特定应用程序中可能存在并发问题。
问题:
在这种情况下,如果一个或多个人同时访问该应用程序,则存在并发问题。
为了解决并发问题,我们有两个解决方案
1) Java 客户端级别的并发性
2) 持久性级别的 JPA 乐观或悲观锁定
如果数据库包含 1000 万条或更多记录,那么哪一个是最佳解决方案?
性能问题和并发问题完全是两个不同的问题域。两者最好不要混用。
关于并发问题: Java 并发或多线程 在在线预订系统中的用途可能非常有限。为避免 lost updates 的问题,您必须使用 JPA 乐观锁定(最好)或悲观锁定。这是因为如果您的应用程序的多个实例是 运行 并行(或多线程),那么使用 JVM 级线程安全技术就不可能避免丢失更新。
您可以参考以下教程:
这完全取决于应用程序。如果数据模型不复杂也不庞大,那么 JPA 乐观锁定是最佳解决方案。
Java和数据库并发各有优缺点。
数据库级别:
优点:
1) 更易于实施和维护。
缺点:
1)如果数据库中包含大量复杂的数据,则可能会导致死锁和超时。
Java 等级:
优点:
1) 更好的资源利用率
缺点:
1) 调试和测试非常复杂。
2) 可能发生死锁。
3) 难以在 Java 编程中实现。
4) 不良设计所涉及的风险因素。(饥饿)
5) 它不能从一个环境移植到另一个环境
参考:java Concurrency vs JPA concurrency
参考: