你能推荐我可以嵌入Neo4j这样的应用程序进程的GraphDB,但必须是免费的商业用途,必须支持C#或Java吗?
谢谢你的建议!
以下命令有效
t = new Table(); g.V.as('id').as('properties').table(t){it.id}{it.map}
print t
Run Code Online (Sandbox Code Playgroud)
以下命令有效
t = new Table();
g.V.as('id').as('properties').table(t){it.id}{it.map}; print t
Run Code Online (Sandbox Code Playgroud)
以下命令不起作用
t = new Table(); g.V.as('id').as('properties').table(t){it.id}{it.map}; print t
Run Code Online (Sandbox Code Playgroud)
为什么?
我有一个用户集合.我通过关系将它们连接到图的根节点.
我应该建立从根节点到用户的关系点,还是应该让它从用户指向根节点.
有什么好处和缺点?
我一直在努力想出一个我一直在努力的个人网络应用程序的数据库后端.由于我在数据中需要的灵活性,关系数据库是不可行的,并且可能存在某种形式的文档存储.当我了解图形数据库时,我觉得这将是完美的.
但是,我遇到了一个问题:我需要能够以某种方式定义一个三向关系.我还没有确定数据库,但我一直在修补Neo4j,所以我将使用Cypher来描述这个问题.
基本上,我从这开始:
(a:N)-[r:E]->(b:N)
Run Code Online (Sandbox Code Playgroud)
我需要的是一种将多个节点不仅与a和b相关联的方法,还包括r.这些其他节点将存储有关所有3的不同信息.我认为可能只有两种方法来处理:将关系存储在自己的节点中或存储对包含信息的节点的引用并创建伪边缘.我认为前者可能是一个更好的主意,给我们更像这样的东西:
(a:N)<-[:E]-(r:R)->[:E](b:N)
(s:S)->(a)
(s)->(r)
(s)->(b)
Run Code Online (Sandbox Code Playgroud)
所以,现在,这会导致查询数据的问题.使用图形数据库的重点是能够遍历图形.如果我做这样的事情,有没有办法在N型节点之间递归遍历?处理这个问题的正确方法是什么?我已经想到了几种不同的处理方式,但是所有这些都有它们的缺点.是否有一个特定的图形数据库本机支持这种类型的功能?
UPDATE
使用原始代码,我能够使用以下代码递归遍历节点:
MATCH (a:N)-[:E*]->(b:N)
RETURN a,b
Run Code Online (Sandbox Code Playgroud)
然而,一旦我将边缘拉出到超边缘,我无法弄清楚是否有一种方法能够递归地遍历图形到未确定的深度,因为我将交替节点类型.我正在寻找一些类似的东西
MATCH chain=((a:N)-[]->(r:R)-[]->(b:N))*
RETURN [nodes of type N along the chain]
Run Code Online (Sandbox Code Playgroud)
如果答案只是在创建超边缘时也在a和b之间创建边缘,那么我的问题就变成:有没有一种好方法可以确保边缘和超边缘一起被移除?基本上,让两者都感觉像是一种解决方案,而不是一种实际的解决方案.
...或者是否可以在Neo4j中创建一个与自身有关系的节点(一个简单的循环节点)?
如果是这样,相应的Cypher查询是什么?
我正在使用Gremlin查询存储在TitanDB中的图形.
该图包含具有属性的用户顶点,例如"描述",以及表示用户之间关系的边.
我想使用Gremlin来获取1)用户的属性和2)与其他用户的可能关系.例如,我可以使用以下查询来获取描述中包含"开发人员"一词的所有用户以及源自或定位这些用户的标签"关系"的边缘:
g.V('description',CONTAINS,'developer').as('user').bothE.as('relationship').select
Run Code Online (Sandbox Code Playgroud)
到现在为止还挺好.然而,问题是某些用户(还)没有任何关系.上述查询将忽略这些用户(尽管他们的描述包含'开发人员'),并且只会返回至少有一个关系的用户.
有没有办法选择描述中包含"开发者"的所有用户,如果存在,还可以选择他们的关系?
我有简单的节点User,其UserId属性具有唯一的约束设置.
我开始分析我的查询并注意到每次我User通过UserIdNodeByLabelScan 执行匹配节点而不是NodeUniqueIndexSeek.
我在下面尝试过最简单的比赛.
match (u:User {UserId:"id"}) return u 和索引扫描不起作用.
如果我明确指定索引一切正常.
match (u:User {UserId:"id"}) using index u:User(UserId) return u
任何人都可以澄清为什么会这样.
我在DynamoDB上使用Titan.我有一个没有周期的有向边图.给定一个顶点,我需要从该顶点辐射出的所有路径.路径仅表示从给定顶点辐射出的每条路径上的顶点列表.
我只是无法理解Gremlin和Groovy,所以我希望Java中存在一个解决方案.
或者是否有可以转换为Java的Gremlin查询?
我需要将SNOMED CT本体导入图形数据库,在本例中为Neo4J,但它最终可能是另一种选择.
但是,为了实现这一点,我无法找到SNOMED CT底层关系数据模型的清晰描述.或者至少是简化的SQL视图,它们以可以映射到图形数据库的方式公开实体关系.
我非常感谢任何有关此事的指导或以前的经验.
可以在Gremlin控制台上将自定义ID提供给新顶点,如下所示:
gremlin> g.addV('person').property(id, 1234)next()
==>v[1234]
Run Code Online (Sandbox Code Playgroud)
在Java客户端中,可以按照以下步骤进行操作:
graph.addVertex(T.id, customId);
Run Code Online (Sandbox Code Playgroud)
(其中T为org.apache.tinkerpop.gremlin.structure.T)
gremlin_python是否有与T.id等效的形式,以简化上述形式?
非常感谢。