找回密码
 立即注册

QQ登录

只需一步,快速开始

LukeLiu
超级版主   /  发表于:2020-1-21 16:49  /   查看:5908  /  回复:0
本帖最后由 LukeLiu 于 2020-4-27 16:59 编辑

数据库并发控制是个啥?
很熟悉的一对小情侣场景,女主在买买买的时候遇到了情况:
图解并发2.png
这个故事里,鸡贼的男主机制的用技术知识保护了自己的钱包。
说实话,关于活字格并发策略的说明,活字格的帮助文档不要详细太多,请看:
视频说明文档说明为什么需要并发控制呢?
并发控制指当多个用户同时更新运行时,用于保护数据库完整性的技术。其目的是保证一个用户的操作不会对另一个用户的使用产生不合理的影响。并发机制不正确可能导致脏读、幻读和不可重复读等此类问题。

想象一名格友,开发了一个活动的报名系统,场景是连接了外联数据库。
哝,看这里:
image.png292999572.png
若这是关乎公司品牌的一个商业性质的大活动,之前查看后台数据是500人,市场的同事就按照这个数字展开各方面的准备工作。
几天之后,活动开始了,实际上到场来了700人,全场黑脸状,肿么办?
之后的故事,应该是开发这个系统的同学要被拿来祭天了,一首凉凉送给他。
讲真,哪天因为没做好并发控制而被老板安排领盒饭走人的同志,我们只能为优秀的你深深惋惜,当初有这样一篇帖子,你为什么不好好珍惜~~

如何设定好外联库的并发控制

如果咱们使用的数据库是Mysql或者SqlServer(Oracle的方式参考上面贴出来的帮助说明),开启外联库的并发控制的操作很简单,当完成外联库的连接后,在活字格设计器里这样一步操作:
image.png868666686.png
我们可以使用数据库的客户端查看外联库发生了什么变化:
MySql
image.png250067748.png
Sqlserver
image.png89639891.png

我们并没有手动做任何复杂的设置,活字格就为我们安排好了这些数据结构,保证了并发控制策略的正常。
效果图:
外联库的并发控制.gif

当外联库的并发控制遇到了问题
如果我们所使用的外联数据库的数据表,之前已经存在了timestamp类型的列,如果不做处理,就会产生冲突——活字格想用这timestamp列做并发控制,而你却用它存自己的业务数据。
这不,一位格友分享了这样一份报错截图:
image.png301156920.png
(背景:用户连接的Mysql数据库,原数据表有一列为timestamp类型)
我们从开发小哥哥那里,了解到产品并发控制深层的策略:
对于连接的外联库,活字格会认为第一个timestamp类型的列,用来做ROWVERSION列。如果自身的业务已经有用到timestamp列,要保证它置于ROWVERSION列的后面,并且,自身开发的系统里,不涉及手动修改ROWVERSION列

好呗,这位格友调整了外联数据里表格中的timestamp列的顺序,把自己用的timestamp类型的列,放到了FGC_rowversion的后面:
image.png328015746.png
完成调整后,这位格友的系统并发控制就正常了。

总结

这篇帖子,我们一起了解了:
  • 什么是并发控制策略
  • 如何在活字格里实现外联库的并发控制
  • 以及当外联库遇到了并发控制问题的简单处理方法

当我们使用活字格开发系统,涉及到多人共同修改数据的场景,及时的考虑到并发控制策略对于业务健壮性的保障是很有必要的。









0 个回复

您需要登录后才可以回帖 登录 | 立即注册
返回顶部