前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >为什么建议使用递增的业务ID

为什么建议使用递增的业务ID

作者头像
windealli
发布于 2024-06-25 12:36:06
发布于 2024-06-25 12:36:06
36607
代码可运行
举报
文章被收录于专栏:windealliwindealli
运行总次数:7
代码可运行

什么是递增的业务ID

1. 什么是业务ID定义

业务ID是一个唯一标识符,用于在系统中标识一个特定的业务实体。

业务ID标识的业务实体可能是一个订单、一个账户、一个病历,或者一个课程。

业务ID是我们理解、管理和操作业务实体的关键。通过业务ID,我们可以查询、更新和删除业务实体,也可以跟踪业务实体的状态和历史。

2. 什么是递增的业务ID

递增的业务ID是一种常见的ID生成策略。它的基本思想是,每当创建一个新的业务实体时,就在上一个ID的基础上加一(也可以是加一定的数值),生成一个新的ID。这样,我们就可以得到一个唯一且递增的ID序列,用于标识和管理业务实体。递增的业务ID简单易用,且有许多优点,因此在许多系统中都得到了广泛的应用。

3. 递增的概念

递增的概念主要有以下几种:

  • 连续递增:连续递增通常用于描述函数的性质。如果一个函数在某个区间内,随着自变量的增加,函数值也在增加,那么我们就说这个函数在这个区间内是连续递增的。例如,函数𝑓(𝑥)=𝑥2f(x)=x2在区间[0,+∞)[0,+∞)内是连续递增的。
  • 单调递增:单调递增是指一个序列,如果对于任意的𝑖<𝑗i<j,都有𝑥𝑖≤𝑥𝑗xixj,那么我们就说这个序列是单调递增的。注意,单调递增允许序列中的元素相等。例如,序列1,2,2,31,2,2,3就是单调递增的。
  • 严格递增:严格递增是指一个序列,如果对于任意的𝑖<𝑗i<j,都有𝑥𝑖<𝑥𝑗xi<xj,那么我们就说这个序列是严格递增的。注意,严格递增不允许序列中的元素相等。例如,序列1,2,31,2,3就是严格递增的。

为什么要使用递增的业务ID

1. 易于管理和跟踪

使用递增的业务ID可以使得数据管理和跟踪变得更加容易。这主要体现在以下两个方面:

  • 顺序性:递增的业务ID具有明显的顺序性,这使得数据的管理和跟踪变得更加直观。例如,我们可以通过简单的比较业务ID的大小,就能够知道哪些业务是先发生的,哪些业务是后发生的。
  • 便于查找和排序:由于递增的业务ID具有顺序性,因此在进行数据查找和排序时,可以利用这一特性来提高效率。例如,我们可以使用二分查找算法来快速定位到特定的业务ID,或者使用基于比较的排序算法来对业务ID进行排序。

2. 有助于数据库性能优化

使用递增的业务ID还可以帮助优化数据库的性能。这主要体现在以下两个方面:

  • 数据索引优化:在数据库中,通常会对业务ID这种经常被查询的字段建立索引,以提高查询效率。而对于递增的业务ID,由于其具有顺序性,因此在建立索引时,可以使用B树或者B+树这种基于比较的数据结构,从而使得索引的查找效率更高。
  • 查询效率提升:由于递增的业务ID具有顺序性,因此在进行范围查询时,可以直接通过比较业务ID的大小来确定查询范围,从而提高查询效率。

3. 业务的连续性

使用递增的业务ID还可以帮助保持业务的连续性。这主要体现在以下两个方面:

  • 易于理解和预测:由于递增的业务ID具有顺序性,因此我们可以通过观察业务ID的变化趋势,来理解和预测业务的发展情况。例如,如果业务ID的增长速度在加快,那么可能意味着业务的发展速度在加快。
  • 有助于业务的顺畅:由于递增的业务ID具有连续性,因此在进行业务处理时,可以保证业务的顺序性和连续性,从而使得业务处理更加顺畅。例如,我们可以按照业务ID的顺序,来依次处理业务,从而避免了因为业务处理的顺序混乱,导致的业务处理效率低下。

