2016-03-08 3 views
0

Добрый день,OrientDB создания края с функцией Javascript не работает

У меня есть два класса, одна из которых представляют госпитализаций (так называемых Ricoveri) и еще один, представляющие сбросы (называемый Dimissioni). Оба имеют свойство Nosologico, представляющее уникальный идентификатор входа.

Я написал функцию Javascript, вдохновленную одним из сообщений Luca Garulli, чтобы рекурсивно создать Edges между двумя классами в свойстве 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); 
} 
} 

Функция получает успешно создан и выполняется без ошибок, но это не создает Edge. Иногда весь сервер замерзает, и у меня нет другого выбора, кроме как убить его и перезапустить.

Есть ли что-то не так в этой функции?

Спасибо. QQ

+0

Я только что заметил это сообщение в окне командной строки сервера: «»»„Выберите из Ricoveri“возвращает набор результатов с более чем 10000 записей Проверьте, если вы действительно нужны все эти записи, или уменьшить. resultset с помощью LIMIT для улучшения производительности и используемой ОЗУ «10000 записей слишком мало для моих нужд. Как я могу достичь того же без этого ограничения? – QatQat

+0

HI, возможно ли, что в классе Dimissioni нет записи с тем же Nosologico, который находится в Ricoveri, вы можете попытаться вставить какую-нибудь распечатку («что-то»), для отладки –

+0

не волнуйтесь, это просто предупреждение, запрос делается в любом случае –

ответ

0

первую очередь я предлагаю, если вы heaven't уже сделано, чтобы создать UNIQUE_HASH_INDEXes на nosologico собственности в обоих классах.

Тогда в предположении, что каждый nosologico в Dimissioni также присутствует в 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

btw, индексы хэша являются fastern, я думаю –

0

может быть, я ошибаюсь, но, вы делаете запрос

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

то проверить длину результатов, но это довольно очевидно, что> 0 (вар ID исходит из вара b, который исходит из первого запроса на Ricoveri).

Так что я говорю, может быть, в var r вы хотели запросить у Dimissioni?

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

Да, извините, это typo. Я действительно изменил запрос из оригинала с более сложными и длинными именами. Я действительно проверяю существование Dimissioni, а не Ricoveri. – QatQat

+0

Я пытаюсь с исправленной функцией, и это работает для меня.Края правильно созданы –

+0

Спасибо Ivan за вашу поддержку. К сожалению, он по-прежнему не работает для меня, и часто он также приводит к сбою сервера. Но я начинаю думать, что моя установка может быть неисправной. У меня также возникают проблемы с неправильными краями и создаются дублирующиеся ребра, когда я запускаю пакетный скрипт для их создания. Может быть, потому, что сервер был частью двух кластеров серверов (один из них мертв)? – QatQat

Смежные вопросы