您将如何在Neo4J的图形数据库中优化分页查询?

时间:2019-07-12 16:39:01

标签: database indexing neo4j

对于我的图形数据库,我有用户和交易。每个用户都有一个ID。每笔交易都有一个ID,日期以及发送者和接收者。交易的发送者和接收者的类型为User。id。

有一个将用户和事务连接在一起的发送器/接收器类型边缘。

在他们发送ID为user_id的任意交易之前,我想查询特定用户txn_id的最近10笔交易。

如何优化此分页查询的性能?我当时正在考虑为两个User.id创建一个索引以快速找到user_id。如果我为Transaction.dateTransaction.id编制索引,是否会使单个用户搜索txn_id较旧的交易有效?

1 个答案:

答案 0 :(得分:0)

如果您在谈论复合索引(create index on :Transaction(date, id)),则不会,因为您将需要具有用于索引属性的精确值来查找。其他任何查找方式(包括范围扫描)都不会使用复合索引。

在:Transaction(date)上的索引也无济于事,因为一旦找到有问题的用户并扩展了交易,就不会使用该索引。从日期开始进行交易是不明智的,因为您会收到许多与相关用户无关的信息。

对于用户的快速查找,您需要在:User(id)上建立索引,然后只需要使用有限制的排序来找到该用户最近的10个。

如果每个用户可以进行大量交易,则可以考虑按日期顺序在交易之间创建链接列表,以便可以更快地迭代交易。请记住,这需要在添加事务时保持顺序,并且在添加到事务列表时,您需要使用适当的锁定技术来避免竞争情况。