Cassandra的一大特性就是各Column的顺序在插入的时候就已经确定了,这表明Cassandra本身可能使用了插入排序的算法。
虽然之前研究了如何将Unix时间戳记转化为长整型数,但是如果不能进行比较的话就无法完成插入排序。
函数首先将两个长整型数unpack到两个数组中,每个数组4个元素,从1到4,分别代表从低到高的各个字。
$a1 = unpack(”v*”, $l1);
$a2 = unpack(”v*”, $l2);
然后从高位依次进行比较,如果相同就比较低16位,不同就直接返回,直到全部比较完毕。
注意:这里还是不能直接unpack成32位,PHP不能支持32位无符号整型数。
function compareLong($l1, $l2) {
$a1 = unpack(”v*”, $l1);
$a2 = unpack(”v*”, $l2);
for($i=4; $i>=1; $i–) {
$r = (int)$a1[$i] - (int)$a2[$i];
if($r != 0) {
break;
}
}
return $r;
}
$l1 = pack(”H*”, “58ba06b3de9c0400″);
$l2 = pack(”H*”, “58ba06b3de9c0400″);
var_dump(compareLong($l1, $l2));
BytesType的比较可能和LongType类似,只不过比较方向相反,从第一个字节开始。