处理大批量的并发

如何处理大量数据并发操作

文件缓存,数据库缓存,优化sql,数据分流,数据库表的横向和纵向划分,优化代码结构!

锁述的概 
一. 为什么要引入锁 
多个用户同时对数据库的并发操作时会带来以下数据不一致的问题:

丢失更新 
A,B两个用户读同一数据并进行修改,其中一个用户的修改结果破坏了另一个修改的结果,比如订票系统

脏读 
A用户修改了数据,随后B用户又读出该数据,但A用户因为某些原因取消了对数据的修改,数据恢复原值,此时B得到的数据就与数据库内的数据产生了不一致

不可重复读 
A用户读取数据,随后B用户读出该数据并修改,此时A用户再读取数据时发现前后两次的值不一致

并发控制的主要方法是封锁,锁就是在一段时间内禁止用户做某些操作以避免产生数据不一致

我在博客堂上也看到不少有关并发控制的文章,我一直是推荐使用时间戳来解决的。 
 比如我们在SQL Server中的表中定义一个字段为timestamp类型的字段ts,这个字段的值不需要我们进行控制的。 
 在Insert与Update时,数据库会自己进行ts值的更新,因此我们只要在Update时使用: 
 Update xxx where [email protected] and [email protected] 就可以了,根本不用考虑ts里的值更新。

Delete时也最好进行一下判断,用这种方式是可以控制数据并发操作的。 
只需要在Update与Delete时,判断"影响条数"就可以知道更新是否成功。

这一点我想非常方便,但不是所有的数据库都支持timestampr的,如在Access里没有timestamp字段,我也不知道其他的数据库是否都有类似的timestamp类型,不管怎么样,我觉得我们不能完全信赖于数据库的控制,而应该采用自设的控制机制,这样可以适应系统的数据库移值,下面我就介绍一下,在.NET下如何实现,自设的时间戳控制。

我们也同样建一个字段ts,定义为Varchar,长度在20以上即可,而且不允许为null,这样比较合适。

我们应该采用什么机制来生成随时的或者说不可能会产生一样的值,我推荐的是DateTime.Now.Ticks,这是一个12位的数字,由于在Update等更新时,数据库会自动进行锁定,所以不可能会在同一时间会有两个一样的操作执行,因此这就可以避免Ticks产生相同的值了。

或者也可以采用Guid值,也可以产生唯一值,但我觉得Guid值太大,可能会影响效率。

那好,在我们Insert时:Insert xxxx ts=‘221283747584‘ where key=‘1‘ 
 在Update时 Update xx set xxx ts=‘39383848593839‘ where key=‘1‘ and ts=‘111111111111‘ //假设取到的原值为‘11111111111‘  
 Delete类似上面的。 
  
 我们判断影响条数,如果为0则说明更新不成功。

我相信上面的方法是简单可行的。

时间: 2024-10-31 22:21:13

处理大批量的并发的相关文章

软件架构(2):同步与异步问题

一.       基本概念 一个大型的程序系统常常是由很多不能功能模块组成的.程序系统运行时不同功能模块要按一定顺序执行,以协同完成一件任务.功能模块协作运行完成一件任务存在同步和异步两种方式.如果在某一时间段,这个程序系统的所有功能模块都在为完成相同的一件任务而服务,某一个功能模块在完成一件任务的子任务后,需要等待其他功能模块完成子任务,这样只有当全部功能模块按顺序完成一件任务后,程序系统才能接收下一个任务,功能模块是串行运行,这称之为同步模式.反之,在某一时间段,这个程序系统的不同功能模块可

软件架构(二):同步与异步问题

一.       基本概念 一个大型的程序系统常常是由很多不能功能模块组成的.程序系统运行时不同功能模块要按一定顺序执行,以协同完成一件任务.功能模块协作运行完成一件任务存在同步和异步两种方式.如果在某一时间段,这个程序系统的所有功能模块都在为完成相同的一件任务而服务,某一个功能模块在完成一件任务的子任务后,需要等待其他功能模块完成子任务,这样只有当全部功能模块按顺序完成一件任务后,程序系统才能接收下一个任务,功能模块是串行运行,这称之为同步模式.反之,在某一时间段,这个程序系统的不同功能模块可

DataStage 的优化原则

