标签: graph-databases

Neo4j(或任何其他图形数据库)建模

我开始使用图形数据库,在我的团队中,我们已经开始为我们的软件建模图形.当我们尝试"记录"模型,查看数据库的结构时,就会出现问题.使用SQL数据库,您只需要查看SQL模式.

我们花了一些时间阅读neo4j博客和文档,但我们已经看到显示图表如何工作的常用方法是使用显示一些样本数据的最小图表(随机样本:sample1,sample2等).这非常适合教育目的,但我们希望能够以更正式的方式做到这一点.我们想要设置什么样的节点可以与另一个节点相关联,以及什么样的关系,那种东西.

使用Spring,您可以使用类包装图形,但它非常特定于Java和OO模型,我们正在使用Erlang.我们正在寻找某种形式语言(等效的SQL Schema),或等效的ER模型,或类似的东西.

neo4j nosql graph-databases

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

在neo4j属性上将数据存储为数组/列表

我是Neo4j的新手,手头有以下问题.我正在尝试开发一个社交网站,其中我想将两个用户之间交换的消息存储在他们的关系属性中.为此,我试图以关系属性的数组/列表的形式存储他们的所有消息.你能否建议Neo4j是否提供此类操作.

我还想知道我是否可以在这个关系属性和数组/列表更新中插入我的消息(即在下一个索引上添加新消息)

例如:

User1 -> User2 : Hi, whats up 
User2 -> User1 : Hi, I am in college

So the relationship property stores the message in the form of list such as:
["Hi,Whats up", "Hi, I am in college"]
Run Code Online (Sandbox Code Playgroud)

这样的事......谢谢

graph neo4j graph-databases cypher

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

在Neo4j中为节点设置多个标签是否有意义?

在Neo4j的google小组发表这篇文章之后,我不得不说在使用这种多标签的东西时我没有看到任何好处,相反,相反,恕我直言,它只是增加了唯一性约束的复杂性.它还可能诱使用户将继承引入数据模型,这会导致挫败感,因为根本不可能......

neo4j nosql graph-databases

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

Cypher查询创建多个节点和关系

我正在尝试编写Cypher查询以在一个查询中创建多个节点和关系.CREATECypher中使用子句的文档指出,不可能在单个CREATE子句中创建不同类型的多个节点.

然而它暗示我应该能够把它分解成多个CREATE.我读过的几个类似的答案也指向了相同的解决方案.我试过这样做并继续得到响应错误.

Error: If you create multiple elements, you can only create one of each.
Run Code Online (Sandbox Code Playgroud)

这是我正在尝试做的简要概述.

  1. 创建一个item节点.
  2. 创建多个representation节点.
  3. 在创建的item节点和现有stack节点之间创建关系.
  4. 在创建的item节点和创建的representation节点之间创建多个关系.

这是我正在使用的查询,它试图将CREATE流程的所有单个部分分解为单个步骤.

START stack=node({stack})
CREATE (item {item}) 
CREATE (representations {representations})
CREATE (stack)-[:Item]->(item)
CREATE (item)-[:Representation]->(representations)
RETURN item, representations
Run Code Online (Sandbox Code Playgroud)

我已经尝试了上述查询的几种变体,包括在查询开头创建itemrepresentation节点.

我真的很感激任何建议.如果可以避免的话,我真的不想诉诸于多个数据库调用.

neo4j nosql graph-databases cypher

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

如何检索多个深度关系的节点Neo4j Database Cypher?

假设有一个简单的图表如下,

(City {name:gotham})<-[:LOCATED]-(Tower {name:abc})<-[:LOCATED]-(Bank:{name:CityBank})
(City {name:gotham})<-[:LOCATED]-(Cinema {name:MainHall})
(City {name:gotham})<-[:LOCATED]-(Bank {name:ComBank})
Run Code Online (Sandbox Code Playgroud)

我怎样才能在Neo4j数据库(包括CityBank和comBank)中找到名为Gotham的所有银行?我尝试了以下模式,它返回了位于City的所有节点,名为gotham(包括Cinema)

MATCH (City{name:'Gotham'})<--(Bank) RETURN Bank
Run Code Online (Sandbox Code Playgroud)

neo4j graph-databases cypher

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

用于读取密集型应用程序的分层数据存储

我正在尝试将类似层次结构的树(数据来自json)保存到我的数据库中.我正在尝试决定使用哪种数据库技术和技术来提高数据的读取效率.

