SQLer 生島勘富 のブログ

RDB・SQLの話題を中心に情報発信をしています。

Software Design の特集記事を執筆しました

Software Design 2019年8月号(2019/7/18発売)の第二特集を執筆しました。

gihyo.jp

是非、ご購入いただいて、ご覧いただければ幸いです。

概要

ゲームを題材に学ぶ ー 内部構造から理解するMySQL

定番的オープンソースRDBMySQLですが,その使い方についていろいろ思い違いしていることがけっこうあります。そもそもMySQLの中身はどうなっていますか? なぜInnoDBMyISAMがあるのか,読み込みのデフォルトのページサイズはどのくらいか,ログファイルのデータサイズはどのくらいかなど,知らないで通り過ぎてしまった知識もあります。また,NoSQLとRDBとの違いもよく話題にあがります。本特集ではゲーム開発の現場でMySQLを使用したときに起こる問題を通して,そのしくみと機能を再確認し仕事に活かす手がかりを示します。

はじめに

ブログの記事は、1回で1章分あるかないかです。 そこだけを読むと、なんだかおかしいことを言ってるように感じる人がでて、ときには炎上したりしてきました。 しかし、今回の特集記事は、ある程度のまとまりで皆様にお届けすることができます。 「O/Rマッパーは『車輪の再開発』でしかない」という結論に向けて、以下のような章立てで解説しています。

第1章 DBサーバの構造を知ろう!

RDBMSの低レイヤの部分について解説しています。

第2章 ゲーム系で確認すべきパラメータ

検討されにくいMySQLのパラメータについて解説しています。

第3章 実行計画を見てSQLの構造を理解しよう

実行計画をJavaのようなソースに直して、理解してもらえるように解説しています。

第4章 NoSQLとSQLの使いどころを知ろう

NoSQL(Key-Value-Store)は本当に速いのか? どういうときに、NoSQLを使ったらよいのかについて解説しています。

第5章 DB側でやること、アプリ側でやることを見極めよう

ぐるぐる系はなぜ遅いのか、「SQLのオーバーヘッドだけじゃないよ」ということについて解説しています。

第6章 DBサーバでゲームの処理を作るとどうなる?

「ゲーム系でRDSを使うなら、ストアドプロシージャを使った方が良いよ」 ということについて解説しています。

第7章 バーティショニング

あまり使われないパーティショニングについて解説しています。

第8章 まとめ - SQLから逃げない!

私の想いを、柔らかく表現しました。

DBオブジェクトの命名法と主キー

DBオブジェクトについて、Rails などのようにどうしても「外側から管理したい」と考える人たちは、言語側の命名法で処理したいと考えるようですが、DB側から見ると非常に使いにくいです。 そのため、弊社では以下のような命名法で用途に応じて別名を提供しています。

目次

続きを読む

パーティションテーブルについて

はてなの日記からはてなのブログに移り今まで数本の記事を書いてきましたが、Markdownが使えることに今回初めて気づきました(早く言ってよね) ここからは、Markdownで書きます。

目次

  • 目次
  • パーティションテーブルはなかなか利用されません
  • パーティションテーブルとは
  • パーティショニングの種類
    • リストパーティショニング
    • レンジパーティショニング
    • ハッシュパーティショニング
  • 利用の例
    • インデックスの代わりに
    • デイリーで溜まるデータを日付で
    • ユーザが数十万以上いる場合
    • 巨大なバッチをループして
  • まとめ
続きを読む

NoSQL と SQL について

かなり古いネタですが、DeNA の松信氏のブログから NoSQL と SQLについて考えてみましょう。

目次

  • 目次
  • DeNA の松信氏のブログ
  • DeNA の松信氏がやった実験
  • 一番遅いのはネットワーク
  • SQLは滅茶苦茶重いが、速くもできる!
  • ユーザアクションに対して SQL は極力1回にする
  • まとめ - NoSQL を使うべきとき

 

続きを読む

SQLと手続き型言語 - JOIN を手続き型で書いてみる

SQL手続き型言語オブジェクト指向言語)は最終的には同じです。

今回は、JOIN を手続き型言語Javaっぽく)書いてみます。

目次

  • 目次
  • オプティマイズについて
  • 2つの表をJOINしたSQL
    • 単純なネスティッドループ(NESTED LOOP)
    • インデックスを使ったネスティッドループ(NESTED LOOP)
    • ハッシュジョイン(HASH JOIN)
    • ソートマージジョイン(SORT MERGE JOIN)
  • 少なくとも4種類考えられる
  • なぜ ORM を目の敵にするか
続きを読む

ほとんどのエンジニアは「Staticオジサン」よりひどい3

前回の続き。

目次

  • 目次
  • 正解はこうなる
  • イメージはこうなる
  • つまりこれはバグ!!
  • 「Staticオジサン」はStatic決め打ち
  • ちなみにWordPressはこんな変換をしています
続きを読む

ほとんどのエンジニアは「Staticオジサン」よりひどい2

前回の続きです。

目次

まずは間違いの例

たぶん、何も考えてない人は以下のようになったと思います。

f:id:Sikushima:20190417102129p:plain

基本構文を分かってない。どうしようもないですね。

もう少しマシな人の例

f:id:Sikushima:20190417102346p:plain

工夫はしたけれど、残念!

 

正解は次回。

ほとんどのエンジニアは「Staticオジサン」よりひどい3 - SQLer 生島勘富 のブログ