2015-02-16 2 views
0

Я уже некоторое время пытался создать много заметок в py2neo. Узлы основаны на прямом потоке твитов, где я хочу построить твит, информацию о том, кто их твиттер и Связь между твитами и другими узлами (например, повторные твиты, упоминания пользователей и теги).Создайте множество узлов в Neo4j, используя Py2neo

То, что я пробовал, представляет собой большой запрос cypher, используя MERGE для создания/получения идентификатора пользователя и твита и связывания их. Моя идея заключается в том, чтобы иметь следующие узлы:

  • узел пользователя
  • Tweet
  • Теги
  • Местонахождение (для твита)
  • Адрес (для пользователя)
  • Язык
  • Пол
  • TimeZone

А ссылки, где мне нужно поиск:

  • Упоминания
  • Re-чирикать

Это много письменной форме, и я что-то вроде этого:

statement = "MERGE (tUser:TwitterUser {id:{tuID}}) " \ 
      "ON CREATE SET " \ 
      "tUser.displayName = {tdNAME}, " \ 
      "tUser.summary = {tdSummary}, " \ 
      "tUser.link = {tdLink}, " \ 
      "tUser.preferredUsername = {tdPreferredUsername}, " \ 
      "tUser.account_created = {tdAccount_created}, " \ 
      "tUser.last_lookup = 'Newer' " \ 
      "" \ 
      "MERGE (user:Person {name:{userName}})-[:twitter_acct]->(tUser) " \ 
      "" \ 
      "MERGE (gender:Gender {gender: {GENDER}})" \ 
      "MERGE (user)-[:has_gender]->(gender) " \ 
      "" \ 
      "MERGE (user)-[:tweeted]->(tweet:Tweet {id:{tID}}) " \ 
      "ON CREATE SET " \ 
      "tweet.type = {tType}, " \ 
      "tweet.link = {tLink}, " \ 
      "tweet.body = {tBody}, " \ 
      "tweet.postedTime = {tPostedTime} " \ 
      "" \ 
      "MERGE (timezone:TimeZone {name:{timeZoneName}}) " \ 
      "MERGE (user)-[:has_time]->(timezone)" \ 
      "" \ 
      "MERGE (user)-[:use]->(generator:Generator {name: {generator}}) " \ 
      "ON CREATE SET " \ 
      "generator.link = {generatorLink} " \ 
      "" \ 
      "MERGE (tweet)-[:tweeted_in]->(tLocation:Location {name: {tLocationName}}) " \ 
      "MERGE (tLocation)-[:in]->(tCountry:Country {name: {tCountryName}}) " \ 
      "" \ 
      "MERGE (user)-[:lives_in]->(uLocation:Location {name: {uLocationName}}) " \ 
      "" \ 
      "RETURN user" 

Проблема: Когда я пытаюсь вставить твит в мою базу данных Neo4J, он не может следовать, также, когда Я пытаюсь сделать это с помощью набора данных, которые я сделал, он все еще делает это медленно. Я пытался использовать пакетные пакеты, но все же замедлялся.

Будет ли солюшение делать меньше нулей, получить лучшую машину или ...? (И как мне получить правильный идентификатор, например, пользовательский, если я перезапущу службу).

ответ

2

Трудно узнать, в каком направлении указывать вас без какого-либо количественного определения «много» и «медленного». Это очень субъективные термины.

Вообще говоря, вы захотите, чтобы вы объединили несколько взаимодействий с сервером в один запрос либо с помощью большой транзакции Cypher, либо с помощью (устаревшего) пакетного механизма. Разумеется, вы можете получить довольно много производительности из интерфейса REST, если использовать его умно.

Вне этого вы можете, конечно, посмотреть на серверную сторону: возможно, расширение Java или, для начальных нагрузок, один из инструментов массового импорта.

+0

Прошу прощения за то, что я был точным. Я не уверен, что я не уверен. С «большим» считают 100 твитов пр. сек и «медленный», конечно, до машины. Для моей машины требуется около 10 секунд, чтобы ввести 1000 твитов (с, твит, пользовательский твиттер, lang, in-reply-to и т. Д.). Затем он начинает замедляться. Есть ли «лучшая практика» того, как писать из json -> python -> py2neo -> neo4j server? –

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