そーだいなるらくがき帳

そーだいが自由気侭に更新します。

RDBアンチパターン リファクタリングについて話をしてベストスピーカー賞を取ってきた #builderscon

f:id:Soudai:20170805172822p:plain

Builderscon 2017で登壇してきました。

builderscon.io

登壇資料はこちらです。

今回も僕が超絶リスペクトしてる id:t-wada さんと そこそこリスペクトしてる 空前絶後のォォ!!!!超絶怒涛にリスペクトしている上司の id:onishi さんの名言を引用させてもらいました。これはテストコードやモニタリングで品質が見える化されますが「見える化されるだけでは問題は解決しない」という本質をお伝えしています。我々はエンジニアなので技術で問題を解決していくわけですし、問題を解決するためには手を動かすしかありません。ですのでまさに今の現場を改善していくのはあなた自身です。

あとは今年、話をしてきたデータベースリファクタリングの総集編って感じです。ホントは実例のRDBアンチパターンを元にリファクタリングしていきたかったんだけど60分では短すぎて「続編に期待」みたいなレベルになっちゃいました。この辺は機会があればどこかで話したいですね。機会が無くてもSoftware Designの連載は続くので区切りがついたタイミングでまとめてなんかしたいなとは思っています。

頂いた質問の回答

MongoDBからの移行について

僕はMongoDBを本番で採用したことが無いけどFDWというPostgreSQLの機能がありますよってのをご紹介しました。FDWは要は他のDBのテーブルをPostgreSQL自身のテーブルのように見させる機能です。MySQLやOracleDBもあって便利なのでぜひ遊んでみて、試してみてほしいです。僕はIMAPとかMySQLとかFDWを採用したことがあるけどちょっとしたワンポイントで使うなら充分実用的かなって印象です。

Foreign data wrappers - PostgreSQL wiki

ちなみにMongoDBは3つあってMulticornとNativeってのがあるけどNativeはCでMulticornはPythonでFDWを作れるLibraryのことです。なので一般的にはMulticornの方が遅いけど簡単にメンテナンス出来るし僕はMulticornを結構使ってました。そういえばMulticornの話をしてた時期が僕にもありましたね。

www.slideshare.net

RDBのモニタリングについて

はてなとして監視している内容はずばりMackerelのPluginの項目を見ています。例えばMySQLだとInnoDB_buffer_poolなど見ています。コードは公開されているので興味がある方は是非見てみてください。

GitHub - mackerelio/mackerel-agent-plugins: Plugins for mackerel-agent

テストコードについて

資料の中でテストコードがDBを指しているけど何をテストするんですか?ってことですが以下のようなモノがあります。

  • トリガーやストアドなどDB機能のテスト
  • データ・セットのテスト
  • マテビューやViewなどのパフォーマンスのテスト
  • シーケンスやオートインクリメントなど自動的に状態が変化する値

などなどです。これはDBAだと当たり前だし、逆にアプリケーションエンジニアだとピンとこないかもしれません。ですがそれはプロダクトコードのユニットテストやシナリオテストと意識している事は同じです。勿論プロダクトコードのテストも必要ですが場合によってはDBを直接テストすることも大切ですよっていうのがここで言いたかったことになります。ただ「どうやってテストするか?」っていう最適解は僕もまだ持っていなくて結構オレオレテストツール作ったりしてます。

Buildersconについて

初めての参加だったけど刺激的でした。前夜祭の大人のBuildersconとか最高でしたwやっぱ現場で苦労した話って学びが多いしもっと共有していきたいですね。私もそういうアウトプットを増やしていきたいなって強く感じました。また本番もスタッフの配慮であったり、海外のスピーカーの話が聞けたりして学びの多いイベントでしたね。また懇親会でも色んな人とお話できて良かったです!!!!絶対次回も遊びにきます。

まとめ

ベストスピーカー賞いただきました!!!!Builderscon最高なので次回も絶対絶対参加します!!!!