集群中多线程如何处理表中的数据的问题

1)场景:

网站向消息平台发送消息,消息平台将其保单到数据库中;

后台有多台服务器进行集群,这种情况下就会出现多线程同时获取到同一条消息进行处理的问题?如何解决:

2)具体方案,如下的sql即可解决。

//定义一张qtz_locks表,用来做控制锁使用。

//for update:代表给你查询出的记录添加锁

//nowait: 代表如果获取不到数据不等待直接抛出异常退出

select * from qrtz_locks_ex where lock_name=‘CALENDAR_ACCESS‘ and group_name=‘EPCISNBA‘for update nowait;

select * from proddata.marketproduct_info mi where mi.marketproduct_code=‘MP02000138‘and mi.status=‘1‘;

1)在你处理的代码中首先执行第一条sql,获取控制锁;然后再执行你的查询,进行状态的修改,处理完成后在释放控制锁;

2)这样,在你进行操作前,都必须获取控制锁,才能继续操作,否则就中断,抛出异常。这样就可以做到同一条件记录只能被一条线程所操作。

时间: 2024-10-12 14:37:13

集群中多线程如何处理表中的数据的问题的相关文章

建立HBase的集群和HDInsight在Hadoop中使用Hive来查询它们

在本教程中,您将学习如何创建和查询HDInsight使用HiveHadoop的HBase的表.下列步骤描述:?如何使用提供在Azure门户的HBase的集群.?如何启用和使用RDP访问HBase的外壳,并使用HBase的外壳创建HBase的示例表,添加行,然后列出表中的行.?如何创建一个Hive表映射到一个现有的HBase的表,使用HiveQL查询数据在HBase的表.?如何使用Microsoft HBase的REST客户端库.NET创建一个新的HBase的表,列出您帐户中的HBase的表,以及

函数WS_UPLOAD 功能﹕将TXT文件转换成SAP中的内表定义的数据表格文件

1 . 函数WS_UPLOAD      功能﹕将TXT文件转换成SAP中的内表定义的数据表格文件     注意﹕1 函数将按参数 data_tab 的实际参数(假设为 table1) table1 定                                                                              义的各个字段的长度来依次将TXT文件间隔开﹐并依次将对应的值付给table1的             字段,table中的各个字段必须为C

Delphi中多线程用消息实现VCL数据同步显示

Delphi中多线程用消息实现VCL数据同步显示 Lanno Ckeeke 2006-5-12 概述: delphi中严格区分主线程和子主线程,主线程负责GUI的更新,子线程负责数据运算,当数据运行完毕后,子线程可以向主线程式发送消息,以便通知其将VCL中的数据更新. 实现: 关键在于消息的发送及接收.在消息结构Tmessage中wParam和lParam类型为Longint,而指针类型也定义为Longint,可以通过此指针来传递自己所感兴趣的数据.如传递字符数组: 数组定义: const MA

在 SQL Server 中查询EXCEL 表中的数据遇到的各种问题

原文:在 SQL Server 中查询EXCEL 表中的数据遇到的各种问题 SELECT * FROM OpenDataSource( 'Microsoft.Jet.OLEDB.4.0','Data Source="D:\KK.xls";User ID=Admin;Password=;Extended properties=Excel 5.0')...[Sheet1$] 问题: 消息 15281,级别 16,状态 1,第 1 行 SQL Server 阻止了对组件 'Ad Hoc Di

用命令从mysql中导出/导入表结构及数据

在命令行下mysql的数据导出有个很好用命令mysqldump,它的参数有一大把,可以这样查看:mysqldump最常用的:mysqldump -uroot -pmysql databasefoo table1 table2 > foo.sql这样就可以将数据库databasefoo的表table1,table2以sql形式导入foo.sql中,其中-uroot参数表示访问数据库的用户名是root,如果有密码还需要加上-p参数Eg: C:\Users\jack> mysqldump -uroo

Sql_Server中如何判断表中某列是否存在

/*判断表AA中是否存在AA_ID这一列,如果不存在,则新增*/ IF NOT EXISTS (SELECT 1 FROM syscolumns INNER JOIN sysobjects ON sysobjects.id = syscolumns.id WHERE syscolumns.name = 'AA_ID' AND sysobjects.name = 'AA') ALTER TABLE AA ADD AA_ID VARCHAR(30) NULL GO Sql_Server中如何判断表中

(转)查询A、B表中,A表中存在B表不存在的数据

(转)A.B两表,找出ID字段中,存在A表,但是不存在B表的数据.A表总共13w数据,去重后大约3W条数据,B表有2W条数据,且B表的ID字段有索引. 方法一 使用 not in ,容易理解,效率低  ~执行时间为:1.395秒~ (第一种方法亲测可用) 1 select distinct A.ID from A where A.ID not in (select ID from B) 方法二 使用 left join...on... , "B.ID isnull" 表示左连接之后在B

Oracle中查询一个表中字段(列)个数

如果一个表中有很多的字段,而我们想要知道这个表中的字段个数,如果使用如下方式一个一个数,则显得很麻烦 Oracle中可以使用如下sql来查询字段(列)个数 select count(*) from user_tab_columns where table_name=upper('表名') 或者 select max(column_id) from user_tab_columns where table_name=upper('表名') 作者:itmyhome 链接:http://blog.cs

Activiti 中的ACT_RU_TASK表中的EXECUTION_ID和PROC_INST_ID区别

当你的流程图为单向的时候则EXECUTION_ID和PROC_INST_ID是一样的 这种的流程图的话是一样的 这种的话就到支流是不一样的由于在节点处进行了分支,导致这个有三个方案.导致里面的分支分离然后再次在EXECTION中建立新的实例 创建了新的实例 EXECUTION_ID是现在有分支和聚合的时候会重新再EXECTION表中建立新的进程实例 而在PROC_INST_ID是主线程的ID