¶global.hpp
全局配置变量。
¶config.hpp
配置设置。
¶type.hpp
tripe_t
: spotriple_attr_t
: sav
¶string_server.hpp
string <-> int map
¶rdma.hpp
¶mem.hpp
一个全局预分配的自行划分的内存空间。
¶store/vertex.hpp
ikey_t
: dir (1 bit) + t/pid (17 bits) + vid (46 bits)
与传统的graph转kvstore的key为点,value为边+邻居不同,这里其实是把点和它上面的边作为key,而只把邻居作为value。
predicate index就是把边(predicate)当作一个点,而type index就是对type标签的边再特殊处理一下,把实际的type当作一个点。作为两个索引。
具体地说,t/pid = 0表示value为predicate index;t/pid = 1表示value为type index;vid = 0表示value为normal index。
这样,可以通过<vid + 0 + 0/1>拿到vid的入边和出边,通过<vid + 1 + 1>拿到vid的类型,通过<0 + tid + 0>拿到特定类型的点,通过<0 + pid + 0/1>拿到有特定标签的边的点。
-
iptr_t
:用来做动态图快照的 -
vertex_t
:key + ptr -
edge_t
:只有邻居的编号
¶store/cache.hpp
一个带过期时间的LFU,在通过key拿value的时候,如果在cache里就不需要再通过RDMA读了。
lookup
insert
¶store/gstore.hpp
具体细节在drtm-sosp15这篇论文中。
如果vid是0,则肯定是predicate/type index,在每个machine上都有replicate,所以直接从本地拿,否则根据differentiate partition(其实实现就是一个取模哈希,roundrobin)看是本地还是远程。
1 | edge_t *get_edges(int tid, sid_t vid, sid_t pid, dir_t d, uint64_t &sz, |
¶store/static_gstore.hpp
- insert_triples
- insert_attr
¶store/meta.hpp
¶bind.hpp
¶console.hpp
¶comm/tcp_adaptor.hpp
基于ZMQ的一对一通信。
¶comm/tcp_broadcast.hpp
基于ZMQ的一对多通信。
¶mm/malloc_interface.hpp
¶loader/loader_interface.hpp
¶loader/posix_loader.hpp
¶query.hpp
¶dgraph.hpp
¶wukong.cpp
1 | void *engine_thread(void *arg) |