6時だョ!!全員集合!!

Rails・JavaScrictを中心にアウトプットします。

2022年8月21日 DBのパフォーマンス考慮などのメモ (byやの)

内容と経緯

実務にてパフォーマンスに関する相談があり、その中で話題になった知識や相談に乗る上(パフォーマンスを考慮する上)で意識すると良い点などを走り書きのメモにはなりますが、こちらに書き起こしておきます。

パフォーマンス

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

Web関連技術

  • クローリング&スクレイピング
    • Selenium や Mechanizeなどのライブラリを使われることが多い
    • スクレイピングはサイト内の情報を取得する技術
    • クローリングはプログラムが「Webサイトを定期的に巡回し、情報を取得・保存する技術