makopi23のブログ

makopi23が日々の生活で感じたことを気ままに綴るブログです。

SQLアンチパターン読書会 「ディプロマティック・イミュニティ(外交特権)」に参加しました

2014/10/27(月) SQLアンチパターン読書会 「ディプロマティック・イミュニティ(外交特権)」に参加してきました。

Doorkeeper
http://sqlap.doorkeeper.jp/events/16740

以下の書籍をターゲットとした読書会なのです。

SQLアンチパターンSQLアンチパターン
(2013/01/26)
Bill Karwin

商品詳細を見る


場所は前回同様、秋葉原のクラスメソッド株式会社さんでした。
参加者は11人かな。

今回は冒頭で、@t_wada さんから素敵なサプライズが!


感謝!私の他に、@meijik さんも戴きました。




■ 発表
今回は @setoazusa さんが発表担当でした。
SQLアンチパターン「ディプロマティック・イミュニティ」 from Hiroyuki Ohnaka

この発表の真髄はデモにありました。デモで紹介してくださった各種情報はこちら~

・MyBatis Migrations
 http://mybatis.github.io/migrations/

・SchemaSpy
 http://schemaspy.sourceforge.net/

・CIサーバーとSchemaSpyでデータベースのドキュメント作成を自動化
 (※SchemaSpyについて発表した時のスライド)
 http://www.slideshare.net/setoazusa/schema-spypublic

・上記スライドのデモ用レポジトリ
 https://github.com/azusa/schemaspy-demo

・SchemaSpyで出力するドキュメントのサンプル
 http://azusa.github.io/schemaspy-demo/schema/index.html

各種ツールや環境は、git cloneですべて取得できるよう、1つのリポジトリにすべて入れているとのことでした。


■ ディスカッション
今回もディスカッションしたいネタをみんなで付箋に書き出しました。
20141027_sqlap1.jpg

以下、個人メモ。
---

■DBマイグレーション
データベース・リファクタリングデータベース・リファクタリング
(2008/03/26)
スコット W アンブラー、ピラモド・サダラージ 他

商品詳細を見る



■ 読書会参加者のうち、DBマイグレーションツールを使ってる人の割合
  • 使ってる: 6人 使ってない: 5人
  • 使ってる人の意見: 「無いと話にならない」、「使わないと怖くて仕方がない」等


■ DSL型 vs SQL型
  • DSLで書く方法と、SQLで書く方法の2パターンある。Railsは前者で、プログラムの中でモリモリ書く。
  • フレームワークがマイグレーションの機能を持っているなら、それを使うべき。
    • フレームワークが持っていないなら、独立系のマイグレーションツールを検討すべき。
  • 参考サイト1: DB Migration 入門 vol.1 #CDStudy を開催しました。 うさぎ組
    • 右側が多く、Alter前提のやり方。
    • 上側は言語非依存で、下側は言語依存。
20141027_sqlap2.jpg

DBスキーマもバージョン管理したい! from kwatch



■ DBマイグレーションのTIPS
  • チームメンバ全員がDBAという状況はヤバい。みんながDBを変え始めると統制が取れなくなる。
    • そこでDBマイグレーションツールが登場するようになった。
  • DBマイグレーションツールを使ってもらえるようにするには・・・
    • 相手にメリットを伝える。
    • 始めやすいように環境を最初から用意しておくと良い。
  • DBマイグレーション中に失敗するのは最悪。。。
    • UpとDownのテストは必ず実施する。
    • 切り戻しのリハーサルをやる。
  • DBマイグレーションで、本番系でDownをやることはほとんどない。
    • その場合は、逆向きのUpをもう1回実施する。逆向きのUpをサポートするツールが最近は多い。
  • マスタデータの差異が生じないように、デプロイ時にシード(初期データ)を指定するのが一般的。
  • DBマイグレーションにinsertを使うな、という考えもある。どのデータがどのタイミングで入るか追えなくなるので。。。



■ DBマイグレーションの可逆性と不可逆性
  • DBマイグレーションのUpでテーブルをDROPすると、Downで戻せない。(不可逆性)
  • 不可逆性の他の例としては、テーブルやカラムを結合したあと、分離することはできなかったり。
  • 不可逆性を考慮して、DBバックアップをどこで取るか、ログは諦めるとか、検討が必要。
  • DBバックアップのやり方は書籍「データベースリファクタリング」でも言及されている。
  • DBマイグレーションの指針の1つ: 「サービスイン前は大胆に。サービスイン後は保守的に。」



■ DDLのロールバック
  • DDLのロールバックが可能なDBMSは以下。
    • PostgreSQL
    • SQLServer
    • DB2
    • Firebird
  • DDLのロールバックができないDBMSは以下。
    • MySQL


■ DB設計のドキュメント化

  • 最近はマイグレーションが主だが、大規模プロジェクトではER図が主で、ER図からDDLを生成することが多い。
  • ER図からテーブル定義書を出力して、それに追記すると、ER図とテーブル定義書の同期が取れなくなってくる。。。
  • Excelの設計書とは別に、ER図やDDLにはコメントを入れましょう。



■ SIerにありがちな「JOIN禁止令」
  • SQLチューニングのオプティマイザには「ルールベース」と「コストベース」の2種類がある。
  • コストベースの場合、JOINするとアクセスパスが悪い方に倒れることがあり、バッチ突き抜けなどが生じることがあった。
  • JOINを禁止するとアクセスパスがシンプルになるので、遅くても、処理時間が見積もれるようになる。
  • でもオンライン処理は、大量データによるバッチ突き抜けとは別次元なので、JOIN禁止は合わないことが多い。
  • 最近は理由も知らずに「JOIN禁止」と言う人が多くて困る。。。



