2022年8月21日 DBのパフォーマンス考慮などのメモ (byやの)
内容と経緯
実務にてパフォーマンスに関する相談があり、その中で話題になった知識や相談に乗る上(パフォーマンスを考慮する上)で意識すると良い点などを走り書きのメモにはなりますが、こちらに書き起こしておきます。
パフォーマンス
- 遅延処理(ジョブキュー)
- レコードを大量に発行するような重たい処理はsidekiqなどderayed jobなどのライブラリを使用するのが一般的
- ジョブ(処理の内容)、キュー(ジョブを管理する場所)、ワーカー(キューを監視し、キューにジョブが保存されたら、キューからジョブを取り出し、そのジョブを実行)
- ジョブ、キュー、ワーカーは昔は自前で実装していたが現在ではsidekiqなどのライブラリが出てきたためよしなに管理が出来る。
- レコードを大量に発行するような重たい処理はsidekiqなどderayed jobなどのライブラリを使用するのが一般的
- DB
- indexを貼る
- keyをメモリに設定することで高速検索ができる
- 数千〜数万はインデックスを貼っておけばパフォーマンスは大丈夫(数秒)
- 数百万レコードなどになると色々な条件によるが数十秒かかったりする(UX的には致命的)
- ローカルではレコードが少ないので早いのは当たり前
- サーバーを増やす・不要なレコードを削除するなどの対応がある(基本)
- 基本的には正解はなく出来ることを全部やることでパフォーマンスを強化する
- ヒアリングが重要
- 不要なデータがあるか
- 最適解はヒヤリングして組み合わせてオリジナルで提案する
- ログ化が適切かなども視野に入れてみる
- ログ化
- Amazon RDS
- Amazon Aurora (クラウドのために再設計されたデータベース)にするとパフォーマンスが上がる
- 冗長構成する(横展開)
- 値段が高い
- Amazon Aurora (クラウドのために再設計されたデータベース)にするとパフォーマンスが上がる
- SQL
- 並び替え処理などをデータベースで行うとレコードをすべて並び替えするなどしてしまうので重くなる
- データベース内のレコード全体に影響を与えてしまうことがあるため、取得したあとにcontrollerで処理を加えるなどを考慮する書き方が出来るようになると良い
- indexを貼る