[2022年9月号] Software Design(技術評論社) サマリー+個人メモ

[2022年9月号] Software Design(技術評論社) サマリー+個人メモ
みるみ

Software Design の2022年9月号について、

  • ざっくり内容紹介
  • 個人的に気になった記事やポイント

をまとめている記事です。

サマリー記事の一覧はこちら

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

  • データ型
    • MySQL 5.7以降はJSONデータ型も対応
    • 数値データ型
      • 整数型(真数値)
      • 固定小数点型(真数値)
      • 浮動小数点型(概数値)
      • ビット値型
    • 日時データ型
      • YEAR型
        • MySQL 8.0.17以降では非推奨
          • バージョン的にはかなり最近
      • TIME型
    • 文字列データ型
      • 文字列型
        • ここにCHAR型とVARCHAR型がはいる
        • TEXT型も
      • バイナリ文字列型
      • 列挙型
        • 65535個かのリストから選べる文字列オブジェクト
      • セット型
        • 列挙型の64個&複数選択可能バージョンみたいな感じ
    • 空間データ型
      • PostGISとだいたい一緒だった、初めて見た
    • JSONデータ型
      • 格納されるときはLONGTEXTとかになる、シリアライズされるってこと?
      • でもJSON的な便利機能が使えて色々メリットがある
  • インデックス
    • 仕組み
      • オプティマイザが指定のカラムにインデックスがあることを認識する
      • インデックスには列のデータとそれが含まれる行のポインタがペアになって格納されている
      • 整列されているので付近に何もないのかまだ調べる余地があるのかわかる
    • 種類
      • Bツリーインデックス
        • いわゆるB木そのまんま
      • クラスタインデックス
        • MySQLではテーブル自体もクラスタインデックスとして作成される
        • クラスタインデックスとは葉に完全な行データが格納されるインデックス
        • 検索でクラスタインデックスを使える場合、MySQLでは最も速い検索になる
      • セカンダリインデックス
        • クラスタインデックス以外はすべてこれ
          • 「プライマリインデックス」はクラスタインデックスなのかな
        • ちょっとむずかしい、パッと読んだだけでは概要の理解はできなかった
  • トランザクション
    • ACIDの話
    • トランザクション分離レベルの話
      • ダーティリード、ファジーリード、ファントムリードの図解あり
  • デッドロック
    • デッドロックってデータベース用語(というかここが大もと?)?
    • 起きたらどうするの
      • 片方のトランザクションはロールバックされるので、デッドロックを検知したらリトライする仕組みなどをアプリケーション側で持っておくなどが一般的
    • 発生率を下げる方法
      • ロックの範囲を小さくする
        • つまりトランザクションサイズを小さくする
        • 適切なインデックスを使用する
          • インデックスがないと対象がテーブルの行全体になってしまう、みたいな理屈、こんなところにもメリットあったんだね!
      • ロックの取得時間を短くする
        • 要は処理の長さが短いほうがそりゃいいよねという話
      • 同じ順序でロックを取得する
        • 互いが互いに向き合うために起きるのがデッドロックなので、方向が同じならば大丈夫ではみたいなやつ(雑)
  • レプリケーション
    • MySQLのレプリケーションは以下の3タイプ
      • 非同期
        • 高速だけどいつ終わってるかわからん
      • 準同期
        • ログ反映までは同期的にやって非同期のデメリットを補う感じ
      • グループレプリケーション
        • 複数のデータベースシステムのセットみたいので同期しながらやっていくやつ。AWSのデータベース系サービスと近い印象

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

  • はじめかた
    • どんなものを読むのがいいの?
      • 使い慣れているもの
      • 仕様を把握しているもの(たぶんここで言う仕様とはそのOSS内部の仕様というより「使われ方」みたいな感じに見える)
      • 小さくてシンプルなもの
        • これは難易度的な観点が入っているね
      • 慣れた言語のもの
        • それはそうですね
    • 目的を決めよう!
      • どこからどこまでの処理について理解したいのか、を決めるだけでも道はすっきりする
      • 全体を理解しないといけないシーンだとしても、読むのは一箇所に集中するといいとのこと
    • 初心者殺しに注意する
      • 「なんかLinuxとかいう超有名なソフトウェアがあるらしい、いっちょ読んだるか」は「登山初心者が地図も持たずに普段着でエベレスト」
    • 筆者さんのOSSコールドリーディング体験談2つ
      • ちょっといいこと書いてあった
  • コールドリーディングする環境
    • 使いやすいエディタをちゃんと使う
      • 定義参照は必須
    • GitHub上にリポジトリがある場合、ドメインをgithub.comからgithub.devにしてブラウザ上でVSCodeを起動するのも楽でよい手
  • なんか全体の感想として「特に用事はないけどOSSを読んでみよう!」みたいな趣旨かと思ったけどむしろそうじゃなくて「必要になったときのソースコードリーディングの方法」みたいな特集だったなあ、と思った。まあ前者みたいなモチベーションだとしても結局同じアプローチになるじゃんというのもたしかにありそうだし、何が言いたいかと言うと、何が言いたいのか自分でもよくわかっていませんということです

