2016-03-08 84 views
0

好日子,OrientDB使用Javascript功能创建边缘不起作用

我有两个班,一个较入院(称为Ricoveri),另一种代表放电(称为Dimissioni)。两者都有一个名为Nosologico的房产,代表入场券的唯一标识符。

我已经写了一个Javascript函数,灵感来自卢卡Garulli的职位之一,递归创建两个类之间的Nosologico属性之间的边缘。

功能代码如下:

var g=orient.getGraph(); 
var b=g.command('sql','select from Ricoveri') 

for(i=0; i<b.length; i++){ 

var id=b[i].getProperty("Nosologico").toString(); 

var rid=b[i].getId().toString(); 

var r=g.command("sql", "select from Dimissioni where Nosologico = '" + id + "'"); 

if(r.length>0){ 
var sql2="create edge dimesso from " + rid + " to (select from Dimissioni where Nosologico = '" + id + "')"; 

g.command('sql',sql2); 
} 
} 

这个函数会得到成功创建并没有错误执行,但它不会产生任何边缘。 偶尔整个服务器都会被冻结,我没有其他选择,只能杀死它并重新启动它。

该功能有什么问题吗?

谢谢。 QQ

+0

我刚才注意到,在服务器命令窗口此消息:“””‘从Ricoveri选择’返回拥有超过10000条记录的结果集检查,如果你真的需要所有这些记录,或减少。结果集通过使用LIMIT来提高性能和使用RAM“”10000条记录对于我的需求来说太少了我怎样才能在没有这个限制的情况下达到相同的结果 – QatQat

+0

HI,是否有可能在Dimissioni类中没有记录与Ricoveri中的Nosologico相同?您可以尝试插入一些打印(“东西”);对于调试 –

+0

不用担心,这只是一个警告,无论如何查询完成 –

回答

0

首先我建议,如果你heaven't已经完成,就这两类nosologico属性创建UNIQUE_HASH_INDEXes。

然后假设每nosologicoDimissioni也存在于Ricoveri,并假设有较少Dimissioni比Ricoveri,以下查询应该是更有效的。

var g=orient.getGraph(); 
var b=g.command('sql','select from Dimissioni'); 
var id=""; 
var rid=""; 
var sql2=""; 

for(i=0; i<b.length; i++){ 

id=b[i].getProperty("Nosologico").toString(); 

rid=b[i].getId().toString(); 

sql2="create edge dimesso from (select from Ricoveri where Nosologico = '" + id + "') to " + rid; 

g.command('sql',sql2); 
g.commit(); 

} 

让我知道这是否有帮助。

伊万

+0

谢谢伊万,我已经评论过以前的回复。 Dimissioni和Ricoveri有一对一的关系,所以它不应该有任何区别。索引已经存在于Nosologico属性上,它是一个UNIQUE,而不是UNIQUE_HASH_INDEX,但我认为这不会导致不稳定和错误的结果。 – QatQat

+0

好吧,无论如何这个函数应该更有效率。请试一试。 tnx –

+0

顺便说一句,哈希索引是东部我认为 –

0

也许我错了,但你做的查询

var r=g.command("sql", "select from Ricoveri where Nosologico = '" + id + "'"); 

则验证结果的长度,但它是很明显,是> 0(VAR ID从VAR来b来自Ricoveri上的第一个查询)。

所以我在说,也许在你想从Dimissioni查询的变种r

var r=g.command("sql", "select from Dimissioni where Nosologico = '" + id + "'"); 
+0

是的,对不起,这是一个错字我实际上修改了原来的查询更复杂,更长的名字。我确实检查了Dimissioni的存在,而不是Ricoveri – QatQat

+0

我尝试使用您的更正功能,它适用于我。边缘被正确创建 –

+0

感谢Ivan的支持。不幸的是,它仍然不适用于我,并且经常会使服务器崩溃。但我开始认为我的安装可能有问题。我在运行批处理脚本来创建它们时也遇到了错误边缘和创建重复边缘的问题。可能是因为服务器是两个服务器群集的一部分(一个已经死了)? – QatQat