如何生成递增的业务ID

1. 数据库自增ID

这是最常见的生成递增业务ID的方式。大多数关系型数据库,如MySQLPostgreSQL等,都支持自增ID。在创建表时,将某一列设置为自增列,数据库会在插入新记录时自动为这一列生成一个递增的值。

  • 优点: 实现简单,只需要在创建表时设置某一列为自增列即可。由于是数据库内部实现,因此性能高(取决于数据库的性能),可靠性强。
  • 缺点: 不适用于分布式系统,因为在分布式系统中,数据可能分布在多个数据库或服务器上,每个数据库或服务器生成的自增ID可能会冲突。
  • 适用场景: 单一数据库的系统,或者对ID的生成性能和可靠性要求较高的系统。

2. 分布式ID生成器

在分布式系统中,由于数据可能分布在多个数据库或服务器上,因此需要一个能在全局范围内生成递增ID的机制。常见的分布式ID生成器有Twitter的Snowflake算法、美团的Leaf等。这些算法通常会考虑到时间戳、机器ID、序列号等因素,以确保生成的ID既能保持递增性,又能保持全局唯一性。

  • 优点: 可以在全局范围内生成递增且唯一的ID,适用于分布式系统。并且,由于考虑到了时间戳、机器ID、序列号等因素,因此生成的ID既能保持递增性,又能保持全局唯一性。
  • 缺点: 实现复杂,需要考虑到时间同步、机器故障、网络延迟等问题。并且,如果生成的ID需要保持连续性,那么可能需要引入额外的机制来保证。
  • 适用场景: 分布式系统,或者对ID的全局唯一性和递增性有要求的系统。

3. Redis的INCR命令

Redis是一个内存数据库,其提供了一个INCR命令,可以用来对指定的键进行原子性的加1操作。因此,可以利用Redis的INCR命令来生成递增的业务ID。

  • 优点: 实现简单,只需要对指定的键执行INCR命令即可。由于是内存操作,因此性能高。
  • 缺点: 如果Redis服务器发生故障,那么可能会导致ID的连续性被打断。并且,由于Redis是单线程的,因此如果并发量大,可能会成为性能瓶颈。
  • 适用场景: 对ID的生成性能有较高要求,或者可以接受ID的连续性被打断的系统。

4. ZooKeeper的顺序节点

ZooKeeper是一个分布式协调服务,其提供了一种顺序节点,可以用来生成递增的序列号。因此,也可以利用ZooKeeper的顺序节点来生成递增的业务ID。

  • 优点: 可以在全局范围内生成递增的序列号,适用于分布式系统。并且,由于ZooKeeper的顺序节点是持久化的,因此即使ZooKeeper服务器发生故障,也不会影响到序列号的连续性。
  • 缺点: 由于ZooKeeper的顺序节点是持久化的,因此如果生成序列号的频率过高,可能会导致ZooKeeper的磁盘IO成为性能瓶颈。
  • 适用场景: 分布式系统,或者对序列号的连续性有要求的系统。

递增业务ID的局限性和应对策略

1. 数据安全问题

递增的业务ID由于其连续性和预测性,可能会带来一些数据安全问题。

  • 预测性和透明性的风险: 由于递增的业务ID具有预测性,恶意用户可能会通过预测业务ID,来尝试访问未授权的数据。此外,如果业务ID直接暴露给用户,那么用户可能会通过分析业务ID,来获取一些敏感的业务信息。
  • 数据保护策略: 为了解决这个问题,我们可以采取以下几种策略:一是对业务ID进行加密,以防止恶意用户预测业务ID;二是对业务ID进行混淆,以防止用户通过分析业务ID获取敏感信息;三是对数据访问进行严格的权限控制,以防止未授权的数据访问。

2. 扩展性问题