Extra Feature

  • 今さら聞けないSSH
    • 少し前に「SSH?はじめて聞きました」の初学者向けに説明をする機会があったのだけど、雑誌のいちコーナーレベルはわかりやすくコンパクトでしかし入り口だけではなく中身までうまくまとまっていて、やっぱり最もよい用途のひとつではと再認識した。問題はこれを自発的に読んでもらえる世界線はありえないので「読んでね」になってしまうことなのだけど。

    OS/Network

    • 明後日のコンピューティングを知ろう「街が放つ電波」
      • これ昔からずーっと興味あった、「その辺に飛んでる電波をすべての波長を横軸に並べたグラフで示してみるとどんな感じになるのか」というやつ
      • でも2.1GHzまでしかないな、せめて2.4GHzまでは入れたほうがよかったのでは…?
      • ちなみに一番多かったのは65MHz付近のラジオ放送と955MHz付近の携帯電話網。後者はプラチナバンドかな?

    そのほか

    • ITエンジニア必須の最新用語解説「GitHub Copilot」
      • コメントやソースコードのいち部を入力すると次に記述するべきコードの選択肢が表示される
      • 提案はコードブロックどころか関数、単体テストにまで及ぶ
      • OpenAIが開発したCodexという大規模言語モデルが採用されている、GPT-3ベースらしい!
        • 自然言語だけのものかと思ってた!ソースコードに特化した学習を施したんだそう
      • 入力したものはサーバーに送信されるので、本当に機密性の高いプロジェクトでは注意したほうがいいかもとのこと(一応厳重に管理するという体ではあるらしい)

    Software Design 2022年9月号

    この号の分のみ単品で読みたい方は、普通にAmazonで買うのがおすすめ。
    紙 or 電子書籍で選べます。

     

    みるみ
    みるみ

    ブロガー、ソフトウェアエンジニア。

    この「みるめも」というブログの筆者です。

    この記事へのコメント
    コメントはまだひとつもありません :)

    新しいコメントを書く

    • 必須項目はコメント本文のみですが、お名前はぜひご記入いただけると嬉しいです。
      ※メールアドレスを書いた場合も公開されることはないのでご安心ください。
    • 特定のコメントに返信したい場合は各コメントにある「返信する」ボタンからどうぞ。
    • コメントはこちらで承認の作業を行うまでは表示されません。ご了承ください。
      ※ここ数年スパムが激化しており、誤って削除されてしまうケースが増えてきました。スパムボックスも毎日自分の目で確認するようにはしているのですが、どうしても限界があります。確実に僕に連絡を取りたい方は メールTwitter からお願いします。