首页 > 数据库 >[20240426]sql_id 转换hash_value.txt

[20240426]sql_id 转换hash_value.txt

时间:2024-05-08 20:45:12浏览次数:23  
标签:hash .. value echo sql id

[20240426]sql_id 转换hash_value.txt

--//以前写的脚本,转换sql_id to hash_value.遇到问题:

$ cat s2p.sh
#! /bin/bash
# convert sql_id to hash_value

odebug=${ODEBUG:-0}

sql_id="$*"
v1=$(echo $sql_id | tr $(echo {0..9} {a..z} | tr -d 'eilo ') $( echo {0..9} {a..v}| tr -d ' '))
v2=$(( 32#$v1 % 2**32 ))
if [ $odebug -eq 1 ] ; then
    echo "sql_id=$sql_id v1=$v1 v2=$v2"
fi  
echo "sql_id = $sql_id hash_value = $v2"
echo "sql_id = $sql_id hash_value = $(( 32#$(echo $sql_id | tr $(echo {0..9} {a..z} | tr -d 'eilo ') $( echo {0..9} {a..v}| tr -d ' ')) % 2**32 ))"

--//计算转换后结果为负数,例子:
$ export ODEBUG=1

$ ./s2p.sh arw6k2rf5s29b
sql_id=arw6k2rf5s29b v1=ans6i2ne5o29b v2=-597948117
sql_id = arw6k2rf5s29b hash_value = -597948117
sql_id = arw6k2rf5s29b hash_value = -597948117

$ ./s2p.sh 0rw6k2rf5s29b
sql_id=0rw6k2rf5s29b v1=ns6i2ne5o29b v2=3697019179
sql_id = rw6k2rf5s29b hash_value = 3697019179
sql_id = rw6k2rf5s29b hash_value = 3697019179

$ ./s2p.sh 2rw6k2rf5s29b
sql_id=2rw6k2rf5s29b v1=2ns6i2ne5o29b v2=3697019179
sql_id = 2rw6k2rf5s29b hash_value = 3697019179
sql_id = 2rw6k2rf5s29b hash_value = 3697019179

--//估计带入值arw6k2rf5s29b有点大,bash shell计算后变成负数,hash_value是取full_hash_value值(后8位,16进制).
--//这样 8*4 = 32 bit, 32/5 = 6.4(sql_id为32进制,2^5=32), 取最后7个字符计算就ok了,
--//修改代码取消开头第1个字符不会影响计算结果.
--//修改后代码如下:

$ cat s2p.sh
#! /bin/bash
# convert sql_id to hash_value

odebug=${ODEBUG:-0}

sql_id="$*"
v1=$(echo $sql_id | tr $(echo {0..9} {a..z} | tr -d 'eilo ') $( echo {0..9} {a..v}| tr -d ' '))
v2=$(( 32#$v1 % 2**32 ))
v3=${v1:(-12):12}
#v3=${v1:(-7):7}
v4=$(( 32#$v3 % 2**32 ))

if [ $odebug -eq 1 ] ; then
    echo "sql_id=$sql_id v1=$v1 v2=$v2 v3=$v3 v4=$v4"
fi  
echo "sql_id = $sql_id hash_value = $v2"
echo "sql_id = $sql_id hash_value = $v4"
# echo "sql_id = $sql_id hash_value = $(( 32#$(echo $sql_id | tr $(echo {0..9} {a..z} | tr -d 'eilo ') $( echo {0..9} {a..v}| tr -d ' ')) % 2**32 ))"

--//测试看看:
$ ./s2p.sh arw6k2rf5s29b
sql_id=arw6k2rf5s29b v1=ans6i2ne5o29b v2=-597948117 v3=ns6i2ne5o29b v4=3697019179
sql_id = arw6k2rf5s29b hash_value = -597948117
sql_id = arw6k2rf5s29b hash_value = 3697019179

--//还可以采用如果结果为负数,使用 2^32-597948117 = 3697019179也可以.

标签:hash,..,value,echo,sql,id
From: https://www.cnblogs.com/lfree/p/18180827

相关文章

  • 用PHP连接postgreSQL时遇到的问题
    先说说我的环境的版本,apache是2.4的,postgreSQL为目前最新的16版本,php刚开始为7版本。第一个问题是PDO连接PostgreSQL报错,SCRAMauthenticationrequireslibpqversion10orabovein这个问题是libpq的版本过低,要版本10以上,(至于libpq是什么,我目前也不懂)后来我检查了php版本发......
  • MySQL索引创建原则
    1,2,5,6比较重要。针对于数据量较大,且查询比较频繁的表建立索引。单表超过10万数据(增加用户体验)。针对于常作为查询条件(where)、排序(orderby)、分组(groupby)操作的字段建立索引。尽量选择区分度高的列作为索引,尽量建立唯一索引,区分度越高,使用索引的效率越高。如果是字符......
  • mysql面试题
    索引失效1.模糊查询2.使用函数和计算:3.不匹配的数据类型:4.使用OR条件的不同索引列:5.复合索引的最左前缀原则:6.索引列在条件中使用负向查询:如NOTIN、NOTEXISTS、NOTLIKE等负向查询条件可能会导致索引失效。7.索引列在条件中使用NULL:当索引列中包含NULL值,并且在查询条件......
  • Mysql中的双路排序和单路排序
    在Mysql中使用orderby进行排序的时候,是可以使用到索引排序的,但是需要添加一些限制条件,例如:select*fromt_userwherename='张三'orderbyname;使用这种方式就可以使用到索引,同时使用limit也是可以使用到索引的select*fromt_userorderbyname;通过这种方式不会使用到索......
  • 你知道什么是 MySQL Online DDL 吗?
    前言MySQL在进行DDL操作时,可能会产生表锁导致阻塞,影响用户的DML操作,而OnlineDDL指的是在DDL期间,允许用户进行DML操作。本文将详细讲解MySQL各版本的OnlineDDL。关于什么是DDL和DML操作,详细介绍见MySQL操作命令总结。1.什么是OnlineDDLOnlineDDL功......
  • MySQL配置文件
    一.Linux1.MySQL5.7**MySQL5.7配置文件示例(适用于Linux)**[mysql]#设置mysql客户端默认字符集default-character-set=utf8[mysqld]#服务器端口port=3306#MySQL的安装目录basedir=/usr/local/mysql#MySQL的数据目录datadir=/var/lib/mysql#错误日志文件......
  • 一条SQL查询语句是如何执行的
    比如,你有个最简单的表,表里只有一个ID字段,在执行下面这个查询语句时:mysql>select*fromTwhereID=10;我们看到的只是输入一条语句,返回一个结果,却不知道这条语句在MySQL内部的执行过程。下面会把MySQL拆解一下,看看里面都有哪些“零件”,借由这个拆解过程,对MySQL有更深......
  • MySQL-安装脚本参考
    #!/bin/bash#安装MySQL程序install_mysql(){#mv/etc/yum.repos.d/*/tmp/#curl-o/etc/yum.repos.d/CentOS-Base.repohttps://mirrors.aliyun.com/repo/Centos-7.repo#wget-O/etc/yum.repos.d/epel.repohttp://mirrors.aliyun.com/repo/epel-7.repo#yuminstall-y......
  • c# Dictionary<TKey,TValue>.TryAdd
    原文链接:https://learn.microsoft.com/zh-cn/dotnet/fundamentals/code-analysis/quality-rules/ca1864Dictionary<TKey,TValue>.ContainsKey(TKey) 和 Dictionary<TKey,TValue>.Add 都执行查找操作,这是冗余设置。如果字典中已存在键,Dictionary<TKey,TValue>.Add 也会引发异......
  • 【container】【docker-compose】【mysql】【redis】【rabbit mq】【mongo】【elastic
    @目录写在前面mysqlredisrabbitmqmongoelasticsearch单节点多节点参考资料dockerkuberneteshelmk3s写在前面相关博文个人博客首页免责声明:仅供学习交流使用!开源框架可能存在的风险和相关后果将完全由用户自行承担,本人不承担任何法律责任。mysqlversion:'3'services:......