makopi23のブログ

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

SQLアンチパターン読書会 「シー・ノー・エビル(臭いものに蓋)」に参加しました

2014/9/22(月) SQLアンチパターン読書会 「シー・ノー・エビル(臭いものに蓋)」に参加してきました。

DoorKeeper
http://sqlap.doorkeeper.jp/events/15394

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

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

商品詳細を見る


場所はいつもの湯島、株式会社アルティネットさんではなく、今回は秋葉原のクラスメソッド株式会社さんでした。
@yokatsuki さん、クラスメソッドさん、会場提供ありがとうございます。

参加者は12人かな。
今回は @t_wada さんが諸事情により初の欠席ということで、皆勤賞の行方は makopi23 に委ねられたのでした!

この日は22章「シー・ノー・エビル(臭いものに蓋)」がターゲットでした。


■ 発表
今回は @grimrose さんが発表担当でした。

フルスクリーンは コチラ です。
ログや例外処理に関する資料への参照や考察が入っていて、とても勉強になります。

あと、今回はJavaとScalaで検証用のコードも書かれたとのことで、そちらの紹介もありました。
コードはGitHubに公開されています。 https://github.com/grimrose/SQL-Antipatterns-22


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

ちなみにクラスメソッドさんでの初ディスカッション風景はこんなカンジ。
20140922_sqlap1.jpg

今回は例外設計やログ設計に関するネタが多かったです。以下、個人メモ。
---

■ 契約による設計(契約によるプログラミング、DbC)
  • レンガ本に載っている。
  • wikipedia
  • コードを呼ぶ側が事前条件と不変条件を満たす義務を負うことで、呼ばれたコードはその条件が恒真であるとの前提を利益として得る。引き換えに、呼ばれたコードは事後条件と不変条件を義務として負い、呼ぶ側の利益としてこれを保証する。


■ Loan Pattern(ローンパターン)

■ ログ制御
  • ログレベルは開発中はDebug,本番はInfoにすることが多い。
  • ログはローテートさせて、バックアップも取る。
  • エラーログと正常ログはファイルを分けてる。
  • ソシャゲ開発はスピード優先なので、エラーを握りつぶしちゃうことがある。
  • VB4時代、ログへ日時を和暦で出力している人がいた。。。
  • アプリとミドルでログを分ける。
  • ログを日本語で出すと文字化けすることがあったので、英語で出すようになった。
    • 昔はログをターミナル経由で見ることがあって、環境によっては文字化けした。
  • ログにはエラーコードだけ出して、エラーメッセージは後でエラーコードから突き合わせる、ということをやってた。
  • コネクトやリトライ、リソース不足などが発生した時にログを出す設計をしてない人がいるので注意。


■ 非チェック例外の扱い
  • あるAPIを使っていて、そのAPIが内部で呼び出している共通部品が独自の非チェック例外(javadocに書いてない)をthrowして、呼び出し元まで突き抜けてきた。
    • APIは、非チェック例外をcatchしてjavadocに書いてあるチェック例外に置き換えてthrowしなおすべき?
    • それとも非チェック例外はそのまま突き抜けさせるべき?
  • 非チェック例外は上に突き抜けさせて、フレームワークに処理を任せるべきでは。


■ 富士ソフトのトランザクション問題







■ 例外/ログ設計に関するTIPS

■ コネクションプーリング
  • 長い時間アイドル状態になると、タイムアウトで自動的に接続が切れる。
  • 接続OFFを考慮していないような設計はダメ。
  • 接続の生き死にの設定がどうなってるかを確認しておくべき。
  • 生存確認のハートビード用SQLは、デフォルトで "select 1 from T" のようになっていることが多い。
  • MySQLの"show databases;"はディレクトリを全部舐めに行くので、生存確認をそれでやるとタイムアウトで死ぬことがある。。。
  • 生存確認で数秒毎にinsertやcreateを実行するDBMSもあるらしい。
  • MySQLのpingは内部的に"select 1 from T"というSQLを実行しているらしい。


■ ログの整形
  • EclipseのDBViewerはSQLを整形して見れる。
  • ログにSQLを出力する際、アプリ側でSQLを改行していると、改行したままログに出力されることがある。
  • grepとかするときに、ログは1行に出ている方が良いかも。



■懇親会
読書会終了後は8人くらいで「俺の煮込屋 三蔵 岩本町店」に行きました。
リーズナブルで美味しかった~


★感想:
ログ設計や例外設計に広く話が及んで、とても勉強になりました。
あと、 @grimrose さんのスライドで紹介されてたいろんなコンテンツも、あとで読んでとても参考になった。
契約による設計、infoレベルのログは出力しない、などなど。。。

あとディスカッションで出た、ログAPIはいろんなものがあるのでアダプタで寄せる、という概念は初めて知りました。
ログや例外処理はアプリ開発で必須なので、これだけでいっぱいネタが出てきますね~

次回以降も皆勤目指しておべんきょしようと思います。
みなさんありがとーございました。



■おまけ:過去の「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


スポンサーサイト

FC2Ad