标签: spring-data-neo4j-5

微服务架构中的 Neo4J

为了与 DDD 和限界上下文保持一致,众所周知,当您创建微服务时,您应该保持关注点分离。

Neo4J 的主要好处之一是在 Neo4J 中保留“连接的”数据,以便有效地查询它们之间的关系。

当选择使用 Neo4J 时,这两种相反的力量似乎使微服务架构决策变得困难。

您是否有多个微服务连接到 Neo4J 数据库并相应地保留自己的域?

或者

您是否有一个微服务,具有与 Neo4J 的数据库连接来控制持久性和查询?

两者似乎都不太正确......

java spring neo4j microservices spring-data-neo4j-5

9
推荐指数
1
解决办法
1942
查看次数

如何将自定义Spring Data Neo4j 5.0.3 cypher查询标记为只读

我目前正在开发一个Spring Data Neo4j 5.0.3 REST API应用程序,该应用程序与Neo4j 3.3.1因果集群连接,该集群包含3个核心节点(1个领导者和2个粉丝).无论好坏,我们还使用session.queryla SQL预处理语句向数据库提交了大量自定义cypher查询.当我们这样做时,我们注意到我们提交的自定义Cypher几乎都没有session.query被发送给任何只读的关注者.

我已经破解了代码并注意到,在Neo4jSessionquery方法中,该方法总是创建一个带有类型的事务READ_WRITE.有没有办法解决这个问题,以便我们的查询正确分布在我们的集群中?

我也尝试用适当的方法标记,@Transactional(readOnly = true)但它似乎不起作用.当我进入时Neo4jTransactionManager,我在第218行看到以下内容:

private Transaction.Type getTransactionType(TransactionDefinition definition, Neo4jTransactionObject txObject) {
    Transaction.Type type;
    if (definition.isReadOnly() && txObject.isNewSessionHolder()) {
        type = Transaction.Type.READ_ONLY;
    } else if (txObject.transactionData != null) {
        type = txObject.transactionData.type();
    } else {
        type = Transaction.Type.READ_WRITE;
    }
    return type;
}
Run Code Online (Sandbox Code Playgroud)

isNewSessionHolder第一个分支中的第二个条件是什么意思?在单个HTTP API调用的上下文中,我们至少调用数据库2次,因此通过第二个查询,我相信这个条件总是返回false.

鉴于这些观察结果,是否有任何简单的方法可以使我的查询被视为只读?

java neo4j spring-data-neo4j spring-data-neo4j-5

5
推荐指数
1
解决办法
191
查看次数

春季数据| Neo4J | 以正确的顺序查询路径

版本:

<dependency>
            <groupId>org.neo4j</groupId>
            <artifactId>neo4j-ogm-core</artifactId>
            <version>2.1.1</version>
        </dependency>

        <dependency> <!-- If you're using the HTTP driver -->
            <groupId>org.neo4j</groupId>
            <artifactId>neo4j-ogm-http-driver</artifactId>
            <version>2.1.1</version>
        </dependency>

        <!-- https://mvnrepository.com/artifact/org.springframework.data/spring-data-neo4j -->
        <dependency>
            <groupId>org.springframework.data</groupId>
            <artifactId>spring-data-neo4j</artifactId>
            <version>4.2.0.RELEASE</version>
        </dependency>
Run Code Online (Sandbox Code Playgroud)

这是我的实体:

@Data
@NodeEntity
@EqualsAndHashCode(exclude = {"operatedByBuses"})
@ToString(of = {"name"})
public class BusStop {
    @GraphId
    private Long graphId;

    @Index(unique = true, primary = true)
    private String name;

    private String pincode;

    private String landmark;

    private String[] latlong;

    @Relationship(type = "OPERATED_BY")
    private Set<OperatedByBus> operatedByBuses = new HashSet<>();
}

@Data
@RelationshipEntity(type = "OPERATED_BY")
@ToString(of = "displayName")
public …
Run Code Online (Sandbox Code Playgroud)

neo4j cypher spring-data-neo4j-4 neo4j-ogm spring-data-neo4j-5

1
推荐指数
1
解决办法
507
查看次数