DataStage Job优化指导原则之一:算法的优化.        任何程序的优化,第一点首先都是算法的优化.当然这一点并不仅仅局限于计算机程序的优化,实际生活中也处处可以体现这一点.条条大路通罗马,完成任何一件事,也同样有很多种方法.而方法当然有优有劣,有低效有高效.所以想提高完成任何一件事的效率,首先就是做事方法的优化.体现在计算机程序中,也就是算法的优化.也只有算法的优化,才可能使做事的效率有十倍.百倍,甚至上万倍的提升.        但是是在实际的Job开发过程中,绝大部分人都会忽

MySQL服务器SWAP使用率高导致db很慢很卡

环境介绍: CentOS:6.X MySQL版本:5.5.40 故障原因分析: 物理内存是16G,swap是4G.此时MySQL本身已经占用了14G物理内存,而同时其他应用程序或者系统进程又需要3G内存,这时候操作系统就可能把MySQL所拥有的一部分地址空间映射到swap上去,有可能产生swap的操作事件: 产生的主要原因: 1.mysqldump以及mysql import很大的库或者表: 2.数据库层大批量的并发操作的io writer和io read操作: 3.在OS层copy一个大文件,

mysql一直使用swap,导致swap空间用尽变卡

大致操作步骤: 1.调整内核参数,/proc/sys/vm/swapiness 2.调整mysql参数,innodb_flush_method 3.加mysql配置参数memlock,将mysql锁定在内存重防止被swapping out 4.手动释放swap空间,swapoff /xx/xx  和swapon /xx/xx ==================================================== 避免将分配给MySQL的地址空间映射到swap上.对于频繁进行读写

智慧农业物联网—解决方案

智慧农业物联网—解决方案 一.方案背景 随着国家层面对土地集约化经营程度的不断加深,物联网概念在农业生产管理环节内的不断深入,规模化.科学化.数据化的种植方式已经愈发成为行业趋势.对于传统大规模种植而言,大量人力投入.工作效率低下.过多的资源浪费以及不可避免的人为误差与安全隐患已经成为传统种植模式的显著弊端,已经成为农业发展进程中的绊脚石. 为了实现能耗的降低,科学的种植,系统化.规模化的精细化管理,建立一个生产与管理的快速信息通道,建立统一化的综合管控平台尤为关键.通过实时掌握植物的生长环境信

【华为云技术分享】大数据容器化,头部玩家尝到了甜头

[摘要] 大数据容器化,大势所趋.头部玩家在进行大数据容器化后,尝到了甜头? 大数据的需求热度,从来都是这个时代的浪尖.然而由于大数据系统的复杂性,一度导致业界大数据已死的各种声音不断.尤其是当MapR被HPE收购,Cloudera公司股票持续跌成狗,使得这种声音进一步放大.其实,大数据的需求一直在,只是传统的大数据实现系统需要考虑重新构建.而容器依靠其自身的标准化,一次构建,随处运行的能力,使得非常适合大数据系统的构建和管理.容器技术当前正是那只火遍全球的当红辣子鸡. 1 华为云BigData

MES案例研究1 - 大表并发查询

某工厂是生产数码产品金属外壳的,每天近100万件的产量,随着圣诞节的临近,客户订单大量增加,但是生产却跟不上,经初步分析,发现问题发生在激光雕刻二维码的工位,由于镭雕机从MES取号的时间太长,造成生产的瓶颈. 该厂MES的主要功能是做生产追溯,包括:生产过程记录.关键工位检查.质量问题收集等. 在镭雕工位,客户端程序要从MES中查询得到对应机型的最小序列号,然后传给镭雕机. 查询SQL的核心逻辑为: SELECT MIN(serial_number) FROM t_product_history

greenlet:轻量级的并发编程

1 关于greenlet greelet指的是使用一个任务调度器和一些生成器或者协程实现协作式用户空间多线程的一种伪并发机制,即所谓的微线程. greelet机制的主要思想是:生成器函数或者协程函数中的yield语句挂起函数的执行,直到稍后使用next()或send()操作进行恢复为止.可以使用一个调度器循环在一组生成器函数之间协作多个任务. 网络框架的几种基本的网络I/O模型: 阻塞式单线程:这是最基本的I/O模型,只有在处理完一个请求之后才会处理下一个请求.它的缺点是效能差,如果有请求阻塞住