免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 942 | 回复: 4
打印 上一主题 下一主题

一次关于知识储备的思考 [复制链接]

论坛徽章:
146
2015年亚洲杯之日本
日期:2015-04-28 13:32:012015年亚洲杯之朝鲜
日期:2015-05-06 10:16:442015年亚洲杯之日本
日期:2015-05-06 10:21:342015年亚洲杯纪念徽章
日期:2015-05-13 17:16:442015亚冠之北京国安
日期:2015-05-13 17:18:292015亚冠之鹿岛鹿角
日期:2015-05-13 17:19:062015亚冠之德黑兰石油
日期:2015-05-27 16:47:402015亚冠之塔什干棉农
日期:2015-05-28 15:24:122015亚冠之卡尔希纳萨夫
日期:2015-06-01 13:52:392015亚冠之柏斯波利斯
日期:2015-06-04 17:37:292015亚冠之阿尔纳斯尔
日期:2015-06-16 11:31:202015亚冠之塔什干火车头
日期:2015-06-23 10:12:33
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2016-10-09 11:29 |只看该作者 |倒序浏览

事情的经过是这样的:
一个夏日的午后,我在啪啪啪的敲代码,正爽着呢,老大在背后拍了拍我的肩膀,说让我写个功能。
我说啥功能,他说:“operate 模块那边每次收到文件都会给你发一条消息。然后对消息进行计数,每隔一段时间,你把这个计数写入一次数据库。”

我说为什么。
老大说对文件数量进行计数。

我说为什么不让他们直接去更新数据库。
他说 operate 那边是多线程,数据量比较大的时候,同时更新数据库会出问题。所以需要通过消息队列,把数据都汇总到你这儿,你来统一更新这个数据。

大概意思我听明白了,我说行,我做。
意思应该是这样:operate 那边是多线程处理数据,并且是多个线程共同维护同一个数据库的某个统计字段。在数据更新比较频繁的时候,数据会出现错误。

我猜应该是同步没做好。但是为什么没做好,我不知道,部门多了,产品复杂了,什么情况都可能出现。老大让这么做,那就有他的道理,既然是和其它部门商议后的结果,这个方案肯定就确定了。

和老大商量后,我的工作是这样的:创建一个线程出来,获取数据库中统计字段的当前值,监听发送给我的消息,然后累加这个值,每隔一段时间(暂定5秒)更新一次这个值。
开始写代码的时候在想,为什么要把这个数据取出来,然后再加上一个数字,然后再放回去呢?为什么把更新一个数字的过程分成三个部分呢?这多麻烦啊。我印象中好像在《深入浅出MySQL》这本书里看到过,mysql 中可以写表达式。不过平时没怎么用过,就去一个MySQL的QQ群里咨询了下,网友们都很热情,在逗图和吹牛逼的时候还顺便回答了我这个问题。
如果我们要更新的字段是 sum ,那么就可以直接写“update table_name set sum = sum + 5 where id = 1;”就可以了。然后我 就把这个情况告诉老大了,老大说你测试下这个方式是不是线程安全的,还有测试下多线程下的效率。
我写了个脚本,测试了下,在我们的开发环境下是线程安全的,效率也让老大看了,他觉得还可以接受。然后,然后他就找 operate 部扯皮去了。
因为这样更新数据,是线程安全的,所以当 operate 模块是多线程的时候,使用这个方式更新数据,就不存在线程同步问题了。也就没必要让我再拉个统计线程出来了。

老大说更新数据库的部分让 operate 来做,operate 的人肯定是不情愿啦。他们说,既然已经这么定了,就得这么做,我们的都快收尾了,你又让我们改这个。 老大说这么做太复杂了,你们直接更新会更简单。他们反问我老大,说:“既然这么做简单,你干嘛一开始要那么搞呢?”。老大愣了两秒钟,很愤怒的说:“当时没人告诉我可以这么做啊!”。
后来两个部门又开了个会,经过一天的扯皮,更新统计数据的部分,成功推给 operate 部去做了。后来我发现, operate 的东西其实并没有收尾。

嗯,故事讲完了,说说我的感受。
首先,在听到老大的愤怒后,我第一个想到的词是,知识储备。
至少从我刚刚经历的这个事情来看,知识储备是非常重要的事。虽然就是一个SQL语句的事儿,可是不知道这个用法的话,就真的会把东西弄复杂了。所以平时没事的时候还真应该多读书,多学习,增加自己的知识储备,指不定在哪天就用到了呢。

第二点就是对事物审慎的态度。
在我告诉老大,我发现了一条真理的时候,他没有让我直接去用,而是让我检验这个真理的安全性和性能如何。
这个也是很重要的。估计要是我的话,直接就用上了,万一真的是性能达不到或者不支持线程安全的话,前面的工作估计也白做了。所以在接触一个新东西的时候,应该先全方位的考察下这个东西是不是真的能解决眼下的问题,并且不会带来新的问题。要是不能的话,那就宁愿不要用。

同步发表于:http://www.cnblogs.com/fengbohello/p/5938529.html

作者:风波

论坛徽章:
43
15-16赛季CBA联赛之上海
日期:2020-11-04 09:36:5515-16赛季CBA联赛之北控
日期:2018-10-29 18:20:3415-16赛季CBA联赛之北京
日期:2018-10-06 21:39:5715-16赛季CBA联赛之天津
日期:2018-08-09 10:30:41ChinaUnix元老
日期:2018-08-03 17:26:00黑曼巴
日期:2018-07-13 09:53:5415-16赛季CBA联赛之吉林
日期:2018-03-30 12:58:4315-16赛季CBA联赛之佛山
日期:2017-12-01 10:26:3815-16赛季CBA联赛之上海
日期:2017-11-14 09:20:5015-16赛季CBA联赛之江苏
日期:2019-02-20 09:53:3319周年集字徽章-庆
日期:2019-08-27 13:23:2515-16赛季CBA联赛之广夏
日期:2019-09-03 18:29:06
2 [报告]
发表于 2016-10-09 11:52 |只看该作者
从另一个方面看问题。

1:知识储备。知识储备了,如果不用很容易忘的。
2:对事物审慎的态度,是看这个东西的重要性了。

论坛徽章:
6
2015年辞旧岁徽章
日期:2015-03-05 16:13:092015年迎新春徽章
日期:2015-03-05 16:13:092015小元宵徽章
日期:2015-03-06 15:58:1815-16赛季CBA联赛之浙江
日期:2016-11-05 14:38:4115-16赛季CBA联赛之新疆
日期:2016-11-11 18:38:06
3 [报告]
发表于 2016-10-09 11:56 |只看该作者
大胆假设,小心求证,不迷信权威

论坛徽章:
0
4 [报告]
发表于 2016-10-11 20:35 |只看该作者
很好的文章

论坛徽章:
324
射手座
日期:2013-08-23 12:04:38射手座
日期:2013-08-23 16:18:12未羊
日期:2013-08-30 14:33:15水瓶座
日期:2013-09-02 16:44:31摩羯座
日期:2013-09-25 09:33:52双子座
日期:2013-09-26 12:21:10金牛座
日期:2013-10-14 09:08:49申猴
日期:2013-10-16 13:09:43子鼠
日期:2013-10-17 23:23:19射手座
日期:2013-10-18 13:00:27金牛座
日期:2013-10-18 15:47:57午马
日期:2013-10-18 21:43:38
5 [报告]
发表于 2016-10-11 20:44 |只看该作者
老大是外行
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP