かどで日記総合wiki

かどで日記のもろもろが書かれています。

もくじ

ADR 8 : 稼働状況表示機能の導入

Status : 🟢 承認

Context

かどでポータルやかどでペーパーにおいてかどで日記の稼働状況が必要になっているが現状データも API もない。

Decision

全体の日記数の推移や処理した統計数の推移をデータベースに保存し、API から取得できるようにする。
アクセス数などではなく、ユーザーの数などかどで日記のコア機能の利用状況によるもの。
アクセス数は GA など使いたい。

データベース構成

モデル:OperationCoreTransitionPerHour
テーブル:operation_core_transition_per_hours

今後レスポンス速度のテーブルなども増える可能性があり、あくまで日記のコア機能に注目しているという意味で OperationCore。
あくまで現状のステータスでなく推移を表すため TransitionPerHour。

作成後更新しないため、created_at のみ。

id user_total diary_total statistic_per_date_total created_at
1 100 3000 2870  
2 101 3012 2920  
3 103 3040 3002  

頻度

1 時間に 1 度程度 Cron で走らせることを想定。完全なリアルタイムだとそもそも RDB じゃなくて Redis を用いるべき。
そこまで細かい頻度では必要ないと思っている。

データベースの圧迫

MySQL 系の行上限は無いが、id のオーバーフローはありえて、laravel の migrations で定義する id()は unsigned big int になり、この上限値は 18446744073709551615。
1 時間に 1 つ行を追加する想定だと、1 日で 24 行、1 ヶ月で 720 行、1 年で 8640 行。オーバーフローの懸念は不要。
とりあえず定期削除は走らせなくて良さそうだが、SELECT が遅くなるのは困るので場合によっては古いデータを削除する Cron を入れる。

API の仕様

かどで日記で API を生やすのはこれが初めてなので、命名は慎重に扱う必要がある。
フロント側の処理を減らしたい方向性なので、GraphQL みたいなたいそうなものでなく、フロント側に併せてバックエンドの API の中身を調整していきたい。
あくまで取得のみであるから、RESTFul である必要もない。

ただ今後も踏まえて命名は大事。

リクエスト

とりあえず現状はすべて GET で返すようにする。 レスポンスは JSON。

エンドポイント 役割
/api/OperationCoreTransitionPerHours/relative/day 直近 24 時間のデータを返す
/api/OperationCoreTransitionPerHours/relative/week 直近 1 週間のデータを返す
/api/OperationCoreTransitionPerHours/relative/month 直近 1 ヶ月のデータを返す

絶対形式での取得エンドポイントも実装する場合は/absolute?start=date&end=date みたいな感じを予定しているが、現状特定の期間のデータは現状必要ない上、チャンクしたりページネーションしたりが手間なので一旦見送る。

Consequences

Pros

Cons

Notes

References