java在应用程序级别同步数据库查询

时间:2015-03-21 18:13:00

标签: java sql-server database oracle concurrency

我需要在多线程应用程序(非分布式)中的一个表上执行数据库查询(SELECT,INSERT)。这是一个场景:

  1. DB SELECT数据
  2. 计算数据
  3. DB根据计算INSERT新数据
  4. 每一行必须是唯一的,因此线程必须逐个执行此方案。解决方案必须适用于各种数据库服务器(Oracle,MSSQL,Postgres)

    到目前为止,我有两种方法。 一个是数据库级别。我使用锁定表(ORACLE)或行(MSSQL)。它工作正常,但每个db我都不喜欢它的样板代码。

    MSSQL:SELECT data ... with(xlock,ROWLOCK)
    ORACLE:锁定表TBL1处于独占模式... SELECT data ...

    第二种方法是在应用程序级别,我有

    
        private static Object lock = new Object();
        void execute()
        {
         synchronized(lock){
           //perform DB SELECT data
            calculate(data);// eg.: data++;
           //perform DB INSERT data
         }
        }
    
    

    它只是工作,但我想知道这第二种方法是否公平/正确吗?

1 个答案:

答案 0 :(得分:0)

它会正常工作。我的意思是,如果只是看它,它是否比数据库快很难说。你应该运行一些基准测试!在我看来,你应该使用数据库方法,如果其他应用程序需要运行相同的代码,在多应用程序级别,同步方式将无法正常工作。