[20191012]组成rowid.txt
[20191012]组成rowid.txt
--//昨天做了拆分rowid的测试,链接http://blog.itpub.net/267265/viewspace-2659613/=>[20191011]拆分rowid 2.txt
--//今天测试通过 data_object_id , file ,; block , row 组成rowid的脚本.
--//rowid 格式为:oooooofffbbbbbbrrr, data_object_id占6个字符,file占3个字符,block占6个字符,row占3个字符。当然如果存在在
--//存储中占用10个字节(32bit data_object_id +10 bit rfile# +22bit block + row 16bit)。
--//其中,o是对象id,f是文件id,b是块id,r是行id。
--//当然在普通索引中仅仅占6字节(注没有32bit data_object_id少4个字节,因为全部data_object_id都是一样的)。
--//分区表的全局索引中占10字节。
1.简单说明:
rowid采用64位进制编码,编码如下:
a-z <==> 0 - 25 (26)
a-z <==> 26 - 51 (26)
0-9 <==> 52 - 61 (10)
+/ <==> 62 - 63 (2)
--//组成rowid,在oracle下通过执行:
sys@test> select dbms_rowid.rowid_create(1,28035,11,195,62) from dual;
dbms_rowid.rowid_c
------------------
aaag2daalaaaaddaa+
--//第一个参数1指建立extended rowid.
2.测试:
$ ./crrowid.sh 28035,11,195,62
rowid = aaag2daalaaaaddaa+
--//完成能与前面测试对上.
3.脚本如下:
$ cat crrowid.sh
#! /bin/bash
# data_object_id , file ,; block , row --> rowid
odebug=${odebug:-0}
o_base64=($( echo {a..z} {a..z} {0..9} + / ))
if [ $odebug -eq 1 ] ; then
echo "oracle_base64 = ${o_base64[*]} "
fi
len=(6 3 6 3)
a=0
res=''
for i in $( echo "$*" | tr ',' ' ')
do
# echo $i
result=''
b=${len[$a]}
for j in $(echo "obase=64; $i" | bc| tr -d '\\\r\n')
do
result=${result}${o_base64[$(( 10#$j ))]}
done
res=${res}$(printf "%${b}s" $result | tr " " "a")
(( a++ ))
done
echo "rowid = $res"
上一篇: SUSE Ceph iSCSI 网关管理 - Storage6
下一篇: 星星长这样
推荐阅读
-
北大计算机组成原理笔记2.1为什么要有指令系统
-
MySQL架构组成之逻辑模块组成_MySQL
-
双层foreach循环,取出key相等的元素,组成新数组返回,如何优化成一层循环?
-
php将一维数组转换为每3个连续值组成的二维数组
-
数字广播系统的组成部分(公共广播系统品牌排行榜)
-
数字广播系统的组成部分(公共广播系统品牌排行榜)
-
【对接抖店平台】对接抖音小店开发流程---接口调用组成部分介绍
-
将两个有序链表合并为一个新的有序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。
-
hello 程序执行背后的故事 博客分类: 操作系统 helloWorld编译系统系统硬件组成
-
算法之由两个栈组成队列