【问题标题】:How would you optimize pagination queries in a graph database in Neo4J?在 Neo4J 中,您将如何优化图形数据库中的分页查询?
【发布时间】:2019-07-12 16:39:01
【问题描述】:

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

有一个发送方/接收方类型的边缘将用户和交易连接在一起。

我想查询特定用户 user_id 的最近 10 笔交易,然后再发送 ID 为 txn_id 的任意交易。

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

【问题讨论】:

    标签: database indexing neo4j


    【解决方案1】:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 2023-02-15
      • 1970-01-01
      • 2011-02-28
      • 2020-01-24
      • 1970-01-01
      • 1970-01-01
      • 2013-09-26
      • 2012-11-25
      • 2011-03-12
      相关资源
      最近更新 更多