我有一个用例,我需要在每个级别获取特定类型的顶点数量,直到定义的级别。例如:
A 对 B(管理员)、C(用户)、D(管理员)有优势
B (admin) 对 E(user), F(user), G(user), H(admin) 有边
C(user) 对 I(admin), J(user), K(admin), L(admin), M(admin) 有边
K(admin) 对 N(admin), O(user), P(admin), Q(admin), R(admin), S(user), T(user) 有边
如果级别 = 3,并且主题顶点是 A,则结果应该是(格式可以不同):
级别=1,用户=1,管理员=2,总数=3
级别=2,用户=4,管理员=5,总数=9
级别=3,用户=3,管理员=4,总数=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);
}
我怎样才能以有效的方式实现这些结果?我可以使用任何特定的索引类型或其他东西吗?我确实有多个关于顶点属性的基本索引,但我认为它们在这里没有用。