标签: graph-databases

如何在单个语句中减去 Neo4j 中不同条件的相同返回值

我正在使用 Java 来匹配我这样的语句。

Result firstResult = db.execute("MATCH (n)-[:someRelation]->(m) WHERE n.name='firstN' RETURN m.cal");
Result secondResult = db.execute("MATCH (n)-[:someRelation]->(m) WHERE n.name='Second' RETURN m.cal");
Run Code Online (Sandbox Code Playgroud)

那么如何在一次匹配中减去这两个语句而无需创建另一个 Result (secondResult) ?

database neo4j graph-databases cypher

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

Neo4j 社区版限制和限制

我正在使用 janus 图,但它有很多缺点。所以我正在寻找其他图形数据库,如 neo4j。

我想阻止 janus 图的问题,因为回答这个问题会有所帮助:

  • Neo4j社区版有什么限制
  • Neo4j 有复合索引和混合索引的概念。
  • 我可以像创建/删除索引一样轻松管理索引吗?
  • 我可以像在 RDBMS 中一样执行包含操作吗?
  • 为 c#、python 提供的驱动程序可以执行 Neo4j 支持的所有类型的查询
  • Noe4j 是否会在下一个场景中出现问题:
    1. 创建节点类型和属性
    2. 插入数据
    3. 为现有结构创建索引
    4. 通过添加新属性或类型来更改旧节点和关系结构
    5. 创建结合新旧属性的新索引。

我在使用 janusgraph 时遇到了这些问题,所以我不想重新启动它们。

neo4j graph-databases

4
推荐指数
2
解决办法
6738
查看次数

ArangoDB 为双向边缘的每个有向边缘创建计数器边缘

我对图数据库非常陌生。我从阿兰戈开始。对于这个项目,我不确定将来会遇到的疑问。我不想制造瓶颈。所以我想在任何地方创建无向或双向边缘。

然而,由于仅支持有向边,我目前的理解是,如果某个顶点无法通过 a 到达,directed traversal那么我稍后会遇到瓶颈。因此,每当我创建边缘时,a -> b我也会b -> a在同一个边缘集合中创建。

我的假设正确吗?设计决策是否可以接受?

directed-graph graph-databases arangodb

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

要使用哪个图形数据库

是否有任何开源图形数据库可以存储二进制数据,水平扩展和可选地提供存储数据的版本?

我被大量的dbs所震撼,但它们似乎都没有所有想要的功能.

nosql graph-databases

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

在不同的属性上使用neo4j DISTINCT和ORDER BY

我试图在neo4j版本1.9M02上运行以下cypher查询

START me=node(2)
            MATCH me-[:FOLLOWS]->friends
            ,friends-[fr:ADDED|STOCKS]->products
            ,me-[r?]->products
            WHERE r is null
            RETURN products._id
            ORDER BY fr.CreatedOn DESC
            SKIP 0
            LIMIT 10
Run Code Online (Sandbox Code Playgroud)

根据关系创建时间的排序,我期望得到我的朋友添加或存放的所有产品,这些产品都不是由我添加或存储的.此查询返回正确的结果,但具有重复的products._id值(一个用户添加产品,其他用户使用STOCKED).但是我只需要这个产品的一个实例.所以我试过了

START me=node(2)
            MATCH me-[:FOLLOWS]->friends
            ,friends-[fr:ADDED|STOCKS]->products
            ,me-[r?]->products
            WHERE r is null
            RETURN DISTINCT products._id
            ORDER BY fr.CreatedOn DESC
            SKIP 0
            LIMIT 10
Run Code Online (Sandbox Code Playgroud)

(为products._id添加了DISTINCT)但是这次我收到了Unknown identifier fr错误.所以我把fr添加到RETURN语句中

START me=node(2)
            MATCH me-[:FOLLOWS]->friends
            ,friends-[fr:ADDED|STOCKS]->products
            ,me-[r?]->products
            WHERE r is null
            RETURN DISTINCT products._id,fr
            ORDER BY fr.CreatedOn DESC
            SKIP 0
            LIMIT 10
Run Code Online (Sandbox Code Playgroud)

此查询可以正常运行,但会像以前一样返回重复的产品ID.

我过去几天一直只玩neo4j,所以根本不是专家.如果有人能帮助我,我真的很感激.

neo4j graph-databases cypher

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

