【发布时间】:2020-08-10 12:30:03
【问题描述】:
我最近选择了 Neo4j,因为它似乎是存储数据的最佳数据库类型,我目前正在从一些在线讨论论坛中抓取。图的主要结构是社区 -> 论坛 -> 主题 -> 帖子 -> 作者
我正在尝试编写 Cypher 查询来解析 GraphQL 查询,并希望对论坛 -> 线程连接进行分页(例如)。关系是包含一个order 属性,即(f:Forum)-[:CONTAINS]->(t:Thread)
从 neo4j-graphql-js 库中,我了解到他们使用模式理解在子节点上运行“内部查询”。例如:
MATCH (f:Forum { id: $id })
RETURN f { .id, .name, .url, threads: [(f)-[:CONTAINS]->(t:Thread) | t { .id, .title, .url }] }
我真的很想在内部模式理解上使用 ORDER BY、LIMIT 和 SKIP,但不幸的是,这不受支持:https://github.com/opencypher/openCypher/issues/202 - neo4j-graphql-js 库通过使用 apoc.coll.sortMulti 解决了这个问题,但我'已经注意到性能不是很好并且比我在顶级模式等效项上使用 ORDER BY 子句慢很多。
由于我是图形 DBMS 的新手,这让我想知道我是否误解了应该如何使用图形 DB。从“前端”的角度来看,以最低级别的查询语言实现分页的能力似乎是一个关键部分,但同样,也许我没有正确理解事情。方钉、圆孔等等!
这是一个公平的评价吗? Cypher 中是否有另一个选项可以解决这个问题?或者,我应该回去使用 SQL 数据库来处理这个用例吗?
【问题讨论】: