07 June 2014

    サーバースクリプトの状態遷移

     言うまでもなくclient側と言ってもWebサーバ上で動いているわけなのでユーザから見ればサーバーとして機能しているわけですが、TwitterAPIを使ってデータをDBに保存するサーバースクリプトに対してclient側ということです。
    state_machine gemを利用してサーバースクリプトの状態を管理しています。 状態遷移図

    • 状態遷移表

      status\method start store stop
      停止中(down) 待機中(prepared) - -
      待機中(prepared) - 集計中(storing) 停止中(down)
      集計中(storing) - - 停止中(down)
    • サーバー停止中のユーザー画面
      サーバー停止中
    • サーバー集計中のユーザー画面
      サーバー集計中
       ユーザ向け画面では「停止中」と「集計中」の2つの状態しかないのですが、EventMachineを使用しているサーバースクリプトでは、接続確立が完了した状態(post_initイベントが発生後)にならないとコマンドラインで渡したパラメータが有効にならないので、サーバースクリプトを起動した直後の状態を「待機中」として管理しています。
    • 停止中 —– サーバースクリプト停止中
    • 待機中 —– サーバースクリプトが起動しているが、TwitterAPIを呼び出していない状態
    • 集計中 —– TwitterAPIを呼び出しツイートデータをDBに保存している状態
      ※「集計中」から「待機中」には遷移できません(停止して再起動)。

    機能

    • server側スクリプトの制御(起動、終了、状態確認)
      ※遅いノートPC(Atom機)で試したところserver側スクリプト起動に時間がかかり、接続がタイムアウトすることがあったので5秒のsleepを入れています。
    • server側のスクリプトがDBに保存したツイートデータを集計してグラフ表示する。
      ※Twitterのデータ構造はハッシュタグを本文とは別に保持しているようですが、SQLで集計する際にハッシュタグで集計するのはコストがかかるので、本文の内容でgroup byするという単純なやり方で妥協しています。詳細は別記事にするつもりです。

    ER図

    ご覧の環境では、object要素がサポートされていないようです。PDFファイルをダウンロードしてください

    • Tweetテーブルへの書き込みはサーバースクリプトのみで、client側のRailsアプリからTweetテーブルへのアクセスはRead onlyです。
    • Servモデルはユーザがサーバースクリプトを起動する時に指定したTwitter検索タグとサーバースクリプトの状態を管理します。
    • ユーザは複数のTrackモデル(検索タグ)を保存できますが、サーバースクリプト起動時に指定出来るタグは一つだけです。

     



    blog comments powered by Disqus