titan如何存储vertex id(将vertex id转换为hbase键列)?

a7qyws3x  于 2021-06-09  发布在  Hbase
关注(0)|答案(1)|浏览(378)

我在用 titan 版本0.5.0 HBase . 我有一个没有分裂的区域,因为一个顶点有很多边,我想知道这个顶点的id是什么。如何将hbase key列转换为titan vertex id?
我的hbase键列是 \x00\x8C\x1D\xB3\xBDZ<\x10

ffvjumwh

ffvjumwh1#

用于转换的函数 HBase 键列到 Titan 顶点id为 getKey 在班级下面 IDManager (在泰坦核心)。
这是取出后的密码。它只适用于法线顶点。

String hexKey = "008C1DB3BD5A3C10";
byte[] byteArr = BaseEncoding.base16().decode(hexKey);
StaticArrayBuffer buff = new StaticArrayBuffer(byteArr,0,hexKey.length());

// The code from titan with some simplifications
long partitionBits = 6;
long normalVertexOffset = 3l;
long TOTAL_BITS = Long.SIZE - 1;

long value = b.getLong(0);
long partitionOffset = Long.Size - partitionBits;
IDManager.VertexIDType type = IDManager.VertexIDType.NormalVertex;
long partition = partitionOffset < Long.SIZE ? value >>> partitionOffset : 0;
long USERVERTEX_PADDING_BITWIDTH = normalVertexOffset;
long count = ( value >>> USERVERTEX_PADDING_BITWIDTH & ((1l <<(partitionOffset - USERVERTEX_PADDING_BITWIDTH )) -1 );

long partitionIDBound = (1l << (partitionBits));
long id = (count << partitionBits) + partition;
if(type != null) id = type.addPadding(id);
System.out.println("Key is " + id);

相关问题