刚才看到一个要异步的,这次要消息队列我不知道不能并发是个什么概念其实做好事务处理的话,再“并发"都没事,其实所谓的并发,执行的时候也是顺序执行的
因为对于临界资源,再并发,对临界资源的占用也有先后,数据库本身就会对其(临界资源)加锁,
随便你并发,并发进程访问临界资源的时候,无法锁定资源,还是需要等待,不还是相当于顺序执行的置于C#的多线程对全局资源的锁定
不管是Lock还是Monitor,都是锁定一个(obj)对象,防止多线程同时访问全局资源
而数据库的并发,临界资源的抢占也一样,都是类似锁机制

解决方案 »

  1.   


    没你想的那么负责,写到一个事务中,如果非要队列化执行的话,可以设置事务的隔离界别为serializble
      

  2.   


    是啊。。就是列队啊金额操作。。进行列队执行。。就是没有相关资料学习。。能提供点吗。。没什么特殊的:
    建一个 操作队列表所有需要操作的进程、线程,都并行地往里只增不删改地插入记录,字段为自己需要做的事情的所有信息单一的进程循环读取此表的每一条未作的记录id(select top 1 fID from tblog where fDone=0 order by fID desc),
    根据此记录的字段,执行之,
    然后update tblog fDone=1 where fID=刚才的id
      

  3.   


    是啊。。就是列队啊金额操作。。进行列队执行。。就是没有相关资料学习。。能提供点吗。。没什么特殊的:
    建一个 操作队列表所有需要操作的进程、线程,都并行地往里只增不删改地插入记录,字段为自己需要做的事情的所有信息单一的进程循环读取此表的每一条未作的记录id(select top 1 fID from tblog where fDone=0 order by fID desc),
    根据此记录的字段,执行之,
    然后update tblog fDone=1 where fID=刚才的id
    听说。。用数据库进行列队。。不明智。。
      

  4.   


    是啊。。就是列队啊金额操作。。进行列队执行。。就是没有相关资料学习。。能提供点吗。。没什么特殊的:
    建一个 操作队列表所有需要操作的进程、线程,都并行地往里只增不删改地插入记录,字段为自己需要做的事情的所有信息单一的进程循环读取此表的每一条未作的记录id(select top 1 fID from tblog where fDone=0 order by fID desc),
    根据此记录的字段,执行之,
    然后update tblog fDone=1 where fID=刚才的id
    听说。。用数据库进行列队。。不明智。。如果性能要求极高或有专门的队列中间件,是不该用数据库做队列
    但是,既然都只要求串行了,性能显然不是要求很高了
      

  5.   


    是啊。。就是列队啊金额操作。。进行列队执行。。就是没有相关资料学习。。能提供点吗。。没什么特殊的:
    建一个 操作队列表所有需要操作的进程、线程,都并行地往里只增不删改地插入记录,字段为自己需要做的事情的所有信息单一的进程循环读取此表的每一条未作的记录id(select top 1 fID from tblog where fDone=0 order by fID desc),
    根据此记录的字段,执行之,
    然后update tblog fDone=1 where fID=刚才的id
    听说。。用数据库进行列队。。不明智。。如果性能要求极高或有专门的队列中间件,是不该用数据库做队列
    但是,既然都只要求串行了,性能显然不是要求很高了不是知道。。有什么队列中间件推荐昵。。
      

  6.   


    是啊。。就是列队啊金额操作。。进行列队执行。。就是没有相关资料学习。。能提供点吗。。没什么特殊的:
    建一个 操作队列表所有需要操作的进程、线程,都并行地往里只增不删改地插入记录,字段为自己需要做的事情的所有信息单一的进程循环读取此表的每一条未作的记录id(select top 1 fID from tblog where fDone=0 order by fID desc),
    根据此记录的字段,执行之,
    然后update tblog fDone=1 where fID=刚才的id
    听说。。用数据库进行列队。。不明智。。如果性能要求极高或有专门的队列中间件,是不该用数据库做队列
    但是,既然都只要求串行了,性能显然不是要求很高了不是知道。。有什么队列中间件推荐昵。。队列中间件是专门搞的
    有些OS也自带;常见的有MQ;国产的有东方通的。问题是,如果用数据库了,再与它们交互,可能反而不同全部用数据库
      

  7.   


    SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED --指定语句可以读取已由其他事务修改但尚未提交的行
    SET TRANSACTION ISOLATION LEVEL READ COMMITTED; --指定语句不能读取已由其他事务修改但尚未提交的数据。 这样可以避免脏读。
    SET TRANSACTION ISOLATION LEVEL REPEATABLE READ --指定语句不能读取已由其他事务修改但尚未提交的行
    SET TRANSACTION ISOLATION LEVEL SNAPSHOT;  
    SET TRANSACTION ISOLATION LEVEL SERIALIZABLE; --最高级别的事务级别--请楼主 参才事务级别
      

  8.   


    是啊。。就是列队啊金额操作。。进行列队执行。。就是没有相关资料学习。。能提供点吗。。没什么特殊的:
    建一个 操作队列表所有需要操作的进程、线程,都并行地往里只增不删改地插入记录,字段为自己需要做的事情的所有信息单一的进程循环读取此表的每一条未作的记录id(select top 1 fID from tblog where fDone=0 order by fID desc),
    根据此记录的字段,执行之,
    然后update tblog fDone=1 where fID=刚才的id
    听说。。用数据库进行列队。。不明智。。如果性能要求极高或有专门的队列中间件,是不该用数据库做队列
    但是,既然都只要求串行了,性能显然不是要求很高了不是知道。。有什么队列中间件推荐昵。。队列中间件是专门搞的
    有些OS也自带;常见的有MQ;国产的有东方通的。问题是,如果用数据库了,再与它们交互,可能反而不同全部用数据库是的。。主要。。我还是要支持事务。。就是这个消息队列的状态,SQL语句一起执行。。不要语句执行了,消息列队状态没改变。。
      

  9.   


    使用锁效果最差。。第一,高峰期,最容易掉失用户数据。。按我的做法,基本不会影响
    插入是并发,只是生成id会冲突,但是数据库已经很好解决了
    读取和更新,都是单线程、锁单记录,与插入无关
    其它事务等级都有并发。。
    记录 任务 不应该涉及其它事务
    执行任务才涉及,而执行是由一个线程串行执行的
    不对。。执行是一个线程执行。。可以是。。是交叉执行。。不是一个事务执行,然后顺序一条一条做。。也是,一个事务A,A的内容,一个B 事务,B的内容,然后一个A事务A的内容,一个B事务,B的内容。。是交叉执行。。
      

  10.   


    这么多人 都说了这么清楚了,你当大家都不是人?!【不对。。执行是一个线程执行。。可以是。。是交叉执行。。不是一个事务执行,然后顺序一条一条做。。
    也是,一个事务A,A的内容,一个B 事务,B的内容,然后一个A事务A的内容,一个B事务,B的内容。。是交叉执行。。】
    这话是什么意思?你是90后吗?
      

  11.   


    这么多人 都说了这么清楚了,你当大家都不是人?!【不对。。执行是一个线程执行。。可以是。。是交叉执行。。不是一个事务执行,然后顺序一条一条做。。
    也是,一个事务A,A的内容,一个B 事务,B的内容,然后一个A事务A的内容,一个B事务,B的内容。。是交叉执行。。】
    这话是什么意思?你是90后吗?不是。。就是说,事务有两种,一种是串行执行,一个是并发执行。。
      

  12.   


    这么多人 都说了这么清楚了,你当大家都不是人?!【不对。。执行是一个线程执行。。可以是。。是交叉执行。。不是一个事务执行,然后顺序一条一条做。。
    也是,一个事务A,A的内容,一个B 事务,B的内容,然后一个A事务A的内容,一个B事务,B的内容。。是交叉执行。。】
    这话是什么意思?你是90后吗?
    这个就是并发执行的情况。。