【发布时间】:2017-10-04 19:35:36
【问题描述】:
我有一个用例,我需要在每个级别获取特定类型的顶点数量,直到定义的级别。 例如:
A 对 B(管理员)、C(用户)、D(管理员)有优势
B (admin) 对 E(user), F(user), G(user), H(admin) 有优势
C(user) 对 I(admin), J(user), K(admin), L(admin) 有边, 男(管理员)
K(admin) 对 N(admin)、O(user)、P(admin)、Q(admin) 有出边, R(admin), S(user), T(user)
如果levels = 3,并且主题顶点是A,结果应该是(格式可以不同):
level=1,users=1,admins=2,total=3
level=2,users=4,admins=5,total=9
level=3,users=3,admins=4,total=7
我有一个为我执行此操作的查询,但是当我有大量数据时,由于 repeat(),它真的很慢。
for (int i = 0; i < levels; i++) {
Map<Object, Long> next =
graphTraversalSource.V().hasLabel(GraphDbConnection.USER)
.has(GraphDbConnection.UUID, "uuidValue").until(loops().is(i)).repeat(out())
.out().values(GraphDbConnection.MEMBER_TYPE).groupCount().next();
MemberSponsorMetrics memberSponsorMetrics = new MemberSponsorMetrics();
memberSponsorMetrics.setLevel(i + 1);
int users = next.getOrDefault(UserType.USER.ordinal(), (long) 0).intValue();
memberSponsorMetrics.setUsers(users);
int admins = next.getOrDefault(UserType.ADMIN.ordinal(), (long) 0).intValue();
memberSponsorMetrics.setAdmins(admins);
memberSponsorMetrics.setTotal(users + admins);
memberSponsorMetricsList.add(memberSponsorMetrics);
}
我怎样才能以有效的方式实现这些结果?我可以使用任何特定的索引类型或其他东西吗?我确实有多个关于顶点属性的基本索引,但我认为它们在这里没有用。
【问题讨论】:
-
A 转到 B 和 C,因此在您的示例中只有 2 个级别,不是吗?
-
是的,你是对的,我更新了我的数据,还为第 3 级添加了一个
标签: gremlin tinkerpop3 gremlin-server janusgraph