2016年5月14日星期六

sql内置序列号对象SequenceNumber

最近有一个需求,就是对不同类型的用户生成不同区间段的8位邀请码,而且邀请码是纯数字格式,并保存到对应的用户表中,其实使用代码实现的逻辑是:
  1. 根据用户类型找到当前最大的邀请码;
  2. 将当前最大的邀请码+1得到新生成的邀请码;
  3. 保存到数据库中;
但是这样不仅逻辑麻烦,性能差,而且需要考虑到并发量大时多线程的处理,数据库中的SequenceNumber就更适合我们这种情景

SequenceNumber在sql server中是2012版本才引入的,官方文档的说法是有以下几种用途:
  • The application requires a number before the insert into the table is made.
  • The application requires sharing a single series of numbers between multiple tables or multiple columns within a table.
  • The application must restart the number series when a specified number is reached. For example, after assigning values 1 through 10, the application starts assigning values 1 through 10 again.
  • The application requires sequence values to be sorted by another field. The NEXT VALUE FOR function can apply the OVER clause to the function call. The OVER clause guarantees that the values returned are generated in the order of the OVER clause’s ORDER BY clause.
  • An application requires multiple numbers to be assigned at the same time. For example, an application needs to reserve five sequential numbers. Requesting identity values could result in gaps in the series if other processes were simultaneously issued numbers. Calling sp_sequence_get_range can retrieve several numbers in the sequence at once.
  • You need to change the specification of the sequence, such as the increment value.

在我们的项目中用法如下

代码块

CREATE sequence dbo.SequenceInvitationCodeForAgent
as int
Start with 30000001
Increment by 1
MaxValue 39999999
MinValue 30000001

CREATE sequence dbo.SequenceInvitationCodeForFundPartner
as int
Start with 60000001
Increment by 1
MinValue 60000001

CREATE sequence dbo.SequenceInvitationCodeForRY
as int
Start with 20000001
Increment by 1
MaxValue 29999999
MinValue 20000001
每次得到新的邀请码只需要运行SELECT NEXT VALUE FOR MySequenceName就可以得到了,就是这么简单,而且不必考虑多线程的问题

2016年2月3日星期三

2015年终总结

拖了很久没有动笔,本来想想算了,反正也不会有人看,写了也没什么用,但今天看到一个订阅很久的人更新了博客,题目也是年终总结,心想这两天上班也没什么事情,还是写写吧,也算给自己一个交代。
其实现在回过头来看看,自己仿佛没什么改变,也没什么进步,但是再仔细想想14年底的自己,又好像有很大的不同。也许世事就是这样,不识庐山真面目,只缘身在此山中。
2015年: 
1. 不知是没有记录还是真的没有看书,我在豆瓣上的15年看的第一本书居然是10月份记录的,好在12月份拼命的看,总算在元旦之前完成了平均每月一本的成绩; 
2. 全家到香港旅游了一次,也算是出了次国吧; 
3. 购置了Macbook Pro和iphone 6sp; 
4. 将查歌词api站点用python改写并部署到linux服务器上,站点很小,脑中有几个想做的项目可是都是开了个头就搁置了,希望明年完成; 
5. 没有学习新语言,C#和python都进步了,并使用了一些新东西,比如mongodb,redis,memcache,angularjs,一些库; 
6. 由于上班路程远,每天起早贪黑,基本没有时间锻炼,身体大不如前,人也胖了许多; 
7. 博客写的数量比预期少,主要是自己真的学过之后觉得太不值得写了,加上人也懒,这个希望明年改善吧; 
8. 将梯子转移到vultr供应商日本节点,速度比搬瓦工快了许多; 
9. 教团队的人翻墙并提供自己的梯子给他们; 
10. 带了个新人,刚毕业的小朋友,令我最欣慰的是他能坚持翻墙,独立思考,有自己的想法,可惜跟主管吵了一架后就再也没来了;
希望明年可以: 
1. 学习并掌握es6语法,前端框架react.js; 
2. 进一步熟悉linux和mac系统; 
3. 平均每月一本书,一个月到两个月一篇博客; 
4. 有时间学学swift(已经很没底气了); 
5. 出国游; 
6. 继续未完成的项目; 
7. 换一个离家近,有追求,工资高,福利好的公司;

15年其实不是特别开心,尤其是后半段,因为对于产品和技术的不同观点,很多想法都与目前公司采用的背道而驰,而做为一个技术人员却没有任何话语权,很多时候提出的建议与观点都被否决了,没有理由。而我们做为产品实现环节的最下游却要为产品的低能买单。每次做一个新任务都要改两遍以上才能做完。
能记住的建议如下: 
1. 建议公司设立vpn,可以支持远程办公,vpn建立,但是远程办公被否决,这个我能理解; 
2. 提出用我自己的mbp办公,只要公司提供显示器就好,被拒绝; 
3. 提出使用团队协作工具流程化管理,使用过一段时间开源中国的team,但是后团员不再使用; 
4. 实时通讯提出用azure的service bus(因为我们公司用azure),被拒绝,主管最后自己找了网易的polemo,github上最后更新日期是两年前; 
5. 消息队列提出用redis或azure,主管让老实使用windows自带的消息队列,这个任务做的极其消沉; 
6. 前端曾提出用react,主管拒绝,并要求我们使用angular.js框架,现在有意让我们改用react; 
7. 对于产品的逻辑混乱,文档的错误丛生,提出让程序员提前参与任务制定,被拒绝; 
8. 做任务中对于错误流程与逻辑的更改,大概一半被接受一半被拒绝;
所以在15年最后的几个月里,我经常想,是不是做个技术人员还不够,因为没有什么公司是技术人员可以有决策权的,就算技术方面的也没有。只有你到了一个高的位置之后,才有一定的话语权。鉴于此,我是不是又要重新计划职业目标,向上游与高级职位上改变。
努力吧。