嵌入在iOS上的图形数据库

运行嵌入在iOS上的图形数据库有哪些选择?

鉴于明显缺乏选项,最好是尝试在sqlite中管理数据库并保持数据库大小不变?

sqlite triplestore graph-databases ios

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

与cypher有条件地建立关系(neo4j)

我试图用neo4j创建一个链表,并且有一个没有关系的根节点.这是我想要创建的伪cypher,但我不确定如何,或者即使它是可能的:

START root=node(1), item=node(2)
MATCH root-[old?:LINK]->last
WHERE old IS NOT NULL
CREATE root-[:LINK]->item-[:LINK]->last
DELETE old
WHERE old IS NULL
CREATE root-[:LINK]->item
Run Code Online (Sandbox Code Playgroud)

基本上,如果列表存在,我试图将一个节点插入到列表中,否则只需创建第一个列表项.显然你不能WHERE像我上面所做的那样做多个.有关如何使用密码实现所需功能的任何想法?

文档通过首先:LINK在根节点上创建循环关系来解决问题,但我想在不这样做的情况下解决这个问题(因为您需要为每个节点创建可能不必要的关系).

neo4j graph-databases cypher

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

Neo4j /保持节点变化历史的策略

让我们假设一个处理汽车的图表.
每个都Car可以随着时间的推移而发展,我需要跟踪这些变化.
(为了能够追踪一些不一致的进化等...)

我想过实现一个写时复制机制(就像LinkedIn似乎那样),这意味着Car每当其中一个Car属性发生变化时创建一个完整的新节点.

我最终会得到一个这样的图表:

(Ferrari)-[:CURRENT]->(V3)-[:PREVIOUS]->(V2)-[:PREVIOUS]->(V1)
Run Code Online (Sandbox Code Playgroud)

我特别感兴趣的是检索最新版本,所以听起来不错.

但是,如何处理最初的CarUUID?

Car的UUID(这是一个易于查询的索引属性)是通过库(Apache)自动生成的.
我想如果我为每个Car版本保留相同的初始UUID ,这可能会导致一些冲突:" 检索Ferrari其UUID为123 "=>返回多个结果.3个结果,如果有3个版本.

为每个版本生成新的品牌UUID是否安全有效?

因此,我知道在这种情况下,检索特定版本的唯一方法是遍历图形的相关部分直到正确的部分,而不依赖于对初始UUID的简单查询; 通过简单的Cypher查询,这似乎仍然非常高效和简单.

我想保留生成的UUID,因为不建议使用潜在的"可猜测"REST URL(使用资源的UUID).
实际上,我可以将UUID作为Car模型与其版本之间的组合,但似乎不够"安全"且我的URL上具有可见性.任何恶意的人都可以通过更改URL轻松地设法检索旧版本.

uuid database-design graph neo4j graph-databases

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

如何在neo4j中为关系属性添加多个值?

我想为单个关系属性添加多个值。
如下所示。
我有一个双向关系“ CALLED” 。我想为“ DURATION”有两个值,例如DURATION(100-200-> 500,200-100-> 600) 在此处输入图片说明

我可以为一个属性放两个值吗?

neo4j graph-databases

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

树结构的数据模型(文件系统):文档模型与图模型

我正在评估一个nosql解决方案,用于实现类似于结构的文件系统,包含数百万个项目,其中主要功能必须是:

  • 快速查找由n项属性过滤的项目的"父项"或"直接子项"或"子树项",页面结果按项属性排序.

有这个要求我把问题分成2个任务:

  1. 为搜索子项/子树子项建模递归项结构
  2. 为物品属性搜索项目结构建模

现在,nosql schema free的强大功能是为每个文件存储不同属性的一个很好的功能,这对第2点很有用.

我对第1点关于使用文档数据库(示例mongodb)以及单个项目集合和物化路径设计模式,或使用带有2个集合的图形数据库(示例arangodb)的优缺点进行了一些疑问:数据(文档集合)和items父母关系(边缘集合)和图形遍历函数.

根据我的要求,使用图形数据库的性能有哪些优势?

图形遍历比物化路径过滤器更有效地完成我的任务?

如果是的话,你能解释一下为什么吗?

谢谢

mongodb neo4j graph-databases orientdb arangodb

3
推荐指数
2
解决办法
1662
查看次数