Я пытаюсь построить график различных объектов, которые нравятся людям на Facebook, чтобы создать базовый механизм рекомендаций для перекрестных ссылок.neo4j (cypher) очень медленный
У меня есть данные для разных сущностей (фильмы, книги, музыка и т. Д.). Узлы создаются для каждого элемента со свойствами как имя элемента (имя фильма, книги и т. Д.) И тип сущности элемента (фильм, книга и т. Д.). Любые два узла имеют отношения между ними, называемые «сродство». Эта связь также обладает свойством «силы», которое равно no. людей, которым понравились эти два предмета.
Я использую пользователей FB для подключения этих узлов. Пользователи FB также являются узлами в графике со свойствами как имя человека и тип как человек. Связь между этими узлами и узлами элементов называется «любит». Теперь, если человеку понравился фильм, я хотел бы рекомендовать ему книги или музыку, пройдя график. Это ничтожество запрос я пытаюсь пройти график:
START root = node(<LIKED_MOVIE_NODE_ID>)
MATCH p = root-[rel1:affinity*..3]-(movies)<-[rel2:likes]-(persons)-[rel3:likes]->(books)
WHERE HAS(movies.type) and movies.type = "movies" and HAS(persons.type) and persons.type = "person" and HAS(books.type) and books.type = "books"
RETURN books
Это работает очень медленно, иногда принимая до 500 секунд. У меня есть 13000 фильмов, 2000 книг и 3000 музыкальных узлов. Подключение их - 16000 человек. Все вместе есть около 300 000 отношений.
Мои вопросы:
я делаю что-то не так? Есть лучший способ сделать это? Я новичок в neo4j. Я пробовал некоторые из методов настройки neo4j graphDB. Я увеличил размер мини-кучи до 4 ГБ и запускаю его на 8-ядерном компьютере с 32 ГБ оперативной памяти.
Я хочу знать силу отношений rel1 и числа rel2 и rel3. Rel1 обладает силой собственности. Я не смог это узнать,
Просьба сообщить, что я на грани отказа от neo4j и возврата к SQL. По крайней мере, это работает. :(
Regds, Paritosh