SNSに投稿した時間を可視化したい
Why
How
- Ruby on Rails
- PostgreSQL
- マストドンもPostgreSQLだから
- MySQLは触ったことがあったので、他のDBも触ってみたかったから
進捗
概ね出来てきた。
豆
GitHubっぽい表は、cal-heatmapを使用
ActiveRecordで、1分毎の投稿を集計して返す
Status.select("count(*) as toots, date_trunc('min', tooted_at) as t").where(user_id: id).where(tooted_at: start..stop).group('t')
↑の結果をJSONにして、ブラウザなりに返す
render json: stats.map{|s| [s.t.to_i, s.toots]}.to_h
困りどころ
cal-heatmapが表示用のJSONを取得するとき、こういう感じのパラメータが飛んでくるが、
start=2017-06-27T13:00:00.000Z&stop=2017-06-28T12:59:00.000Z
上述のselect文だと最後のマス目のcount()が合わない。2017-06-28T12:59:00.000Zからの一分間で投稿されていた場合はカウントできなくなるから。
毎回countするよりは、集計結果を別テーブルにして、ユーザーがSNSへの投稿を取得するのと同じタイミングで更新していくのがいいんだろうなという気持ちではある。
今読んでるもの
PostgreSQLのEXPLAINの読み方https://www.postgresql.jp/document/8.3/html/using-explain.html