ダッシュで奪取

ゲーム、読書、人生

『Software Design 2022年9月号』を読んだ

息子氏の本めくりブームのため、表紙がボロボロになってしまいました。

特集1 MySQL アプリ開発者の必修5科目

データ型の説明

  • TEXT 型
    • インデックスを付けたい場合は、先頭の文字数を指定して作成する必要がある
  • ENUM
    • リストから選択された1つの値を持つ
    • 文字列型より少ないバイト数でデータを格納できる
    • ORDER BY する場合にはインデックスが使用される
      • CHAR に CAST したり工夫が必要
  • JSON
    • 検索とか更新もできる
    • TEXT 型のカラムに JSON そのまま突っ込んだりするよりは、こちらを使った方が良さそう
  • 他に適切な型があるかもしれないのに、そもそも存在を知らないと選択肢にすら出てこない
    • 必要になったとき「この型の方が良いのでは?」と思えるようにしたい

インデックス

  • 作成されていない場合の挙動
    • めちゃくちゃ効率悪い!
    • 「とりあえずキーっぽいのに付けておく」運用をしていたことがあり、そういうものだと思っていた
    • 違った
  • クラスタインデックス
    • MySQL が自動で作成するインデックス
    • これを使った検索が一番高速
  • セカンダリインデックス
    • 自分で作ったインデックス
    • クラスタインデックスの検索よりはちょっと遅い
  • ベストプラクティス
    • プライマリキーを定義しよう
    • プライマリキーの列サイズはなるべく小さくしよう
    • プライマリキーの更新はできればやめよう
  • Invisible Column
    • 指定したカラムを SELECT や INSERT、UPDATE の処理から見えなくする
    • アプリケーションから認識されなくなる
  • インデックスが利用されるケース、されないケース
    • 設定したつもりでも、使われない場合がある = 全文検索になってしまう
    • EXPLAIN で確認する
  • インデックスを利用しないようにするオプションがある
    • インデックス使用時、未使用時を比較したいときに使う

トランザクション

  • MySQL では、トランザクションの開始宣言をしないとオートコミットになる
    • 勝手にコミットされる
    • 基本オートコミットされているので、あまり意識したことがなかった
  • 特に理由がなければ BEGIN ではなく、START TRANSACTION を使う
    • オプションが使えるため
  • 暗黙的なコミット
    • コミットしていなくても、コミットされるときがある
    • インデックスの追加など
  • セーブポイント
    • 便利そう

デッドロック

  • テーブルロック、行ロック、共有、排他
  • InnoDB では、データの変更時に行ロックを取得する
  • インデックスを使用しない場合、全行ロックになる
  • 外部キーを使うと、参照されるテーブルにも行ロックがかかる
  • 直近のデッドロックはログが保存されている
    • 直近しか見れない
    • 全部見たければ設定を変更する
  • デッドロックの発生率を下げる
    • 範囲はなるべく小さく、狭く
    • ロックがかかる順番を揃える

レプリケーション

  • レプリケーションのタイプ
    • 非同期、準同期、グループ
  • バイナリログ
    • 3種類ある
    • ログの容量とか、使うクエリによってはデータ不整合の起きる可能性があったりとか、それぞれメリットデメリットがあるので適宜選択する
  • レプリケーションエラーが発生しやすい要因
    • レプリカ側のデータを変更した
    • バイナリログが自動ローテションしていて、同期前に消えてしまったとか
    • 同期遅延

特集2 OSS ソースコードリーディングのススメ

  • なるべく自分が理解していて、小さくて、馴染みのあるコードがよい
    • いきなり「Linux 読んでみるか〜」とかしない
  • github.comgithub.dev にすると、ブラウザ上で VS Code っぽいエディタで閲覧できる

その他

  • 今さら聞けない SSH 前編
    • OpenSSH:Linux に含まれている SSH サーバ
      • 管理者権限で起動しておくと、SSH ログインを受け付ける
      • 起動されていないとログインできない
    • ~/.ssh/config
      • いちいち IP アドレスとかホスト名とか入力するのは面倒なので、よく使うものはここに書いておく
      • ssh ホスト名 とすれば、このファイルを探す → 該当する設定があればそこから取得して SSH ログインできる
        • 社内の踏み台サーバに接続するとき使っていたらしい
        • よく分かっていないけど、入社時セットアップで言われた通りに設定していた
        • このファイルを確認してみた
          • ちゃんと書いてあった!