短链码生成方案探讨思维链路

        前段时间在做短链平台项目时,对短链码的生成进行了研究,我将思维活动和方案探讨过程进行了记录,文章没什么干货,都是思维过程。

        短链码生成方式,应具备以下几个特点:生成性能强劲、碰撞概率低(避免重复|恶意猜测)、业务规则安全,针对以上特点寻找可靠的生成方式。

方案1:

        例如自增ID的方式,即利用插入数据库,利用数据库自增id,把自增id转成62进制作为短链码。

        缺点:自增方式短链码的长度不固定,随着 id 变大,短链码长度也增长;

方案2:

        可延续方案1的观点,将自增ID可以指定从某个长度(如10000000000)开始增长,到百亿、千亿数量,然后转62进制存储展示。

        缺点:自增ID方式短链码是有序的递增,存在【业务数据安全】问题,可以根据短链码转为10进制便可知道其全库数据量;

方案3:

        采用MD5内容压缩,即长链接做md5加密,加密串查询是否已经生成过短链接,如果已经存在,则拼接时间戳再MD5加密,插入数据库,如果不存在则把长链接、长链接加密串插入数据库,取MD5后 最后1 个 8 位字符串作为短链码(取8位是为减小访问时的字符串长度)。

        缺点:采用MD5可能存在重复的可能,取最后8位是有损压缩算法,数据量超大情况碰撞概念越大

方案4:

        使用MurMurHash,其本质也是将一个元素映射成另一个元素,但他是一种非加密的Hash,性能比MD5强,MurmurHash的 32 bit 能表示的最大值近 43 亿的10进制,将其转换为62进制只有6位数,完全满足短链码的要求了

为什么要用62进制转换,不是64进制?62进制转换是因为62进制转换后只含数字+小写+大写字母,而64进制转换会含有/、+这样的符号(不符合正常URL的字符),10进制转62进制可以缩短字符,如果我们要6位字符的话,已经有560亿个组合了

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/753023.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

jasypt加解密

项目中经常遇到jasypt加解密的配置文件,尤其是项目不是自己创建的时候,压根不知道加密的内容是什么,而配置文件中一般加密的也都是数据库或其他非结构型数据库的账号或密码,这时候想要看一下db的内容就非常的头疼,除了…

OSDI 2023

17th USENIX Symposium on Operating Systems Design and Implementation, OSDI 2023, Boston, MA, USA, July 10-12, 2023. 第17届USENIX操作系统设计与实现研讨会,OSDI 2023,2023年7月10-12日,美国马萨诸塞州波士顿。 1. Ship your Criti…

【爬虫】– 抓取原创力文档数据

使用RPA工具,实现针对于原创力中不可下载文档的抓取,可延用于其他类似文库 1 使用工具、环境 影刀RPA、WPS Office、谷歌浏览器(非指定) 2 代码流程 3 关键点 此方案只适合抓取非VIP即可预览全文的文档,抓取下来的数…

B007-springcloud alibaba 消息驱动 Rocketmq

目录 MQ简介什么是MQMQ的应用场景异步解耦流量削峰 常见的MQ产品 RocketMQ入门RocketMQ环境搭建环境准备安装RocketMQ启动RocketMQ测试RocketMQ关闭RocketMQ RocketMQ的架构及概念RocketMQ控制台安装 消息发送和接收演示发送消息接收消息 案例订单微服务发送消息用户微服务订阅…

(done) 解释 python3 torch.utils.data DataLoader

特别注意:DataLoader 返回的迭代器是无尽的,依据如下 (CHATGPT3.5) DataLoader 返回的迭代器默认情况下是无尽的,因为它会无限地循环遍历数据集,以提供批量的数据。在训练神经网络时,通常会使用无尽的迭代器来循环遍历…

LEETCODE 100255. 成为 K 特殊字符串需要删除的最少字符数

