我的问题是从开发人员的角度来看(不是特别尊重用户),可能有些混乱.
我想知道节点和关系的结构如何在逻辑上存储在数据库中.就像,当我说我有bla bla信息时.哪里? - 然后答案是,在BOOK中,以网格形式或页面上的线条.在RDBMS的情况下,数据以网格/表格格式存储.但我无法理解图形如何存储在Neo4j/graph数据库中.
我正在使用neo4j客户端2.0.
我们假设这个用例:
"获取所有传递的事件2013/05/12 20:00到2013/05/14 21:00".
实现这种情况下,Neo4j的第一种方式是使索引的属性:
事件(startAt:...,ENDAT:...) (startAt和endAt被索引)
这将导致扫描具有与实际查询相对应的属性的所有事件.
我刚读过的其他方式:

问题是:在这种情况下,节点遍历在性能方面要好于处理日期的索引属性吗?
关于cyper请求的摘录:(假设element在整个请求中是已知的节点变量)
MATCH p = shortestPath(element-[:LINKS*..3]-(user))
RETURN length(p)
Run Code Online (Sandbox Code Playgroud)
假设一个element可能是a user,我怎么能阻止在结果中检索element代表用户本身?
如果我们可以这样做会很酷:
MATCH p = shortestPath(element-[:LINKS*1..3]-(user))
RETURN length(p)
Run Code Online (Sandbox Code Playgroud)
但它导致了这个错误:
shortestPath(...) does not support a minimal length
Run Code Online (Sandbox Code Playgroud)
实现这一伎俩最有效的方法是什么?
我是OrientDB的新手.我想使用OrientDB的功能,但是,我的想法与@rid函数的使用有点混淆.
我已经阅读了应用程序和小组讨论的Web文档,我正在试图弄清楚这些概念.
对于有关该问题的任何交叉发布,我深表歉意.我无法理解(@rid)的用法.在在线应用程序中,我们如何理解和使用顶点或节点的@rid值?
我们必须使用所有这些吗?如何在不使用@rid的情况下遍历?我们怎样才能确定生成这种动态查询的框架中的11:4值?
select from 11:4 where any() traverse(0,10) (address.city = 'Rome')
Run Code Online (Sandbox Code Playgroud) 我想这样做,但它不起作用:
select * FROM Users ORDER BY in.size()
Run Code Online (Sandbox Code Playgroud)
我也尝试过:
select * from Users ORDER BY in[label='connection'].size()
select * from Users ORDER BY inE['connection'].size()
Run Code Online (Sandbox Code Playgroud)
它只返回所有V但未排序
我有以下输出
orientdb {db=dict}> select count(distinct(pos)) from Synset;
----+------+-----
# |@CLASS|count
----+------+-----
0 |null |4
----+------+-----
1 item(s) found. Query executed in 2.514 sec(s).
orientdb {db=dict}> select distinct(pos) from Synset;
----+------+--------
# |@CLASS|distinct
----+------+--------
0 |null |n
----+------+--------
1 item(s) found. Query executed in 0.012 sec(s).
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?(不同值的计数与该值的选择不匹配。实际上db中有4个不同值)
更新[WTF]
orientdb {db=dict}> select * from (select distinct(pos) from Synset)
----+------+--------
# |@CLASS|distinct
----+------+--------
0 |null |n
1 |null |v
2 |null |a
3 |null |r
----+------+--------
4 item(s) found. Query executed in 2.722 …Run Code Online (Sandbox Code Playgroud) 如果我尝试简单
thingNode.setProperty("uuid", thing.getId());
我明白了
java.util.UUID] is not a supported property value
然而,将128位UUID存储为36个字符的字符串将非常浪费.如果我将UUID拆分为单独的属性
thingNode.setProperty("uuid-begin", thing.getId().getMostSignificantBits());
thingNode.setProperty("uuid-end", thing.getId().getLeastSignificantBits());
Run Code Online (Sandbox Code Playgroud)
看来我只能在单个属性上创建索引,并且必须以某种方式将UUID的两个位连接成一个属性.如上所述,由于存储空间非常低效,因此不希望使用字符串.有任何想法吗?
我正在尝试在Neo4J中启动一个新的Java项目,并通过一些教程和示例我已经看到了两种从Java访问Neo4j的方法.GraphDatabaseServer类和Bolt驱动程序类.
据我所知,当您在Neo4j数据库中部署应用程序时,首选GraphDatabaseServer,因为它可以直接访问底层数据库,而另一个可以轻松访问外部数据库服务器.它是否正确?是否有其他差异,优先使用一个或另一个用例?
我刚刚了解了图数据库,而不是关系数据库(RDBMS)。我浏览了neo4j网站上的一些资源,并阅读了Oreilly关于图形数据库的书中的某些章节。但是我无法理解图形数据库实际上是如何存储其数据的?
如果必须将图形存储在RDBMS中,则将为顶点和节点创建差异列表。图数据库有何不同?我真的很难想象,例如neo4j如何将其数据(节点和顶点)存储和链接到常规RDBMS。
如果有人可以帮助我理解和可视化图形数据库的内部工作原理,那么我将非常感激。如果您不太了解我的问题,我很乐意更具体地解释它。
gremlin是否提供了克隆顶点的功能,例如
v1->v2, v1->v3, v1->v4,我如何简单高效地创建一个新的顶点v5,该顶点的边缘也指向v2, v3, v4该v1's边缘(边缘指向的位置相同),而不必显式设置它们,而是说类似的东西g.createV(v1).clone(v2)。
请注意,我使用的是gremlin的AWS Neptune版本,解决方案必须与此兼容。