Twitterのストリームをさくらのクラウドに格納した


さくらのクラウドが提供しているデータベースにTwitterのストリームのデータを格納する方法のメモです。

やりたいこと

Twitter Streaming APIからパブリックタイムラインを取得し、さくらのクラウドのデータベースアプライアンス(MariaDB)にツイートをどんどん格納する。

やったこと

さくらのクラウドでデータベースアプライアンスの作成

さくらインターネットのクラウドサービスが提供しているデータベースアプライアンスを利用・
これはコントロールパネルから作成。
1日1回の自動でのバックアップ取得やphpMyAdminが組み込まれておりWebUIから全部完結するのは便利。
あと、IP制限もコントロールパネルから設定できるので手軽でした。

TwitterのAPIキーの取得

Twitter Developersからアプリケーションのカスタマーキーなどを取得

データを集めるFluentdサーバの作成、設定

今回はCentOS 7のサーバを作成。
そこにfluentdなどを入れてゆきます。

これらをインストールして td-agent.conf に追記します。

<source>
  @type twitter
  consumer_key hogehoge
  consumer_secret hogehoge
  access_token hogehoge
  access_token_secret hogehoge

  tag input.twitter.sampling
  timeline sampling
  lang ja
  output_format flat
</source>

<match input.twitter.sampling>
  @type mysql
  host 192.168.10.100
  database sakura
  key_names id, user_id, text, created_at
  sql INSERT INTO publictw (id, userid, text, createat) VALUES (?, ?, ?, STR_TO_DATE(?, "%a %b %d %H:%i:%s +0000 %Y"))
  username sakura
  password hogehoge
  flush_interval 10s
</match>

hogehogeの部分は適切な値に変更してください。
MySQLの設定はデータベース名やUsername/Passwordもコントロールパネルから設定したものを入力してください。ちなみに今回はデータを格納するためのテーブルとして publictw と言うものを作成しています。

結果


ちゃんとRDBMSにデータを格納できました。


こんな感じで見えます。


RDBMSなのでもちろんLike構文とか使えます。

こういうデータはDynamoDBなんかのNoSQLデータベースに格納するのが鉄板かなと思っていたんですが、本物のSQL構文が使えデータの読み書きに課金されないRDBMSが今のところはベストだと思います。
RDBMSはデータ量が増えたときに辛くなりますが、それくらいのデータを蓄えてから考えたいと思います。

参考情報

以下の情報を参考にさせていただきました。ありがとうございます。