在此输入图像描述

  1. 一个级别中的所有节点都具有相同的模式(树中一个级别中的所有节点都具有相同的属性集)
  2. 树中不同级别的节点没有相同的架构.所以相同的颜色意味着相同的类型(见图).
  3. 树结构Root - > A - > B - > D始终不成立.有时我直接获得根节点的子节点类型为D.或者类型A的节点具有类型D的子节点.
  4. 叶节点可以是B型或D型.树永远不会停在A级或root级.
  5. 我将在树中存储大约700个节点.

我想在一些数据库中表示这些数据.我会写一次,但多次阅读.

阅读查询将是这样的 - 给我B3的孩子; 或者给我一个根节点的盛大孩子(D型)......等等.什么/如何以最有效的方式存储这些数据?

database tree hierarchical-data graph-databases

6
推荐指数
0
解决办法
112
查看次数

如何使用OrientDB ETL仅创建边

我有两个CSV文件:

首先包含以下格式的~500M记录

id,name
10000023432,Tom User
13943423235,Blah Person

其次以下列格式包含约1.5B的朋友关系

fromId,toId
10000023432,13943423235

我使用OrientDB ETL工具从第一个CSV文件创建顶点.现在,我只需要创建边缘以建立它们之间的友谊连接.

到目前为止,我已经尝试过ETL json文件的多个配置,最新的是这个:

{
    "config": {"parallel": true},
    "source": { "file": { "path": "path_to_file" } },
    "extractor": { "csv": {} },
    "transformers": [
        { "vertex": {"class": "Person", "skipDuplicates": true} },
        { "edge": { "class": "FriendsWith",
                    "joinFieldName": "from",
                    "lookup": "Person.id",
                    "unresolvedLinkAction": "SKIP",
                    "targetVertexFields":{
                        "id": "${input.to}"
                    },
                    "direction": "out"
                  }
        },
        { "code": { "language": "Javascript",
                    "code": "print('Current record: ' + record);  record;"}
        }
    ],
    "loader": {
        "orientdb": {
            "dbURL": "remote:<DB connection …
Run Code Online (Sandbox Code Playgroud)

etl graph-databases orientdb

6
推荐指数
2
解决办法
1377
查看次数

Neo4J - 在现有节点上创建关系

我是Neo4J的新手,我希望在现有节点和新节点之间建立新的关系.

我有一个大学节点和人员节点.

我正在尝试为现有大学指派一个新人.

我想跟随代码:

MATCH (p:Person {name:'Nick'}), (u:University {title:'Exeter'}) CREATE (p)-[:LIKES]->(u)

所以在上面的代码中:MATCH (p:Person {name:'Nick'})是新用户

而且(u:University {title:'Exeter'})是现存的大学.

但它又回来了 (no changes, no rows)

我甚至尝试过没有MATCH部分的查询,但也没有运气.

我看过几个类似的答案,但它们似乎也没有用.

任何帮助将非常感谢.谢谢.

neo4j graph-databases cypher

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

如何将唯一数据添加到neo4j图数据库中

我正在向我的neo4j数据库添加迭代数据,但我仍然坚持如何覆盖或更新现有数据并检查数据是否已存在于那里.

基本上我有一组带有相应id的电影,例如:

[
  {id: 'gameofthrones', genre: 'fantasy', release: '2017'},
  {id: 'inception', genre: 'scifi', release: '2010'},
  ...
]
Run Code Online (Sandbox Code Playgroud)

我可以按如下方式添加电影:

CREATE 
(m1:Movie {id: 'gameofthrones', genre: 'fantasy', release: '2017'}), 
(m2:Movie {id: 'inception', genre: 'scifi', release: '2010'}) 
Run Code Online (Sandbox Code Playgroud)

但是,当我运行脚本两次时,它会创建4个节点,而不是将其保留在两个节点上.

所以我的问题是,我如何确保它检查节点id是否已经存在,如果是这样,则覆盖它而不是创建新节点?

我试过(但只添加了属性)

// data
attributes['id']         = 'gameofthrones';
attributes['genre']     = 'fantasy';
...

// query
MERGE ( s:Movie {attributes}.id)
ON CREATE SET ( s:Movie {attributes} )
Run Code Online (Sandbox Code Playgroud)

我打电话NodeJS如下:

executeQuery(queryStr, {"attributes": attributes})

// cypher (nodejs)
function executeQuery(queryStr, params) {
    var qq = Q.defer();
    db.cypher({
        query: queryStr, …
Run Code Online (Sandbox Code Playgroud)

neo4j graph-databases graphenedb

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

Titan和Neo4j图形数据库有什么区别?

我曾在关系数据库工作; 但现在想了解图数据库.我才知道这两个是图数据库.这两个数据库有什么区别.我们应该在他们中间选择什么?

database non-relational-database neo4j graph-databases titan

6
推荐指数
3
解决办法
5011
查看次数