第一次鼓起勇气发首页,大家有想法的,多留言,写得不好,欢迎批评交流。坚持实实在在如铜墙铁壁。

开发软件项目,其实跟盖房子原理很接近,需要很多组件来拼装,例如都需要砖头,序列生成器,其实也
是开发软件过程中的重要砖头之一,是软件项目的最基础的组件之一。

开发软件时经常需要要产生唯一的不重复的ID代码,还有有序增加的序列号、编号等,在单机使用时,问题
不严重,不容易暴露出来组件的错误,但是在多用户并发时运行时或分布式运行环境下,组件的有很多缺陷
都会暴露出来的。

采用Guid方式生成主键是很不错注意,但是有一个缺点,主键太长了,谁都不希望用这么老长的字符串做为
主键,总觉得会影响软件系统运行速度,大多数人也可能说,喜欢用自增量,SqlServer里自增量是比较好用,
但是Oracle里没有这个属性,用序列来实现,我们辛苦写出来的一大堆程序,只能在sqlserver上跑,那就不太
完美了,不太可能写两套程序,一套是sqlserver的,一套是Oracle的,若发现了Bug是不是2个系统都要修改?
若需要改进了,两个版本是不是都要进行改进?要测试呢?一般情况下,维护1套系统的2个版本是很不实际的
很少有人有能力能做到。就像一个人同时谈两个女朋友一样,很难搞定。

我们写得系统稍微复杂一些,都会是遇到主从表结构的设计,单表的设计还比较简单,主键怎么产生都容易一些,
问题复杂到主从表了,一定要有严谨的主外键产生策略,否则很容易乱套、程序运行不稳定,或出现并发问题。

经过很多项目的积累,我总结了以下几个方法:(主要是产生主键及序列号用,兼容多种数据库)
1.获得一个GUID
2.获得一个Sequence,序列号,做为表的主键,外键等。
3.获得一个Degression,降序的序列号,主要是排序时用。
4.批量获得BatchSequence,一次性获得多个主键,主要是为批量操作提高性能用。
5.获得指定长度,指定启始的 Sequence,主要是为了生成有序列规则的单号。
6.删除一个主键Delete,没必要用的主键生成器,可以删除掉,系统里垃圾太多了会不太爽。

理想状态是,程序稍微修改一下配置,告诉系统,我现在用的是哪个数据库就可以了,程序都能
平滑运行,这样遇到遇到不通的数据库,都没多大关系,程序都是可以用的,大家也不用太担心了。

有以上几个方法,就可以很容易搞定,数据的排序问题、主键问题、序列号产生问题了。
抓几个测试程序屏幕给大家看看。

运行后的效果

排序数据时用的页面例子参考

序列产生时,还有一个注意的问题,就是若是采用了事务,最好是是在同一个事务里。

区域及多个主机产生的序列号问题解决方法如事宜图,Prefix前缀方式,可以设定序列的前缀,
方便数据合并及分布式运行环境。说实话其实很像Oracle里的序列产生器。

附件为源代码及MySql数据库,有兴趣的朋友,可以下载看看。
http://files.cnblogs.com/jirigala/Example_Sequence.rar
http://files.cnblogs.com/jirigala/DotNet.Common.Example.rar

CREATE TABLE `base_sequence` (
  `ID` VARCHAR(40)  NOT NULL DEFAULT '',
  `FullName` VARCHAR(40) NOT NULL DEFAULT '',
  `Prefix` VARCHAR(20) DEFAULT NULL,
  `Separate` VARCHAR(20) DEFAULT NULL,
  `Sequence` INTEGER(11) NOT NULL,
  `Degression` INTEGER(11) NOT NULL,
  `Step` INTEGER(11) NOT NULL,
  `Description` VARCHAR(200) DEFAULT NULL,

PRIMARY KEY (`ID`)
)
COMMIT;

INSERT INTO `base_sequence` (`ID`, `FullName`, `Prefix`, `Separate`, `Sequence`, `Degression`, `Step`, `Description`) VALUES
  ('10000000', 'Base_Sequence', NULL, NULL, 10000025, 10000000, 1, '默认值');

若有疑问或者相关问题,可以加QQ: 2520 56973 咨询。

将权限管理、工作流管理做到我能力的极致,一个人只能做好那么很少的几件事情。

转载于:https://blog.51cto.com/jirigala/788345

