何时使用书签
书签是更广泛主题的组成部分:因果一致性。我们建议您在进一步阅读之前,先阅读Neo4j 因果集群简介和Neo4j 因果集群的生命周期。特别注意因果一致性解释。
书签确保从集群读取数据时,读取的数据代表用户最新的图视图。使用书签事务时,您实际上是在说:“仅当某个实例能够遵守此书签(换句话说,在它们处理并应用了该书签之后)时才使用它。”
遗憾的是,在理解何时使用书签更合理方面,没有一个放之四海而皆准的场景。回顾所有关于 Raft 以及将事务应用于从节点的信息(见上方链接),我们可以知道这一点:
-
数据传播的速度可以看作是(从数据准备速度快到慢):
-
主节点
-
大多数从节点
-
其余从节点和读副本
-
-
主节点拥有所有事务,并且始终是最新的实例
-
由于 Raft 的特性,大多数从节点拥有事务(但可能尚未应用它们)
-
其余从节点(和读副本)最终会在稍后时间点拥有这些事务
有了这些信息,您可以做出如下设计选择:
-
对于绝对需要读取您自己的写入操作的查询,使用书签,以及
-
将对延迟敏感的读查询直接发送到主节点1,使用 bolt 进行直接连接,而不是 bolt+routing。
-
对于其他对延迟不那么敏感的查询,使用 bolt+routing(这些查询将被路由到从节点)
-
-
对于不需要最新图视图的其他查询,不要使用书签(这些查询将被路由到随机的从节点/读副本)
1 决定将读事务直接发送到主节点时请务必谨慎。您应该避免给主节点带来过大压力,以免它无法服务更多请求。您可以在此处阅读更多关于此主题的信息。 |
这只是一个示例,但所有这些都可以通过混合使用直接/路由连接和书签来实现。请记住,书签存在于事务级别,这意味着您可以根据需要进行调整,以获得最佳的吞吐量和体验。您可能有具有不同一致性和数据准备要求的多个客户端,并根据每个客户端调整书签的使用。
此页面有帮助吗?