我有一个带转移表的应用程序,用户可以将钱从一个人转移到另一个人。我正在使用带有hibernate的spring MVC来创建Web服务。我理解当多个人通过同一个Web服务发送请求时,调度程序servlet将创建多个线程。现在每个线程都会在控制器类中定义各自的web方法。现在我有一个daoImplementation类,我已经使用控制器类自动装配了。现在每个请求线程将使用自动装配的daoImplementation对象来访问daoImplementation类方法。 现在我的第一个怀疑 - 一个daoImplementation对象(它的单例)如何处理多个请求?如果假设有数千人发送需要访问daoImplementation类方法的请求,每个请求需要10秒,那么第1000个请求的延迟将是10000秒。
现在,在该请求进入daoImplementation方法之后将进行数据库工作。在daoImplementation类中我已经自动装配了SessionFactory,它也是单例和线程安全的(这意味着每个请求它将创建一个会话线程)。在我的方法中我正在创建会话对象来进行我的交易。 现在我的第二个怀疑 - 假设有数千人试图在daoImplementation类中访问相同的方法,因此将创建1000个会话对象。这千个对象如何与数据库交互,以便每个请求中没有太多延迟以及数据库如何保持一致性? 会话是线程安全的,它将如何影响我的系统。
现在我的第三个怀疑 - 对于转移,首先我需要获取发件人帐户中的当前金额,然后检查它是否小于他想要转移到收款人帐户的金额,然后从发件人帐户中扣除那么多金额,然后在收件人中添加那么多金额帐户,然后关闭session.Being初学者,我会写这样的代码 -
angular-material textarea
这是进行数据库调用的正确方法吗? 请尝试以简化的方式解释 - 提前谢谢。
答案 0 :(得分:1)
一个daoImplementation对象(它的单例)如何处理多个请求?如果假设有数千人发送需要访问daoImplementation类方法的请求,每个请求需要10秒,那么第1000个请求的延迟将是10000秒。
不,因为线程的原理是它们并发执行。 DAO方法不应该同步,因此线程会愉快地同时调用您的DAO,就像它们对控制器一样。
在daoImplementation类中我有自动装配的SessionFactory,它也是单例和线程安全的(这意味着每个请求它将创建一个会话线程)
没有。这只是意味着所有线程可以同时使用相同的SessionFactory实例而没有任何问题。不会创建其他线程。
假设有数千人试图在daoImplementation类中访问相同的方法,因此将创建1000个会话对象。这千个对象如何与数据库交互,以便每个请求中没有太多延迟以及数据库如何保持一致性?会话是线程安全的,它将如何影响我的系统。
数据库使用其ACID属性来确保所有事务都是隔离的,并且可以并行运行。会话不是线程安全的,但这不是问题,因为每个线程使用自己的会话,而不是与其他线程共享。
现在,关于你的代码,不,它没有做正确的事情: