2017-08-18 8 views
1

Neo4jデータベースに保存されているTwitterデータをストリームするアプリケーションがあります。私が保存しているデータは、つぶやき、ユーザー、ハッシュタグとそれらの関係(ユーザー投稿のツイート、ツイートタグハッシュタグ、ユーザーリツイートツイート)です。 は今、私は私が何をすべきか、新しいつぶやきを取得するたびに次のとおりです。クエリーにより、Twitter-Streamアプリケーションのデータ保存が遅すぎる

  • チェックデータベースがすでにつぶやきが含まれている場合:もしそうなら、私は新しい情報(カウントなどのリツイート数、)でそれを更新し、他の私は、それを保存します
  • データベースに既にそのユーザーが含まれているかどうかを確認します:もしそうなら、新しい情報で更新します。それ以外は保存します。
  • データベースに既にハッシュタグが含まれているかどうかを確認します。

などと同様に、関係を保存するためのプロセスです。ここで

クエリです:

static String cqlAddTweet = "merge (n:Tweet{tweet_id: {2}}) on create set n.text={1}, n.location={3}, n.likecount={4}, n.retweetcount={5}, n.topic={6}, n.created_at={7} on match set n.likecount={4}, n.retweetcount={5}"; 
static String cqlAddHT = "merge (n:Hashtag{text:{1}})"; 
static String cqlHTToTweet = "match (n:Tweet),(m:Hashtag) where n.tweet_id={1} and m.text={2} merge (n)-[:TAGS]->(m)"; 
static String cqlAddUser = "merge (n:User{user_id:{3}}) on create set n.name={1}, n.username={2}, n.followers={4}, n.following={5}, n.profilePic={6} on match set n.name={1}, n.username={2}, n.followers={4}, n.following={5}, n.profilePic={6}"; 
static String cqlUserToTweet = "match (n:User),(m:Tweet) where m.tweet_id={2} and n.user_id={1} merge (n)-[:POSTS]->(m)"; 
static String cqlUserRetweets = "match (n:Tweet{tweet_id:{1}}), (u:User{user_id:{2}}) create (u)-[:RETWEETS]->(n)"; 

それはデータを保存するには非常に遅いので、私は私がデータを毎回スキャンし、すべてのこれらのクエリを実行しなかった場合、このシステムは、より良いパフォーマンスを持つことができることとします。

私のアプリケーションを改善するためのアドバイスがありますか?

ありがとうございます。これが愚かに見える場合は、事前にお詫び申し上げます。

答えて

1

次のラベル/プロパティのペアには、indexes(または適切な場合はuniqueness constraints)があることを確認してください。これにより、照会で同じラベルのすべてのノード(照会の開始時)をスキャンすることを避けることができます。ところで

  • :User(user_id)
    • :Tweet(tweet_id)
    • :Hashtag(text)
    • は、クエリのカップルを簡略化することができる(ただし、これはパフォーマンスに影響を与えるべきではありません):

      static String cqlAddTweet = "MERGE (n:Tweet{tweet_id: {2}}) ON CREATE SET n.text={1}, n.location={3}, n.topic={6}, n.created_at={7} SET n.likecount={4}, n.retweetcount={5}"; 
      static String cqlAddUser = "MERGE (n:User{user_id:{3}}) SET n.name={1}, n.username={2}, n.followers={4}, n.following={5}, n.profilePic={6}"; 
      
    +0

    感謝をあなたはアドバイスをしています。残念ながら、インデックスや制約を追加してもパフォーマンスは向上しませんでした。 – sirdan

    関連する問題