知识库

何时使用书签

书签是更广泛主题的一部分:因果一致性。我们建议在继续阅读之前阅读Neo4j 因果集群简介Neo4j 因果集群的生命周期。请特别注意因果一致性解释

书签确保在从集群读取数据时,读取的数据代表用户对图的最新视图。当使用带书签的事务时,您实际上是在说:“仅当某个特定实例能够遵守此书签时才使用它”(换句话说,在它们处理并应用书签之后)。

不幸的是,在理解何时使用书签有意义时,没有一刀切的方案。如果我们回顾所有关于 raft 和将事务应用于跟随者的信息(上面的链接),我们知道这一点

  • 数据传播的速度可以看作(从数据准备就绪速度快到慢)

    1. 领导者

    2. 大多数跟随者

    3. 其余的跟随者和只读副本

  • 领导者拥有所有事务,并且始终是最新的实例

  • 由于 raft 的性质,大多数跟随者都拥有事务(但可能尚未应用它们)

  • 其余的跟随者(和只读副本)最终将在以后的时间拥有事务

有了这些信息,您可以做出以下设计选择

  • 对于绝对需要读取您自己写入内容的查询,请使用书签,并且

    1. 将对延迟敏感的直接读取查询发送到领导者1,使用bolt 进行直接连接而不是bolt+routing

    2. 对于不太敏感的延迟的其他查询,请使用bolt+routing(这些查询将被路由到跟随者)

  • 对于不需要对图的最新视图的其他查询,请不要使用书签(这些查询将被路由到随机的跟随者/只读副本)

1 在决定将直接读取事务发送到领导者时要小心。您需要避免给领导者造成压力,以至于它无法处理更多请求。您可以阅读更多关于此主题的信息这里

这只是一个示例,但所有这些都可以通过直接/路由连接和书签的混合来实现。请记住,书签存在于事务级别,这意味着您可以根据需要调整它,以实现最佳吞吐量和体验。您可能有多个客户端具有不同的一致性和数据准备就绪要求,并根据每个客户端调整书签的使用。