■ DBマイグレーションの利点と欠点
  • 利点: DBの整合性が合う。
  • 欠点: データと設計が混ざって、よくわからなくなる。。。



■ DBマイグレーションの粒度
  • 粒度は細かい方がいいとは限らず、機能追加の粒度と合わせるのが一般的。
  • 一番最初のマイグレーションは、粒度が大きい。
  • MyBatisは1トランザクションが1マイグレーションになる。

★感想:
ちょうどこの読書会の当日、DBのバージョン管理に関する議論が会社であって、ピンポイントなテーマでした。
以前、データベースリファクタリング読書会に参加したときは、DBマイグレーションツールはほとんど無い、というお話を聞きましたが、この日のディスカッションを通じて、ここ数年でずいぶん改善されてきたように感じました。
ちなみにそんときの読書会について書いたブログはこちら。
「DBリファクタリング読書会 第三回」に参加しました

やっぱ、最近はDevOpsやらアジャイルやらテスト自動化やら、DBマイグレーションの思想が必要となる場面がだいぶ増えた気がします。
私は仕事でDBマイグレーションツールを使ったことがないので、今日のテーマは斬新でとても参考になりました。

参加者の皆様、会場提供のクラスメソッド様、ありがとうございました。


■おまけ:過去の「SQLアンチパターン読書会」ブログ

1章:SQLアンチパターン読書会 「ジェイウォーク」に参加しました
 http://makopi23.blog.fc2.com/blog-entry-65.html

2章:SQLアンチパターン読書会 「ナイーブツリー」に参加しました
 http://makopi23.blog.fc2.com/blog-entry-70.html

3章:SQLアンチパターン読書会 「IDリクワイアド」に参加しました
 http://makopi23.blog.fc2.com/blog-entry-73.html

3章:SQLアンチパターン読書会 「続・IDリクワイアド」 に参加しました
 http://makopi23.blog.fc2.com/blog-entry-77.html

4章;SQLアンチパターン読書会 「キーレスエントリー」 に参加しました
 http://makopi23.blog.fc2.com/blog-entry-84.html

5章:SQLアンチパターン読書会 「EAV(エンティティ・アトリビュート・バリュー)」に参加しました
 http://makopi23.blog.fc2.com/blog-entry-90.html

6章:SQLアンチパターン読書会 「ポリモーフィック関連」 に参加しました
 http://makopi23.blog.fc2.com/blog-entry-94.html

7章:SQLアンチパターン読書会 「マルチカラムアトリビュート」に参加しました
 http://makopi23.blog.fc2.com/blog-entry-97.html

8章:SQLアンチパターン読書会 「メタデータトリブル」 に参加しました
 http://makopi23.blog.fc2.com/blog-entry-105.html

9章:SQLアンチパターン読書会 「ラウンディングエラー」 に参加しました
 http://makopi23.blog.fc2.com/blog-entry-109.html

10章:SQLアンチパターン読書会 「サーティーワンフレーバー」に参加しました
 http://makopi23.blog.fc2.com/blog-entry-115.html

11章:SQLアンチパターン読書会 「ファントムファイル」に参加しました
 http://makopi23.blog.fc2.com/blog-entry-118.html

12章:SQLアンチパターン読書会 「インデックスショットガン」に参加しました
 http://makopi23.blog.fc2.com/blog-entry-121.html

13章:SQLアンチパターン読書会 「フィア・オブ・ジ・アンノウン」に参加しました
 http://makopi23.blog.fc2.com/blog-entry-128.html

14章:SQLアンチパターン読書会 「アンビギュアスグループ」に参加しました
 http://makopi23.blog.fc2.com/blog-entry-130.html

15章:SQLアンチパターン読書会 「ランダムセレクション」に参加しました
 http://makopi23.blog.fc2.com/blog-entry-133.html

16章:SQLアンチパターン読書会 「プアマンズ・サーチエンジン」に参加しました
 http://makopi23.blog.fc2.com/blog-entry-134.html

17章:SQLアンチパターン読書会 「スパゲッティクエリ」に参加しました
 http://makopi23.blog.fc2.com/blog-entry-136.html

18章:SQLアンチパターン読書会 「インプリシットカラム」に参加しました
 http://makopi23.blog.fc2.com/blog-entry-138.html

19章:SQLアンチパターン読書会 「リーダブルパスワード」に参加しました
 http://makopi23.blog.fc2.com/blog-entry-140.html

20章:SQLアンチパターン読書会 「SQLインジェクション」に参加しました
 http://makopi23.blog.fc2.com/blog-entry-144.html

21章:SQLアンチパターン読書会 「シュードキー:ニートフリーク(疑似キー潔癖症)」に参加しました
 http://makopi23.blog.fc2.com/blog-entry-147.html

22章:SQLアンチパターン読書会 「シー・ノー・エビル(臭いものに蓋)」に参加しました
 http://makopi23.blog.fc2.com/blog-entry-151.html
関連記事
スポンサーサイト

コメント

コメントの投稿


管理者にだけ表示を許可する

トラックバック

トラックバック URL
http://makopi23.blog.fc2.com/tb.php/152-4f8cbf6a
この記事にトラックバックする(FC2ブログユーザー)

FC2Ad