整体思路: 1.可以看到这道题是要求是最小的,那么可以想到遍历所有情况 2.把题干已知条件转换为一个数组,那么只需要以数组每个元素为开头遍历所有情况即可。 3.对于一个数考虑其后面的情况,其后每个数等于这个数k和数本身的最小值(遍历累计求…

spring boot 运行mongodb sql

因项目数据放到了Mongodb 中,需在Mongodb 中查询数据,网上找了好久总算找到了实现方式 借用本地命令号读取命令行数据 主要是分2步: 1、下载 sql-to-mongo-db-query-converter 这个是一个3放插件 作用是将sql语句转成 Mongodb shell 语句…

2024数据结构面试常见问题

大家好!今天我要和大家分享的是2024年数据结构面试常见问题。无论你是编程新手,还是有一定基础的开发者,掌握这些数据结构面试问题,都将助你在面试中脱颖而出,赢得心仪的offer。 下面,我们就一起来学习这些…

参数高效微调(PEFT)技术概览

参数高效微调(PEFT)技术概览 在大型语言模型(LLMs)的世界里,参数量庞大,通常在70亿至700亿之间。这些模型的自监着训练成本高昂,对公司可能意味着高达1亿美元的支出。而对于资源相对有限的研究…

rlwrap安装

引言 我们在使用sqlplus对oracle数据库进行操作的时候,难免会出现这样一种情况:写完一长串命令后发现中间有书写错误的地方,这个时候如果我们想移动光标去修正错误的地方,会出现类似如下的现象: SQL> select name…

python的封装应用

封装在Python中有许多应用场景,其中一些主要的应用包括: 隐藏实现细节: 通过将数据和实现细节封装在类内部,可以隐藏对象的内部状态和实现细节,从而提高代码的安全性和可维护性。 class BankAccount: def __init…

Codeforces Round 934 (Div. 2) --- C. MEX Game 1 --- 题解

C. MEX Game 1: 题目大意: 思路解析: 重要的是那种只有一个的数字,因为如果这个数字有两个及以上,那么我可以再鲍勃删除之后,再拿,也一定能拿得到,所以瓶颈是只有一个的数字&#x…

爬虫3_爬取翻页URL不变的网站

之前实现了对大学排数据爬取:爬虫2_2019年549所中国大学排名. 近期复现代码,发现原网站升级,在翻页时,发现URL不改变,修改代码,使用网页自动化工具selenium实现对该类网站数据获取。 #-*- coding: UTF-8 -…

活动图高阶讲解-06

31 00:01:52,300 --> 00:02:04,300 刚才讲了,活动里面是动作 32 00:02:04,300 --> 00:02:06,300 这个动作 33 00:02:06,300 --> 00:02:09,300 就可以看作活动的一个 34 00:02:09,300 --> 00:02:13,300 里面的实现的一个行为了 35 00:02:16,300 --&g…

复制word文档,合并word文档

背景 现在有一个需求,需要将多个word文档合并为一个文档,并使用poi-el渲染模板生成一个新的文档。 在网上找了很多,没找到合适的,最后摸索出一个可行方案,基于XWPFDocument.getBodyElements方法的。 其实一开始考虑过…

vue项目跳转html页面

1. 把html页面以及相关文件放到public文件夹下(目的和index.html同级) 2.在vue项目中正常写跳转事件,只是路径写法需要注意

【理解指针(三)】

文章目录 一、数组名的理解(1)数组的地址与数组首元素地址的区别 二、使用指针访问数组(1)一维数组传参的本质 三、冒泡排序(1)什么是冒泡排序(2)写冒泡排序 四、结束语 一、数组名的…

堆排序(向下调整法,向上调整法详解)

目录 一、 二叉树的顺序结构 二、 堆的概念及结构 三、数组存储、顺序存储的规律 此处可能会有疑问,左右孩子的父节点计算为什么可以归纳为一个结论了? 四、大小堆解释 五、大小堆的实现(向上和向下调整法) 5.11向上调整法…

Unity Timeline学习笔记(1) - 创建TL和添加动画片段

Timeline在刚出的时候学习了一下,但是因为一些原因一直都没用在工作中使用。 版本也迭代了很久不用都不会用了,抽时间回顾和复习一下,做一个笔记后面可以翻出来看。 创建Timeline 首先我们创建一个场景,放入一个Plane地板&#…

Linux操作系统-08-常用的网络相关命令

1、ping命令 在linux下ping的话会一直ping下去,在windows下的话它会只ping四次就结束, [rootbastion ~]# ping 192.168.0.102 PING 192.168.0.102 (192.168.0.102) 56(84) bytes of data. 64 bytes from 192.168.0.102: icmp_seq1 ttl64 time0.571 ms…