大数据量上传造成的写入冲突该怎么解决

piaopiao11 2016-09-28 09:39:32
我在一台客户端向数据库写入数据,每次大概15分钟,在这期间假如还有其他客户端向数据库相同的表写入就会报错,请问这种问题该怎么解决
...全文
483 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
attilax 2016-10-03
  • 打赏
  • 举报
回复
应该你的数据库是基于表级别锁的,粗粒度。。现在很多数据库都是行级别锁了,细粒度锁。。 Atitit.数据库锁的原理与技术点attilax总结 应该你的数据库是基于表级别锁的,粗粒度。。现在很多数据库默认都是行级别锁了,细粒度锁。 你试试不加lock锁,应该就采用默认的行级别锁即可。。现在很多数据库都默认可以多行插入的。 如果你的数据库不支持行级别锁。那就麻烦点了,需要俩个线程独立分表tab1,tabl2,然后一个线程做合并操作即可。。 1. 行级锁、表级锁、页级锁详细介绍_ 1 2. 对WRITE, 表锁定方法原理如下: 2 3. 行级锁定的优点缺点: 2 4. 上述三种锁的特性可大致归纳如下: 2 5. 共享锁 2)排他锁 3 6. 锁调度是如何实现的呢, 3 7. 参考资料 3 1. 行级锁、表级锁、页级锁详细介绍_ 页级:引擎 BDB。 表级:引擎 MyISAM , 理解为锁住整个表,可以同时读,写不行 行级:引擎 INNODB , 单独的一行记录加锁 表级,直接锁定整张表,在你锁定期间,其它进程无法对该表进行写操作。如果你是写锁,则其它进程则读也不允许 行级,,仅对指定的记录进行加锁,这样其它进程还是可以对同一个表中的其它记录进行操作。 页级,表级锁速度快,但冲突多,行级冲突少,但速度慢。所以取了折衷的页级,一次锁定相邻的一组记录。 2.对WRITE, 表锁定方法原理如下: 如果在表上没有锁,在它上面放一个写锁。 否则,把锁定请求放在写锁定队列中。 对READ,MySQL使用的锁定方法原理如下: 如果在表上没有写锁定,把一个读锁定放在它上面    否则,把锁请求放在读锁定队列中。 InnoDB使用行锁定,BDB使用页锁定。对于这两种存储引擎,都可能存在死锁。这是因为,在SQL语句处理期间,InnoDB自动获得行锁定和BDB获得页锁定,而不是在事务启动时获得。  3.行级锁定的优点缺点: ·         当在许多线程中访问不同的行时只存在少量锁定冲突。 ·         回滚时只有少量的更改。 ·         可以长时间锁定单一的行。 行级锁定的缺点: ·         比页级或表级锁定占用更多的内存。 ·         当在表的大部分中使用时,比页级或表级锁定速度慢,因为你必须获取更多的锁。 ·         如果你在大部分数据上经常进行GROUP BY操作或者必须经常扫描整个表,比其它锁定明显慢很多。 ·         用高级别锁定,通过支持不同的类型锁定,你也可以很容易地调节应用程序,因为其锁成本小于行级锁定。 4.上述三种锁的特性可大致归纳如下: 1) 表级锁:开销小,加锁快;不会出现死锁;锁定粒度大,发生锁冲突的概率最高,并发度最低。 2) 行级锁:开销大,加锁慢;会出现死锁;锁定粒度最小,发生锁冲突的概率最低,并发度也最高。 3) 页面锁:开销和加锁时间界于表锁和行锁之间;会出现死锁;锁定粒度界于表锁和行锁之间,并发度一般。      三种锁各有各的特点,若仅从锁的角度来说,表级锁更适合于以查询为主,只有少量按索引条件更新数据的应用,如WEB应用;行级锁更适合于有大量按索引条件并发更新少量不同数据,同时又有并发查询的应用,如一些在线事务处理(OLTP)系统 5.共享锁 2)排他锁 6.锁调度是如何实现的呢, 作者:: 绰号:老哇的爪子 ( 全名::Attilax Akbar Al Rapanui 阿提拉克斯 阿克巴 阿尔 拉帕努伊 )  汉字名:艾提拉(艾龙),   EMAIL:1466519819@qq.com 转载请注明来源: http://blog.csdn.net/attilax 7.参考资料 ORACLE六大锁模式级别越高影响越多 - Oracle数据库栏目 - 红黑联盟.html MySQL行级锁、表级锁、页级锁详细介绍_Mysql_脚本之家.htm
ylovep 2016-09-30
  • 打赏
  • 举报
回复
写数据会影响数据的一致性 难道写的数据一样 不然会报什么错?
piaopiao11 2016-09-29
  • 打赏
  • 举报
回复
我在每个事物开启加锁,锁住这张表, lock table "tablename" write insert into ******************** unlock tables; 但是这样也会有问题,800条数据作为一次事物插入,30W+的数据 开两个客户端同时写入的话,客户端A的一次事物结束,释放锁,客户端B不也能插入吗

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