titan 如何存储顶点 id(将顶点 id 转换为 HBase 键列)?
How does titan store vertex id (translate vertex id to HBase key column)?
我在 HBase
中使用 titan
版本 0.5.0。
我有一个区域由于有很多边的顶点而没有分裂,我想知道这个顶点的 ID 是什么。
如何将 HBase 键列转换为 titan 顶点 ID?
我的 HBase 键列是 \x00\x8C\x1D\xB3\xBDZ<\x10
用于将HBase
键列转换为Titan
顶点id的函数是classIDManager
下的getKey
(在titan-core中)。
下面是取出后的代码。 它仅适用于 NormalVertex。
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);
我在 HBase
中使用 titan
版本 0.5.0。
我有一个区域由于有很多边的顶点而没有分裂,我想知道这个顶点的 ID 是什么。
如何将 HBase 键列转换为 titan 顶点 ID?
我的 HBase 键列是 \x00\x8C\x1D\xB3\xBDZ<\x10
用于将HBase
键列转换为Titan
顶点id的函数是classIDManager
下的getKey
(在titan-core中)。
下面是取出后的代码。 它仅适用于 NormalVertex。
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);