序列发生器组件 Example 程序相关推荐

  1. 微信小程序image组件开发程序以及相关图片问题参考资料汇总

    微信小程序image组件开发程序以及相关图片问题参考资料汇总,希望对大家小程序开发能有一定的参考和借鉴价值.以下汇总主要涉及到微信小程序image组件有关资源路径.缩放和剪裁模式等进行的探讨,无论是对 ...

  2. 2.安装组件客户端程序(华为云学习笔记,HCIP,大数据)2022.6.6

    实验拓扑图 大数据开发机 大数据数据节点 大数据管理节点 大数据控制节点 安装组件客户端程序 在FusionInsight HD中,大多数组件都提供了命令行客户端,此实验指导用户如何下载单个组件和所有 ...

  3. 彻底禁止烦人的QQ安全组件更新程序

    在win7/vista并打开了UAC的情况下,每次打开QQ总会提示运行『QQ安全组件更新程序』,让人不胜其烦:原本只需要将所有的selfupdate.exe文件的权限设置为不可访问就可以解决这一问题, ...

  4. 利用C#自带组件强壮程序日志

    在项目正式上线后,如果出现错误,异常,崩溃等情况 我们往往第一想到的事就是查看日志 所以日志对于一个系统的维护是非常重要的 贯穿所有的日志系统 日志系统,往往是贯穿一个程序的所有代码的; 试想一下,如 ...

  5. php 常用组件,PHP 程序员应该使用的10个组件

    开源解决方案可以给你很大的帮助,比如: 开源代码是由很多人一起完成的,因此往往比一个人完成的结果要好. 你可以获得免费的代码更新和升级,否则你需要自己来写这些新的内容. 你节省了开发时间,同时提高了项 ...

  6. 利用MATLAB中 MuPADNotebook组件将程序语言表达式转为数学表达式

    前言 在论文写作或数模竞赛中,常需要把已经在程序中列写好的方程或表达式转为数学表达式,呈现在论文或其他书面文本中,利用MATLAB中 MuPADNotebook组件可以在保证高转换准确度的同时,提高我 ...

  7. 应用程序异常管理组件 Example 程序

    由于写程序的人都不是神仙,经常会有Bug存在是难免的,当然我们也不能以此为借口,平时不重视代码质量, 代码质量可以体现出一个人的性格.品味等,做事严谨的人写代码的错误也会少一些,本来就是稀里糊涂的人不 ...

  8. Tarjan算法查找强联通组件的程序

    本文给出了C++程序和Python程序. tarjan算法是由Robert Tarjan提出的求解有向图强连通分量的线性时间的算法. 程序来源:Tarjan's Algorithm to find S ...

  9. 微信地图组件小程序报错“permission“

    报错原因 地图可以任意添加,但用户的位置属于个人隐私,因此需要添加服务引导程序,告知用户地理位置的获取.需要添加 Permission (小程序权限获取设置). 解决方法 该片段用于获取位置权限,注意 ...

最新文章

  1. Scala微服务架构 三
  2. 无法嵌入互操作类型 请改用适用的接口_机器视觉可用的不同电缆和连接器类型以及相关利弊分析...
  3. 【测试点三、四、五分析】1032 Sharing (25 分)_28行代码AC
  4. python买东西_Python实战之ATM+购物车
  5. 关于Shell的一些常用命令
  6. SpringBoot:解决日期转换问题和日期展示问题
  7. 双目估计方法_教你提高双目立体视觉系统的精度!
  8. linux bash命令_Linux命令-您应该知道的基本Bash命令行技巧
  9. 特斯拉全球超级充电站已超过25000座 国内超过870座
  10. mysql数据库d导出数据_mysql数据库导入导出文件
  11. php h5视频录制上传,基于koa的h5视频录制异步上传
  12. robotframework-selenium2library-导入可选参数
  13. python线程池ThreadPoolExecutor和as_completed的用法示例
  14. 当公路的规则与秩序,被昇腾AI时刻守护
  15. iPhone电池健康度是什么
  16. 虚拟机启动时,提示找不到ISO映像文件
  17. 如何取得UnityHub内旧版本Unity下载链接
  18. Translatium for Mac(Google在线翻译工具)
  19. #!/bin/bash和#!/bin/sh的区别,source命令和exec命令
  20. 米特科技零信任新品 MetelTrust 智能 CPE 正式发布!

热门文章

  1. portlet java_探秘企业门户开发:Java Portlet入门(2)
  2. android bundle传递list对象集合,如何从android中的firebase中检索List对象
  3. html点击按钮删除session,Asp.net中安全退出时清空Session或Cookie的实例代码
  4. iOS开发笔记--UIView中的坐标转换
  5. Android的Adapter用法总结
  6. FastAPI 之自动化测试数据库接口
  7. 山东计算机基础模拟题及答案,2016山东农信社考试模拟题--计算机基础知识答案(1)...
  8. java内存规范_Java内存模型-jsr133规范介绍
  9. ble串口程序设计流程图_流程图程序设计的步骤
  10. 教程:13、用户管理