问题标签 [node-neo4j]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
modeling - neo4j - 标签 vs 属性 vs 关系 + 节点
关于在哪里使用标签 vs 节点属性 vs 关系 + 节点的任何经验法则。
举个例子,假设我有一家商店,我想把我的产品放在 neo4j 中。他们的标识符是产品 sku,我也想对他们进行分类,就像这个是衣服、食品、电子产品一样,你明白了。我将在我的图表上进行免费搜索,就像用户可以搜索任何内容一样,我会返回与该搜索字符串相关的所有内容。
使用会更好:
- 我有一个带有 的节点
sku 001
,我将它标记为Food
. - 我有一个节点
sku 001
,并且在这个节点上有一个名为category:"Food"
- 我有一个与 的节点
sku 001
,我将为 和创建另一个节点Food
,并将创建一个“category
”关系来关联它们。
我已经读过,如果您要查找属性,最好作为关系+节点,因为遍历比查找节点的属性要快得多。
TIA
neo4j - Node-Neo4j 如何检查节点是否存在(持久)?
我正在为我的数据库使用 Node-Neo4j 客户端。我想创建唯一的节点,但我在 Node-Neo4j 的文档中找不到如何做到这一点。我使用下面的逻辑来检查节点是否存在:
但是,据我了解,createNode
从头开始创建一个新节点,当我使用exists
它时,它只是检查新创建的节点是否保存到数据库中。
如何检查具有提供属性的节点是否已存在于 db 中?
提前致谢。
node.js - 如何获取仅包含数据的 node-neo4j 返回节点
我正在使用 node-neo4j 连接到 neo4j 图形数据库。我注意到,每当我尝试获取所有节点(例如用户)时,json 结果返回包含太多我不需要的信息。
这是返回所有用户节点的代码:
它给了我这些json响应;
无论如何只从密码返回结果的“数据”部分?或者我应该在将结果返回给客户端之前去除 node.js 服务器中不需要的部分吗?
谢谢!
node.js - NodeJs - 关于命名关系的 Neo4j 参数问题
我无法使用 params 对象来命名 2 个节点之间的关系,
这是代码
这是错误。如何使用参数来命名关系
错误:无效输入“{”:预期的空格或 rel 类型名称(第 2 行,第 28 列)“CREATE UNIQUE(位置)-[:{ country
}]->({name})”
node.js - 使用 node-neo4j 读取节点和使用 neo4j-shell 调试技能时遇到问题
我是 Neo4J 的新手。到目前为止,我成功安装并启动了 Neo4J 服务器,并通过运行命令进行了检查neo4j status
。
通过使用 node-neo4j 驱动程序向数据库添加和更新节点。
在我的 nodejs 服务器中,我创建了一个新数据库:
接下来,我插入一个新节点:
插入新节点时我没有遇到错误。但是,当我尝试读取此节点时
ReadNode 函数在第 48 行抛出以下异常(您可以在上面给出的代码片段中找到第 48 行)。
然后,我尝试通过检查我的数据库来调试我的进程,并尝试在命令行上neo4j-shell
键入dbinfo
,我希望看到我的数据库和已经插入的 Darth Vader 节点。
但是,dbinfo
什么都不返回!
如何使用 neo4j-shell 找到我的数据库和该数据库中的节点?
如何确保我成功插入了节点?如何读取已插入的节点?
你有什么主意吗?
先感谢您!
transactions - Neo4j 的密码交易是否被破坏?
TL;DR:我要么疯了,要么neo4j 的交易略有中断。看起来未提交的节点在已提交的事务之外可用,缺少属性 - 或者同样奇怪的东西。
我们的 node.js 应用程序使用 neo4j。其中一部分必须生成唯一的 ID。我们有以下密码查询,旨在定位 last:Id
类型的节点并尝试:Id
使用last_uuid+1
.
还有一个约束:
并且数据库被初始化以(:Id{uuid:1})
启动这种快乐。
应用程序代码基本上会重试上述查询,直到成功。如果同时命中两个或多个 Id 创建请求,则只有其中一个会通过,其余的将失败并由应用代码重试。
这很有效,直到我们并行尝试。
代码开始返回没有 uuid 的数据。经过大量调查,事实证明查询的写入部分(CREATE ...)以某种方式从没有 .uuid(或其他)属性的 MATCH 接收 :Id。这应该是不可能的。这是在这些节点上运行的唯一代码。
最奇怪(也许)的事情是,如果我保存i
'snodeid
以便在数据库中定位该节点,它实际上存在并且具有 .uuid 属性。
为了隔离这种行为,我写了一个 PoC:neo4j-transaction-test使用 nodejs 运行应该非常简单。
它基本上比上面的代码多一点点 - 尝试创建 Id、设置prev_label
、prev_nodeid
和prev_uuid
先前节点的 (i) 值。它针对在 localhost:9339 上收到的每个 GET 请求运行查询并输出:
当事情开始并发时,查询可能会失败:
这是意料之中的,它们被重试。如果我们以每秒几个请求(ab -n 1000 -c 10 http://localhost:9339/
)“猛击”服务器,我们最终会看到:
(最终,我的意思是几乎立即)一个节点回来了,没有 uuid、prev_uuid 或 prev_label。this_nodeid 和 prev_nodeid 指的是 neo4j 的内部 id。如果我们查找这些,从前一个 ( i
) Id 节点开始(按 nodeid - 20):
这正是它应该的样子。.uuid
和所有。确实创建了新的,就像上面返回的一样:
没有 prev_label 或 prev_uuid。这怎么可能?我错过了什么?是否有不完整的 :Id 节点泄漏到我的查询中?
我试过重启,擦除数据目录,擦除数据目录后重启,清理日志(没什么有趣的,甚至无聊,但在正确的时间 - 当上述情况发生时)。我现在正处于质疑我对这应该如何工作的理解的地步。
这是 12.04 和 neo4j 2.1.1。更多版本信息和Neo4j 启动/关闭日志。
我知道这不是创建 UUID 的最佳方式。这个问题是关于了解如果 neo4j 的事务按预期工作,这些结果是如何可能的。
neo4j - Neo4j 写入性能提升
我有如下场景:
目前,上述密码查询是按顺序运行的。我需要提高写操作的性能。
我认为 p,b1,b2,b3 的创建可以并行发生。完成此操作后,p 和 b1、b2 和 b3 之间的连接可以并行发生。另外,我认为上述查询可以在一个批次中进行,而不是单独的写入操作。
我正在使用neo4jphp和node-neo4j。
我认为我们有Transactional Cypher HTTP 端点和批处理操作。这些是否提高了写入性能?对于上述情况,哪个更好?
看起来 neo4jphp 支持批处理和密码交易。但不确定是否可以在 node-neo4j 中实现批量/密码交易。
neo4j - Neo4J 写入:当有大量写入时,CPU 为 100%
我在大约 1 分钟内运行了大约 3k 个写查询,CPU 达到 100%。这是 jstack 日志: jstack when CPU at 100%。
谁能告诉我 jstack 日志中发生了什么,以便我可以优化我的写入?
我正在使用 Node.js Neo4J 客户端(在 m3.xlarge AWS 实例上运行)来编写我的更改。
谢谢你。
performance - Neo4j 超级节点问题 - 扇出模式
我是图形数据库场景的新手,正在研究 Neo4j 并学习 Cypher,我们正在尝试对图形数据库进行建模,这是一个相当简单的模型,我们有用户,我们有电影,用户可以观看 电影,评价 电影,创建播放列表和播放列表可以有 电影。
问题是关于超级节点性能问题。我将引用我目前正在阅读的一本非常好的书——Rik Van Bruggen 的 Learning Neo4j 中的一些内容,所以这里是:
然后在图的某些部分都连接到同一个节点的数据集中会出现一个非常有趣的问题。这个节点,也称为密集节点或超级节点,成为图遍历的一个真正问题,因为图数据库管理系统必须评估与该节点的所有连接关系,以确定下一步将是什么图遍历。
书中提出的解决这个问题的方法是让一个 Meta 节点有 100 个连接,并将第 101 个连接链接到一个新的 Meta 节点,该节点链接到之前的 Meta 节点。
我看到官方 Neo4j 博客的一篇博文说他们将在未来解决这个问题(博文来自 2013 年 1 月) - http://neo4j.com/blog/2013-whats-coming-next-在neo4j/
更确切地说,他们说:
我们围绕“更大数据”计划的另一个项目是添加一些特定的优化来处理跨密集连接节点的遍历,这些节点具有非常大量(数百万)的关系。(这个问题有时被称为“超级节点”问题。)
你对这个问题有什么看法?我们应该采用元节点扇出模式还是采用每个教程似乎都在使用的基本关系?还有其他建议吗?
javascript - JS 功能对象构造函数 - Neo4j 数据库没有方法“查询”
我正在使用node-neo4j库以及 node.js、下划线和原型。
我正在尝试拥有一个扩展数据库适配器的模型。先上代码。
BaseModel.js:
Neo4jAdapter.js:
奇怪的是我得到的错误。我不会在此处发布所有 node.js / express 代码,但我正在使用 url 访问插入函数。我得到的响应如下:
消息:对象#
GraphDatabase 没有方法“查询”
错误:类型错误:对象#
GraphDatabase 没有方法“查询”
我的问题是:为什么数据库对象没有功能query()
,即使文档说它应该有一个?
可能的原因:我打赌在调用 insert 方法时适配器的 db 对象尚未填充,但我该怎么做呢?
谢谢