知识库

何时使用书签

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

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

遗憾的是,在理解何时使用书签更合理方面,没有一个放之四海而皆准的场景。回顾所有关于 Raft 以及将事务应用于从节点的信息(见上方链接),我们可以知道这一点:

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

    1. 主节点

    2. 大多数从节点

    3. 其余从节点和读副本

  • 主节点拥有所有事务,并且始终是最新的实例

  • 由于 Raft 的特性,大多数从节点拥有事务(但可能尚未应用它们)

  • 其余从节点(和读副本)最终会在稍后时间点拥有这些事务

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

  • 对于绝对需要读取您自己的写入操作的查询,使用书签,以及

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

    2. 对于其他对延迟不那么敏感的查询,使用 bolt+routing(这些查询将被路由到从节点)

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

1 决定将读事务直接发送到主节点时请务必谨慎。您应该避免给主节点带来过大压力,以免它无法服务更多请求。您可以在此处阅读更多关于此主题的信息。

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

© . All rights reserved.