gpt4 book ai didi

postgresql - Neo4j 关系属性索引的最佳实践?

转载 作者:行者123 更新时间:2023-11-29 13:39:19 25 4
gpt4 key购买 nike

我正在尝试将 PostgreSQL 数据库迁移到 Neo4j,并在 PostgreSQL 中具有以下 m-n 关系:用户-(被阻止的)-用户

所以在 PostgreSQL 中,我有一个额外的表“blocked”,它包含以下列:userid1、userid2、blockedsince、blockeduntil我在 blocked.blockeduntil 上也有一个索引,用于搜索在阻塞结束时最终必须删除的行。

我如何在 Neo4j 中建立这种关系,包括索引?

我已经在 Neo4j 的“用户”节点类型中包含了所有用户行。下一步应该是在用户之间创建一种称为“已阻止”的关系。所以基本上是这样的: (user)-[:blocked]->(user)我会在关系中添加 2 个关系属性“blockeduntil”和“blockedsince”。但是似乎无法在关系属性 blocked.blockeduntil 上创建索引

PostgreSQL 的原始代码:

CREATE TABLE user (
UserId bigserial NOT NULL PRIMARY KEY,
...
);
CREATE TABLE blocked(
UserId1 bigint NOT NULL references user(UserId),
UserId2 bigint NOT NULL references user(UserId),
BlockedSince timestamp NOT NULL,
BlockedUntil timestamp NOT NULL,
PRIMARY KEY (UserId1, UserId2)
);
CREATE INDEX "IdxBlocked" on blocked(blockeduntil);

我在 Neo4j 中的第一个方法:

USING PERIODIC COMMIT
LOAD CSV WITH HEADERS FROM "file:///blocked.csv" AS row
MATCH (u1:user {userid: toInteger(row.userid1)})
MATCH (u2:user {userid: toInteger(row.userid2)})
MERGE (u1)-[b:BLOCKED]->(u2)
ON CREATE SET b.blockedsince = localdatetime(replace(row.blockedsince, " ", "T")), b.blockeduntil = localdatetime(replace(row.blockeduntil, " ", "T"));

实现这种关系的最佳实践是什么,包括 blockeduntil 上的索引?像这样创建一个名为“blocked”的新节点类型会更好吗?

USING PERIODIC COMMIT
LOAD CSV WITH HEADERS FROM "file:///blocked.csv" AS row
CREATE (:blocked{userid1: toInteger(row.userid1), userid2: toInteger(row.userid2), blockedsince: localdatetime(replace(row.blockedsince, " ", "T")),
blockeduntil: localdatetime(replace(row.blockeduntil, " ", "T"))});

然后像这样在 blocked.blockeduntil 上创建索引?

CREATE INDEX ON :blocked(blockeduntil);

在我的研究过程中,我偶然发现了显式索引 Explicit Indexes但它们似乎已被弃用。我也不确定 Full Text Indexes在这里是正确的选择。

最佳答案

好吧,我好像从Neo4J的工作人员那里找到了官方的回答。 https://community.neo4j.com/t/how-can-i-use-index-in-relationship/1627/2

来自帖子:

We instead recommend refactoring your model. If you need to perform an index lookup of something, that usually suggests that thing would be better modeled as a node. As a node you are able to create the indexes and constraints you need for quick lookup.

所以我将“阻塞”建模为一个节点,并在 blocked.blockeduntil 上创建一个索引。

关于postgresql - Neo4j 关系属性索引的最佳实践?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57821064/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com