# SECCAMP 2019 B1~3 Team B - @progfay - @Tenma_F - @cedr1c - @buuuuuun3939 --- # DB 設計 ### Follow 関係 - Twitterの実装を調べてみた - 結構複雑な構造を採用しているらしい - そもそも DynamoDB とは仕様が違うので、今回は別の方法を考えてみる --- - NoSQLの良さ - KV Storeが高速 - filteringがある - DBのテーブルとかも.ymlとかで準備できたら尚良い(今回は無し) --- ## Timelineでは、どんなデータを取得してくる? - e.g. 最後に読んだところから、今までを読む - e.g. 最新から100件を読む --- - タイムライン表示 - 視点は 時間 or 件数 ? → 両方組み合わせて - 時間: 最後に読み込まれた時間から、今までの投稿を持ってくる - 件数: 規定バイト以下なら全て表示する(そういう機能がある) - それを超えるはさらに古いものを「さらに表示」という扱いでparamsを提供しておく - 表示されてる中で最も古い投稿のtimestampを次の上限分を取ってくる際に再利用 --- ## 最低限しないといけないこと - フロント - follow 機能の追加 - timeline 表示機能の追加 - サーバー - follow アクションに応じて `following` テーブルを更新 - `posts` テーブルから、 `timestamp` → `following` でfiltering --- ## `following` Table | user_id | following | | ------ | ------ | | Text | `List<Text>` | - 今回はフォローだけ分かれば良い --- ### `posts` Table | uuid | timestamp | user_id | post | | ------ | ------ | ------ | - | | Text | Number | Text | Text | --- ## 進捗状況 - `/post` , `/follow` は実装ができた - `/timeline` の実装が間に合わず、完成はできなかった :sob: --- > REPORT RequestId: 47840d8f-ea3c-4080-b04a-0808f43b81ea Duration: 40.94 ms Billed Duration: 100 ms Memory Size: 1024 MB Max Memory Used: 97 MB - `following` 内の人でフィルターを掛けるやり方が分からなかった ```javascript following.map(user => `contains (user_id, ${user})`).join(' OR '), ``` - 時間での範囲指定もできなかった
{"metaMigratedAt":"2023-06-14T23:24:33.433Z","metaMigratedFrom":"Content","title":"SECCAMP 2019 B1~3 Team B","breaks":true,"contributors":"[{\"id\":\"b5165fef-3cfb-442a-9c78-a5e144f1963e\",\"add\":2169,\"del\":1096},{\"id\":\"c11589e9-d36f-4d56-baf9-cc7ce4587053\",\"add\":448,\"del\":163},{\"id\":\"3e2f5c23-96c5-403c-9265-167987fbbbe8\",\"add\":22,\"del\":12}]"}
    144 views