问题标签 [graphaware]
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.
php - Codeigniter:自动连接到 Neo4J 数据库
我一直在我的个人项目中使用 codeigniter 2.x。数据库是 MySql,但我决定迁移到 Neo4J。
我使用了已安装的名为 GraphAware 的库。到目前为止,它按预期运行。我的测试代码如下:
到目前为止,一切都很好!
我的问题如下:如何在页面创建时自动连接到 neo4j 数据库,这样就不必每次都手动创建连接?
在我看来,上面的代码会变成这样:
我一直在codeigniter中搜索,由于对一些核心概念缺乏了解,我似乎无法找到解决方案。
你知道如何进行吗?
谢谢。
洛伊克。
php - 只能保存单个属性
我有以下“用户”类:
我正在尝试使用它,如图所示:
但是,如果我在 Neo4j“浏览器”中运行以下查询,我可以看到正在创建以下内容:
似乎跳过了其他属性的创建。
我相信我错过了一些非常基本的东西。上面的代码有什么问题?
neo4j - 密码错误:“不知道如何比较”。可能的错误?
所以我正在做一个涉及日语的个人项目。在这个项目中,我还使用了 Neo4J 数据库。
我偶然发现了一个非常特殊的问题,我希望得到您的专业知识。
基本上,我从我的数据库中检索了一些日文字符(称为平假名)。它没有什么特别之处。我将平假名字符分成几个子类别,基于一个音节由一个字符(例如'に','ni')或两个字符(例如'にょ','nyo',这是由 ni (に) 和 yo (よ)) 组成。
所以我的类别中有以下结构(这里有点简化):
这些类别中的每一个都链接到包含平假名值(如に或にょ)的节点(此处称为项目)。为了检索这些字符,我进行了一个查询,听起来像“给我属于列表“平假名”子列表的所有字符。实际代码没有什么特别之处,如下所示:
由此,我得到以下错误:
从一开始,我就很困惑数据库引擎不知道如何比较这些,因为它们似乎具有相同的类型(NodeProxy)。另外,我不觉得我的查询试图将节点的值与其他节点进行比较。
无论如何,我开始修改查询,因为我之前使用过它并且它有效。搜索了一段时间后,我注意到,在我的 return 子句中,如果我将kana.value 作为 item更改为,让我们说kana.value 作为 kana,它突然又可以工作了。
我又更改了该值并得到以下结果:
- kana.value 作为项目:KO
- kana.value 作为假名:好的
- kana.value 作为测试:KO
- kana.value as es : KO
- kana.value 作为问题:KO
- kana.value as romaji : KO
- kana.value 作为平假名:KO
- 返回假名值:KO
- kana.value 作为:KO
- kana.value 为 kanak : KO
因此,无论出于何种原因,只有“kana.value as kana”才有效……
你们知道发生了什么吗?这可能是一个错误而不是我的错误吗?
洛伊克。
PS:我使用php中的graphaware库调用数据库,但问题无关,因为错误也发生在noe4j浏览器中
php - 致命错误:GraphAware\Neo4j\Client\HttpDriver\Session::run() 的声明
这里有任何帮助:
致命错误:GraphAware\Neo4j\Client\HttpDriver\Session::run() 的声明必须与 C 中的 GraphAware\Common\Driver\SessionInterface::run($statement, array $parameters = Array, $tag = NULL) 兼容:\xampp2\htdocs\testno\vendor\graphaware\neo4j-php-client\src\HttpDriver\Session.php 在第 24 行
这是主网站目录中的 index.php
新的 composer.lock :
neo4j - 如何使用 NEO4J-PHP-OGM 访问超过 2 个关系的节点属性
我无法理解如何使用 neo4j-php-ogm 库访问超过 2 个关系的属性。
例如,我有一个“用户”节点,它连接到许多“资源”节点,而这些节点又连接到固定数量的预定义“元资源”节点。“资源”节点具有属性,“元资源”节点具有每种资源类型的元属性。我如何知道从“用户”节点开始访问“元资源”节点的属性?在 Neo4j 中,这样一条路线如下所示:
我的示例用户实体:
我的示例资源实体:
还有我的示例 MetaResource 实体:
最后是来自我的控制器的代码,它建立了关系:
如果我现在查看 Neo4j 网络控制台,所有关系和节点都已正确插入。
现在,如果我获得了用户的资源,$user->getResources()
我成功获得了所有资源对象,但是“$metaResource”属性始终为 NULL,而不是我的 MetaResource 实体的预期对象。例如,如果我这样做:
然后它只输出 NULL。
另一方面,如果我直接获取资源对象(例如使用$resource = $em->getRepository(Resources::class)->findOneById(123)
),然后尝试使用$resource->getMetaResource()
它获取连接的 MetaResource。我错过了什么?
干杯
neo4j - GraphAware TimeTree 中的问题 - 分钟分辨率的错误插入
编辑:解决的问题。
TL;DR:TimeTree 需要自纪元以来的毫秒数。我使用自纪元以来的秒数作为我的时间值。
版本:
我最近开始使用时间树按时间范围搜索我的图表。前几天当我进行这样的查询时,我注意到了一些有趣的行为:
请注意,这里的时间范围仅相隔 1000 秒。奇怪的是,我的返回节点(它们都是同一类型)看起来像这样:
具体来说,请注意该值time:1308026580
不在我提供的范围内。现在,我制作了这个示例(因为查询现在需要永远运行),但我上次运行查询时得到了类似的结果。
所以我调查了一下。首先,这是我将数据插入 TimeTree 的方式:
注意resolution: "Minute"
. 当我第一次将这个查询写成一个函数时,我忘了指定分辨率。因此,当我使用此方法添加大约 4-5 条记录时,分辨率默认为“Day”。
我不认为这是一个问题,所以我只是将这些记录以“Day”分辨率保留在图表中,随后的所有内容都将在“Minute”分辨率下。
所以我决定使用 Neo4J 浏览器查看图表,看看是否有任何奇怪的事情发生。从这里,我执行了以下查询:
啊哈!我注意到所有附加到Minute
节点的记录在时间价值方面都是连续的记录。例如:
KAOU_20110613v20001_0956
有time:1307998620
KAOU_20110613v20001_0957
有time:1307998680
这些连续的记录都相隔 1 分钟。(即时间1 - 时间2 == 60)
那么为什么将它们添加到同一个 Minute 节点?我使用了一个纪元时间转换器来验证这些时间戳实际上相隔 1 分钟,并表示它们的预期日期。
我相信这个问题会导致我的性能滞后,因为我所有的记录都在 Minute 节点上。
所以,要么我错过了一些关于时间值和时间树如何处理它们的东西,要么是其他一些可疑的事情正在发生。
neo4j - neo4j 时间树冻结的原因是什么?
我在 Neo4j 中遇到了一个奇怪的问题。我最近一直在使用 GraphAware TimeTree 并填充它直到昨天进展顺利。由于我犯了一个错误,我不得不重建树,所以我让一个脚本在一夜之间运行(nohup)。
今天回来发现我的脚本只跑了3分钟!
我在工作时注意到了这种行为,但我认为在我不活动时将其放置一夜会有所帮助。如果可能发生争用,我还关闭了我的其他 java 服务器进程。在这一点上,我的服务器只会在后台运行一个 python 龙卷风服务器,它不是很庞大,并且不会获得太多流量(一天几次点击)。
总而言之,我的系统中有大量可用的 RAM,CPU 没有在其他地方使用,并且没有其他进程在我的机器上运行大量 IO。使用top
/atop
显示具有可用资源的健康系统。
这是我的脚本正在执行的高级操作:
我的处理程序在构造函数中创建驱动程序和会话__init__
:
我的生成器提供meta_id
的值是图表中节点中的唯一属性值。
该populate_timetree()
函数创建以下语句:
一切都很好,我第一次去。在弄乱了我的时间值之后,我删除了数据库,重新启动,然后再试一次。只有这一次,当我调用关闭会话时,我的程序会冻结:
注意:我实际上在我的__del__
解构器中调用它,(我知道这可能被认为是不好的做法,但到目前为止它一直对我有用并且适合我的需要。)
我已经仔细检查了我所有的代码是否有恶意的 readline 语句/任何可能导致它暂停的东西。还重新编译了我的包,其中包含所有这些代码。我知道事实上它被困在这个session.close()
声明中。
所以我尝试使用 Neo4j-shell 工具来看看是否有什么不同。首先是快速响应检查:
好的,一切都好。现在我尝试使用 timetree 调用单个值:
繁荣。Neo4j 卡住了!需要明确的是,我知道 MATCH 语句不会永远在这里,因为我这次只在我的数据库中放入了大约 200 万个节点,并且单独调用 match 语句运行得非常好。我什至为这个独特的属性设置了一个索引(参见上面的模式调用)。
那么这里发生了什么?如果我只插入一个节点,我认为树的初始创建应该不是太大的问题。我的第一次尝试似乎完美无缺。我不确定这次我做了什么不同,除了用我拥有的 5800 万条记录中的 200 万条填充我的数据库。(所以它应该更快)。
实际上,我让这个命令运行了几个小时,而且它在我的系统上也只运行了几分钟。我对这里发生的事情感到非常困惑。有没有人有任何想法?无论如何我可以看到neo4j正在积极地处理这个命令吗?(请记住,我使用的是社区版)
我在 CentOS 7 服务器上运行 neo4j 的 3.0.3 版本和 3.0.3.39 timetree / graphaware。
我唯一的想法是,我一直在调用 cypher 语句并在它们提交这么多次之前取消它们,无论是通过 python 还是命令行 shell 工具。通过在完成之前取消大交易,我是否有可能过多地与交易管理器混淆?
例如:
然后control-C
在它运行了大约2个小时后没有完成。
更新:
好的,所以我调查了我的日志文件并发现了一些问题。由于内存不足,我的线程似乎被阻塞了。我猜我的最大堆大小受到人为限制,并且没有使用我机器上的可用资源。(也许??)。所以我手动设置dbms.memory.heap.max_size=16000
.
现在问题似乎消失了!我想我很困惑,因为我希望 Java OOM 出现在neo4j-shell
工具的响应中,而不是像取得进展一样空转。
neo4j - 如何有效过滤 Neo4j 中多个过程调用的结果
我设置了一个 GraphAware 时间树和空间 r 树来引用我图中的大量节点。我正在尝试按时间和空间搜索这些记录。
单独我可以在大约 5 秒内从这些查询中收集结果:
当我尝试过滤这些结果时,性能会急剧下降。Neo4j 已经在我的系统中使用了大量的内存,所以我的印象是这个命令的内存占用在我的系统上太多了,并且查询永远不会完成。(我正在使用 neo4j-shell 来运行这些命令)
我想知道有效过滤这两个语句调用结果的最佳方法是什么。我尝试使用 REDUCE 子句,但无法完全弄清楚语法。
作为一个附带问题,鉴于这是我将向我的数据库发出的最常见的查询类型,这是一种做事的好方法(如使用时间树和 r 树引用同一组节点)?我还没有在 neo4j 中找到任何其他支持在单个结构中同时索引空间和时间的工具,所以这是我当前的实现。
neo4j - Graphaware neo4j-php-client | 无法捕获 Neo4jException
我在我的项目中使用 Postgresql + Neo4j。如果 neo4j 查询失败,我需要回滚 postgres 查询。所以,我需要在我的代码中捕获 Neo4jException。但是还做不到。感谢帮助。
这是我的工作代码。但正如你所看到的,我没有一个 catch 块来捕捉 neo4j 异常。所以我添加了这个,但没有运气。还尝试将 withNeo4jExceptionInterface 作为异常类(绝望的时候)。(顺便说一句,我使用错误的类型查询来获取异常)
也试图在没有运气的情况下做到这一点。
php - 如何在 neo4j-php-client 中检测失败的事务
我在 PHP 5.6.24 上使用 graphaware/neo4j-php-client 4.5.1 和 Neo4j 3.0.4。
我不明白如何找出交易是否失败。
例如,我尝试删除仍然有关系的节点。如果我在这个简单的查询中运行 DELETE:
......我得到了这个异常,这是我所期望的行为:
但是当我将相同的查询包装在事务中时:
... Neo4j 不会删除节点,但我看到了这个(暗示成功)而不是异常:
我错过了什么,还是这是一个错误?提前致谢!