递增的业务ID在大规模系统中可能会遇到一些扩展性问题。

  • 递增ID的生成和管理在大规模系统中的挑战: 在大规模系统中,由于数据可能分布在多个数据库或服务器上,因此需要一个能在全局范围内生成递增ID的机制。此外,由于业务量大,因此需要一个高效的ID生成和管理机制,以满足高并发的需求。
  • 分布式系统和高并发环境下的解决方案: 为了解决这个问题,我们可以采取以下几种策略:一是使用分布式ID生成器,如Twitter的Snowflake算法、美团的Leaf等,这些算法可以在全局范围内生成递增且唯一的ID;二是使用内存数据库,如Redis,其提供的INCR命令可以用来生成高效的递增ID;三是使用分布式协调服务,如ZooKeeper,其提供的顺序节点可以用来生成持久化的递增序列号。
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2024-06-20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 海天二路搬砖工 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
bootstrap table点击修改按钮给弹框赋值
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8" /> <title>Dashboard | Nadhif - Responsive Admin Template</title> <link rel="stylesheet" href="http://cdn.bootcss.com/bootstrap/3.3.0/css/bootstrap.min.css"> <
王小婷
2020/10/28
1.3K0
Bootstrap Table表格分页的使用及分页数据(Excel)导出
1:引入Bootstrap Table表格插件相关链接:这里直接拿来用就可以了,如果要下载到本地,可以自行去官网下载。
王小婷
2019/03/15
5.4K0
Bootstrap Table表格分页的使用及分页数据(Excel)导出
Bootstrap Table表格分页的使用及分页数据(Excel)导出
1:引入Bootstrap Table表格插件相关链接:这里直接拿来用就可以了,如果要下载到本地,可以自行去官网下载。
王小婷
2025/05/18
900
Bootstrap Table表格分页的使用及分页数据(Excel)导出
bootstrap table表格内容居中对齐
官方网站: http://bootstrap-table.wenzhixin.net.cn/ 参考文档:http://issues.wenzhixin.net.cn/bootstrap-table/index.html 中文文档:http://bootstrap-table.wenzhixin.net.cn/zh-cn/documentation/ 下载bootstrap Table插件所必须的js,地址:https://github.com/wenzhixin/bootstrap-table
王小婷
2019/07/24
4.8K0
Bootstrap Table根据参数搜索功能
在使用jQuery开发的时候,经常会用到Bootstrap Table来实现需要用到的一些表格。
王小婷
2020/12/14
2.4K0
Bootstrap Table根据参数搜索功能
bootstrap-table表格超过长度自动隐藏
今天说一说bootstrap-table表格优化相关的,当表格里面的内容列数过多的,内容长度过长的时候,会出现自动换行的效果,整个表格的每一行高度就不相同了,看上去就不够美观。
王小婷
2019/11/27
3.6K0
javascript escape()和unescape()区别
escape() 函数可对字符串进行编码,这样就可以在所有的计算机上读取该字符串。
王小婷
2021/07/13
2K1
Bootstrap Table使用教程(请求json数据渲染表格)
今天来写一个关于Bootstrap Table使用教程(请求json数据渲染表格) json数据来源于后端小伙伴的接口,我放在本地进行模拟了
王小婷
2019/11/07
7.7K0
Bootstrap Table使用教程(请求json数据渲染表格)
Bootstrap Table写一个Demo
基于 Bootstrap 的 jQuery 表格插件,通过简单的设置,就可以拥有强大的单选、多选、排序、分页,以及编辑、导出、过滤(扩展)等等的功能。
王小婷
2019/05/17
1.6K0
表格插件-bootstrap table的分页使用示例
4:完整的添加数据之后显示在表格里面,自动分页代码,删除和编辑效果 jsp界面 :
王小婷
2018/12/13
3.4K0
表格插件-bootstrap table的分页使用示例
python测试开发django-120.bootstrap-table表格添加操作按钮(查看/修改/删除)
接着前面这篇https://www.cnblogs.com/yoyoketang/p/15242055.html 在columns最后添加一个操作项,formatter属性可以帮助我们更加灵活的显示表格中的内容
上海-悠悠
2021/09/14
1.1K0
python测试开发django-117.bootstrapTable结合Paginator分页器查显示表格
bootstrap 提供了table表格插件,可以快速帮我们实现分页功能。这样就不用在前端页面上写分页逻辑,只需关注后端给对应数据就行。 bootstrap-table提供两种分页方式,client和server,即客户端和服务端分页;
上海-悠悠
2021/09/14
1.5K0
Bootstrap Bootstrap表格插件bootstrap-table配置与应用小结
https://gitee.com/ishouke/front_end_plugin/blob/master/jquery-3.2.1.min.js
授客
2019/09/10
13.4K0
Bootstrap Bootstrap表格插件bootstrap-table配置与应用小结
表格插件-bootstrap table的使用示例
基于 Bootstrap 的 jQuery 表格插件,通过简单的设置,就可以拥有强大的单选、多选、排序、分页,以及编辑、导出、过滤(扩展)等等的功能。
王小婷
2018/12/12
1.9K0
BootstrapTable的使用教程一:实现一个简单的表格和分页二:说一说BootstrapTable的属性一览表三:bootstrap-table如何设置首行变色,其他行不变色
官方网站: http://bootstrap-table.wenzhixin.net.cn/ 参考文档:http://issues.wenzhixin.net.cn/bootstrap-table/index.html 中文文档:http://bootstrap-table.wenzhixin.net.cn/zh-cn/documentation/ 下载bootstrap Table插件所必须的js,地址:https://github.com/wenzhixin/bootstrap-table 在开
王小婷
2018/05/31
5.1K0
手撸的一个快递查询系统,竟然阅读量过1.8w
做这个项目的初衷是因为我去年在微信卖老家水果,好多朋友下单后都问我快递单号,每天发货后我都要挨个甄别这个人是哪个快递信息,很麻烦一部小心就搞错了。基于这件小事我有了自助快递查询的这个想法。将发货的快递信息导入到我的系统里,用户访问我的系统,通过输入手机号就可以查看自己的快递物流信息。 项目是去年8月写的,一直搁浅在哪,最近无意间翻看我发的那篇文章自助快递单号查询阅读量竟然都1.8w了,有图有真相。
不安分的猿人
2020/04/23
1.5K0
手撸的一个快递查询系统,竟然阅读量过1.8w
用这个库 3 分钟实现让你满意的表格功能:Bootstrap-Table
这是 HelloGitHub 推出的《讲解开源项目》[1]系列,今天给大家推荐一个基于 Bootstrap 和 jQuery 的表格插件:Bootstrap-Table
HelloGitHub
2021/05/14
3K0
php 接口与前端数据交互实现示例代码
最近在做前后端数据交互的尝试,也跳了很多坑,使用的是php+bootstrap-table+js,把一些收获记录在这里,方便查询。 这个小项目,仅有3个文件,分别为:
用户2323866
2021/07/02
2.1K0
bootstrap-table数据导出Excel 、JSON、txt、pdf等
API地址:https://examples.bootstrap-table.com/#options/server-side-pagination.html tableExport源码下载地址:https://github.com/hhurz/tableExport.jquery.plugin bootstrap-table下载地址:https://github.com/wenzhixin/bootstrap-table
别团等shy哥发育
2023/02/25
4K0
bootstrap-table数据导出Excel 、JSON、txt、pdf等
ABP入门系列(14)——应用BootstrapTable表格插件
源码路径:Github-LearningMpaAbp 1. 引言 之前的文章ABP入门系列(7)——分页实现讲解了如何进行分页展示,但其分页展示仅适用于前台web分页,在后台管理系统中并不适用。后台管
圣杰
2018/01/11
4.7K0
ABP入门系列(14)——应用BootstrapTable表格插件
推荐阅读
相关推荐
bootstrap table点击修改按钮给弹框赋值
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验