-
Notifications
You must be signed in to change notification settings - Fork 558
Euler 2.0 点和边的属性索引
本章的章节内容安排如下:
Euler-2.0新增点和边的属性索引功能,支持根据某个属性对点和边进行全局采样过滤和邻居采样过滤。Euler1.0的全局采样和邻居采样只支持按type进行采样。在最近一段时期,我们发现,图表征学习的算法发展越来越精细化,针对节点和边的某种属性的的采样需求越来越大,所以在Euler-2.0里面提供了按索引采样的功能,并且优化了采样的效率,和直接采样效率相当。
全局采样过滤精确匹配某种属性的点和边。适用于全局采样负例的时候,加上过滤条件,只采样满足条件的负例。支持的查询有:eq,not_eq,in,not_in
全局采样过滤某种属性在某个范围内的点和边。适用于全局采样负例的时候,加上过滤条件,只采样满足条件的负例。支持的查询有:eq,not_eq,ge,le,gt,lt,in,not_in
采样某个点的满足某种属性的邻居节点。适用于邻居采样的时候,加上过滤条件,只采样满足条件的邻居节点。支持的查询与全局range索引相同。
Euler-2.0已经提供工具用来生成Euler可用的图数据和索引构建,可以参考如下命令
cd Euler-2.0/euler/tools
sh gen_partitioned_data.sh ../../tools/test_data/graph.json ../../tools/test_data/meta /tmp/euler/ shard_num
graph.json 是图数据的json格式,具体参照数据准备章节
meta 是索引的meta文件,指明使用哪个属性来建立索引,索引的名字,字段类型等
详细情况参考build工具章节
{
"node":
{
"type" : "node_type:int32_t:uint64_t:hash_index",
"features":{
"f4":
{
"1":"price:float:uint64_t:range_index"
},
"f3":
{
"0":"att:float:uint64_t:neighbor_index"
}
}
},
"edge":
{
"type" : "edge_type:int32_t:uint64_t:hash_index",
"features":{
"f3":
{
"0":"edge_value:float:uint64_t:range_index"
},
"f4":
{
"1":"edge_att:float:uint64_t:neighbor_index"
}
}
}
}
meta 文件采用json格式,node属性和edge属性分开。
"node":
{
"type" : "node_type:int32_t:uint64_t:hash_index",
"features":{
"f4":
{
"1":"price:float:uint64_t:range_index"
},
"f3":
{
"0":"att:float:uint64_t:neighbor_index"
}
}
}
这段表示对node建立了3个索引,分别是node的type属性,node的features属性中的f4的list属性的第一维,node的features属性中的f3的list属性的第零维。“type”,“features”,“f4”等字段是graph.json里存在的字段,索引meta必须和graph.json 配合使用
"node_type:int32_t:uint64_t:hash_index" 是索引描述字段,由四元组组成(index_name:key_type:nodeid_type:index_type),分别表示索引的名字(全局唯一),索引值的类型,节点(或边)id的存储类型(需要和图中的节点id存储类型一致),索引类型
对于单值属性type上的索引而言,
"node_type:int32_t:uint64_t:hash_index"
的含义是:索引名字index_name为node_type,索引的key_type是node的type类型,为int32_t;索引的nodeid_type其类型为uint64_t,索引类型是全局hash索引。
对于list属性上的索引而言,每个属性是一个向量,所以可以对某个属性向量的某个下标建立索引:
"f3": { "0":"edge_value:float:uint64_t:range_index" }
的含义是:在f3属性上的0下标上建立索引,索引名子为edge_value,key_type是float类型的,nodeid_type是uint64_t类型的,这是一个全局range索引。
hash_index,range_index 分别是全局hash索引,全局range索引,是对这个节点的属性建立的索引
neighbor_index 是邻居索引,本质是全局的一个二重索引,先对节点id建立hash索引,再对属性建立range索引。meta文件中的neighbor_index的描述,是指对节点的邻居按照这个属性进行过滤和采样。