我正在使用 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) ?
我正在使用 janus 图,但它有很多缺点。所以我正在寻找其他图形数据库,如 neo4j。
我想阻止 janus 图的问题,因为回答这个问题会有所帮助:
我在使用 janusgraph 时遇到了这些问题,所以我不想重新启动它们。
我对图数据库非常陌生。我从阿兰戈开始。对于这个项目,我不确定将来会遇到的疑问。我不想制造瓶颈。所以我想在任何地方创建无向或双向边缘。
然而,由于仅支持有向边,我目前的理解是,如果某个顶点无法通过 a 到达,directed traversal那么我稍后会遇到瓶颈。因此,每当我创建边缘时,a -> b我也会b -> a在同一个边缘集合中创建。
我的假设正确吗?设计决策是否可以接受?
是否有任何开源图形数据库可以存储二进制数据,水平扩展和可选地提供存储数据的版本?
我被大量的dbs所震撼,但它们似乎都没有所有想要的功能.
我试图在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,所以根本不是专家.如果有人能帮助我,我真的很感激.
运行嵌入在iOS上的图形数据库有哪些选择?
鉴于明显缺乏选项,最好是尝试在sqlite中管理数据库并保持数据库大小不变?
我试图用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在根节点上创建循环关系来解决问题,但我想在不这样做的情况下解决这个问题(因为您需要为每个节点创建可能不必要的关系).
让我们假设一个处理汽车的图表.
每个都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轻松地设法检索旧版本.
我想为单个关系属性添加多个值。
如下所示。
我有一个双向关系“ CALLED” 。我想为“ DURATION”有两个值,例如DURATION(100-200-> 500,200-100-> 600)

我可以为一个属性放两个值吗?
我正在评估一个nosql解决方案,用于实现类似于结构的文件系统,包含数百万个项目,其中主要功能必须是:
有这个要求我把问题分成2个任务:
现在,nosql schema free的强大功能是为每个文件存储不同属性的一个很好的功能,这对第2点很有用.
我对第1点关于使用文档数据库(示例mongodb)以及单个项目集合和物化路径设计模式,或使用带有2个集合的图形数据库(示例arangodb)的优缺点进行了一些疑问:数据(文档集合)和items父母关系(边缘集合)和图形遍历函数.
根据我的要求,使用图形数据库的性能有哪些优势?
图形遍历比物化路径过滤器更有效地完成我的任务?
如果是的话,你能解释一下为什么吗?
谢谢