今日は db tech showcase 2014 に参加してきました。
今回は諸事情により、フルデイ参加は厳しかったのでどうしても聞きたかった @nippondanji 氏のセッションだけ参加してきました。
続きを読む今日は db tech showcase 2014 に参加してきました。
今回は諸事情により、フルデイ参加は厳しかったのでどうしても聞きたかった @nippondanji 氏のセッションだけ参加してきました。
続きを読む先日わたしが書いたエントリの発言、
データモデリング軽視の風潮は NoSQL があれば RDBMS いらないみたいなことも言ってる人も生みだしていることにはもはや言葉もありません.. ( 実際には両者は目的によって使い分けるものですし、いくら非構造を NoSQL が許容するからといってリレーショナルモデルの理解を軽視していい理由にはならないのにもかかわらず... 残念極まりないことです... )
@nippondanji 氏の「データベース設計徹底指南!!」は神プレゼン!脅威の主義主張の一貫性保証は DB エンジニアの鏡だった件!
を汲んでくれたのか(そうでなくても全然よいのですが) @nippondanji 氏がデータベース設計徹底指南の続きになるエントリを書いてくださっていました!
そのエントリとは、
漢(オトコ)のコンピュータ道: その選択、ちょっと待った!NoSQLデータベースへ乗り換える前に検討すべき3つのポイント
です!
@nippondanji 氏の「データベース設計徹底指南!!」は神プレゼン!脅威の主義主張の一貫性保証は DB エンジニアの鏡だった件!でわたしが広くみんなが分かってくれるようになるといいな、と思ったのは、
だったんですが、このわたしが言いたかったこと(わたしが普段から周りの人に理解して欲しいと思っていたこと)は全部 @nippondanji 氏の以下のエントリを 2 つをセットで読めば理解できるものになってしまいました!!
わたしが誰かにこういったことを伝えたいときに、これ読むベシと言えば済むようになって俺得だっただけといえばだけなんですが、 @nippondanji 氏には大感謝です!!
できるだけ多くの人が地獄へ足を踏み入れる前にとどまってくれれば。 / “漢(オトコ)のコンピュータ道: その選択、ちょっと待った!NoSQLデータベースへ乗り換える前に検討すべき3つのポイント” http://t.co/QCY9poeS9O
— Mikiya Okuno (@nippondanji) 2013, 12月 2
氏がツイートで言っている通り、これでできるだけ多くの人が地獄へ足を踏み入れる前にとどまってくれれば、というのをわたしも切に願います!というわけで、よい子のみんなはデータベース設計徹底指南を読んだなら、必ず絶対、セットで漢(オトコ)のコンピュータ道: その選択、ちょっと待った!NoSQLデータベースへ乗り換える前に検討すべき3つのポイント
も読んでいただきたい!いや、読むベシでしょう!
“世の中に銀の弾丸はない” どちらかというと、RDBMSが銀の弾丸扱いされてきた時代がずっと続いてたという方が正しいと思う。RDBMSがメインストリームなのは今後も変わらないんじゃないかなあ / “漢(オトコ)のコンピュータ道: …” http://t.co/xWePlRLlGh
— Sho Shimauchi (@shiumachi) 2013, 12月 1
@nippondanji 氏のエントリのブコメにもう一人の漢が熱いメッセージを書いていたのを見つけました。この意見にもわたしは禿同です!SQL と NoSQL の 2 人の巨人の邂逅!すごい瞬間を目撃してしまって鼻血ブーです!この両人がトークセッションとかやったらとてつもないことになりそうな気がするんですが、そんなこと起こらないかなぁ、と妄想が膨らむわたしでした。では、今日はこんなところで。
*1:[http://kajipon.sakura.ne.jp/art/jojo9.htm:title=ジョセフの名言]より
裏でやっていた #awssummit Day2 とギリギリまで天秤にかけていたのですが、あまりにも#awssummit の Day1 の印象が悪かったので、こちらに参加することにしました。
開催概要:
- DBエンジニアのための技術勉強会
- 主催: エンバカデロ・テクノロジーズ
- 日程: 2013年6月6日(木) 13:30〜16:15 (13:15 受付開始)
- 会場: 富士ソフト アキバプラザ 6階 セミナールーム1
- 参加費: 無料(事前登録制)
アジェンダは以下のようになっていました。
アジェンダ:
- 13:30〜14:30 『SQLアンチパターン』
- 14:30〜14:45 休憩
- 14:45〜15:45 『やはりデータ設計は大切です』
- 15:45〜16:15 Q&A
では、今日も所感から。
1. SQL アンチパターンは買い!
- 25 のアンチパターンは、実際にわたしが DBA としてそれはやったらあかんとアプリケーションエンジニアと格闘したものとモロカブリのものが多くてビックリしました。わたしの場合、時間等の制約の結果、相手を結局説得できず、その後ひどい目にあったことがあったのですが、この本をお互いに読んでいたら、アンチパターンを共通理解としてもつことができ、そういったことを減らすことができていただろうなぁと思いながら聞いていました。
- 個人的にはナイーブツリーとエンティティ・アトリビュート・バリューを深堀りしてみたいと思っていますが、 SQL アンチパターン本をまだ買って読んでなかったのでこれから買おうと思います。
2.
エンバガデロテクノロジーズエンバカデロ・テクノロジーズさんの勉強会には内容次第でこれからも参加したい
- もともとわたしは DB エンジニアなのと特にデータモデリングには深い関心があるため、 ER Studio のベンダーである
エンバガデロテクノロジーズエンバカデロ・テクノロジーズさんの主催する勉強会は興味のあるものが多そうな気がします。これからも内容次第で参加させていただこうと思います。今日は有意義な勉強会の機会をありがとうございました。3. 藤原紀章さんのべしゃりが面白いのはよくわかったw
では、以降より、わたしがとってきたノートになります。
デブサミ2013のアワードを受賞した、和田卓人氏が話題のSQLアンチパターンを分かりやすく解説。DBの設計・開発には、様々な場面で陥りやすい失敗(アンチパターン)があります。データベース論理設計、データベース物理設計、クエリの記述、アプリケーション開発という4つのカテゴリに分け、それぞれの分野におけるアンチパターンを紹介し、失敗を避けるためのより良い方法を解説します。
タワーズ・クエスト株式会社 取締役社長 和田卓人氏
Pattern(1) ジェインクウォーク(信号無視)
Pattern(2) ナイーブツリー
Pattern(3) IDリクワイアド(とりあえず id)
Pattern(4) キーレスエントリー(外部キー嫌い)
Pattern(5) EAV(エンティティ・アトリビュート・バリュー)
Pattern(7) ポリモーフィック関連
Pattern(8) マルチカラムアトリビュート
Pattern(9) メタデータトリブル(メタデータ大増殖)
Pattern(10) ラウンディングエラー
Pattern(11) 31フレーバー
Pattern(12) ファントムファイル(幻のファイル)
Pattern(13) インデックスショットガン(闇雲インデックス)
Pattern(14) フィア・オブ・ジ・アンノウン
Pattern(15) アンビギュアスグループ(曖昧なグループ)
Pattern(16) ランダムセレクション
Pattern(17) プアマンズ・サーチエンジン
Pattern(18) スパゲッティクエリ
Pattern(19) インプリシットカラム
Pattern(20) リーダブルパスワード(読み取り可能パスワード)
Pattern(21) SQLインジェクション
Pattern(22) シュードキー・ニートフリーク
Pattern(23) シー・ノー・エビル
Pattern(24) ディプロマティック・イミュニティ
− 文章化
− バージョン管理
− テスティング
Pattern(25) マジックビーンズ
Pattern(25+1) 砂の城(奥野さん描きおろし)
これまで金融機関をはじめとした、数多くの開発プロジェクトにPM、コンサルタントとして携わり、DOAの専門家でもある藤原紀章氏が、DB開発の視点から見た、プロジェクトをより良く推進する体制やプロジェクトの進め方のノウハウを説明させていただきます。プロジェクトを進める上で役立つ実践的なノウハウが満載です。
株式会社ファイナンシャルブレインシステムズ ソリューション第一本部 開発四部 課長 藤原紀章氏
参考になりそう:椿正明ブログ/ウェブリブログ
Q1. SQL のアンチパターン、 ID リクワイア
Q2. ID リクワイアについてふたたび
Q3. データ設計を KJ 法と同じ発想で。 KJ 法以外ではあるか?
Q4. チーム内共有について
Q5. プロジェクトにおける論理設計担当の位置づけをどうしているのか?
Q6. 砂の城
以上が、この勉強会のノートでした。
Source: flickr.com via garage-kid on Pinterest
第三回目の本読書会は、「第三章 データベース・リファクタリングのプロセス」をメイントピックとして行われました。
では、以降、わたしがとってきたメモのシェアになります。
Contents.
わたしがこの読書会に参加してみようと思った経緯を先に書いておきますと…
大分以前に購入していたデータベース・リファクタリングだったのですが、読もう読もうと思っていながらも積読本になってしまっていました。そんな中、このDBリファクタリング読書会 第二回 : ATNDの存在を知ったんですねぇ。
これは、この本を読むいい機会だと思ったというのがこの読書会に参加してみようと思った経緯です。
また、先にこの読書会に参加した感想も書いておきますと…
ひと言で言うと、参加してよかったです。
(まあ、参加する前はビビリまくっていて、緊張して死にそうだったんですが…)
参加してよかったなぁと思ったポイントをあげていくと、
などなどです。
第三回がいつ開催されるかはわかりませんが、次回も是非参加させていただきたいと思っています。
では、以降がわたしがとってきたメモになります。
Contents.
データベースのアンチパターンってどういうのだろうと
データベースリファクタリングという本があるじゃないか
他社のデータベースを知る場はなかなかないじゃないか
そういうことを知る場を提供する
途中でビールがきたら、はじまるかもしれない、ビアバッシュが
*
Oracle の @yokatsuki さんから挨拶
会場の提供
自己紹介
Oracle University の講師を担当
Oracle を扱う人には限られてしまうので、もっと幅広い人と関わりたい
MySQL、Javaとか…
Oracleのファンを増やしたい
そのための場を提供したりしている
何でこれをOracleでやるの?にはだいたい関わっておられる、と。
Oracleにもともと関わりのない方に関わる場を提供する
*
OracleとMARVELと提携ということで
AVENGERSのポスターもらったw
ふつーに嬉しい
Ustream 中継
付箋に話したいことを書き込んで行く
座談会のテーマにして行く
隠れたテーマ
気づき
*
個人としての見解
Oracle 社とは関係ありません
ブログ、MySQLサポートエンジニア
日々の仕事はサポート
トラブルは日常
難問のラストリゾート、それがサポート!
そのときには炎上してる
そのときには爆発してたり
ときには燃え尽きてたり
そもそも困ってるからサポートへ
手に負えない
手遅れのパターンが多い
ややこしいパターン
個性的なテーブル
ややこしいクエリ
膨大なスロークエリ
*
世の中には不吉な匂いで溢れてる
全員が気づいてないことは誰も気づけない
ベストでないことがプラクティスに
代表的なもの
日本的なもの★
→盲目的な前例主義
→変更を許さない官僚主義
*
たまにはうまい空気をすいましょう
*
腐海にはいってはならん… by ババ様
スキーマは既存システムのものをそのままつかいます
つくりなおす意味あるのかよ
*
ロジックの実装はすべてPLSQL
それはなぜならアーキテクトがきめたから
処理の大半は整合性チェックだったり…
*
お見積もりはテーブルひとつにつきホゲ万円
→じゃあ、テーブルを減らそう
死亡確定
テーブル数が減ればいいというものじゃない
ひとことでいうとリレーショナルモデルを無視した設計になっている
リレーショナルモデルをしらずにRDBMSを使うのは、運転の仕方をしらずに車を運転するようなもの
リレーショナルモデル
→集合論理
データベース設計理論
→正規化
Press Enter
オブジェクト志向など実業務では使い物にならない
とおなじように
リレーショナルモデルなんて実践で役に立たないとおもってはならない
リレーショナルモデルに従わなくても強力だったりする
単なるデータのいれものとしてつかってないか
開発、メンテナンスの効率化
アプリのコード量がへる
データの整合性
Selectがストレートに
パフォーマンスの向上
データベースの変更が容易に
*
WebPressでの連載の紹介
理論で学ぶSQL再入門
世界は不吉な匂いが充満している
感覚が麻痺していないか
内輪の常識を疑う
目を覚まそう
改善した結果どうなるか
くじけずに挑戦する
リレーショナルモデルに従う
データベースの設計には必須の知識
正規化、重複を排除して行く作業
*
データベースをリファクタリングしよう
ガスマスクを身につけよう
適切な防御でみをまもる
無ければ即死
きちんと設計されていないテーブル→整合性の担保に大きなコストがかかる★
*
毒ガスの正体をみきわめる
*
オススメ書籍
ストアド・トリガー
ストアドとアプリの使い分けは?
開発スピード→ノウハウを持っているから
バックグランドで動かす→ユーザには非同期で返しておく(業務系)
*
トリガー禁止
before/after 中身に何が入ってるかわからない
→デバッグが難しい
→トリガーのネスト
※トリガーを一旦、オフにするという方法。テスト後に戻す。その間、システムは停止。
ー
トリガー使う人は少数派
トリガーを使うということは、リレーショナルモデルにそってない典型
ー
ストアドプロシージャ
リレーショナルモデルにはもともとないもの
できるだけ使わないほうがよい
ケースバイケース、バッチ処理などではよいのではないか
*
シャーディング・トランザクション
*
正規化
DWH、BIは正規化しない?
table.yobi1-100 をつくっておく…
*
ボイスコット正規形をきちんと説明できるか?★
データベーススペシャリストの試験勉強が一番勉強になる
*
外部キーがあると負荷があがるという都市伝説
チェックしてから更新する
アプリは考慮しない
コードでいうと例外を考慮していない、ようなもの。
*
区分値マスタ★
一個のテーブルに様々なコードをマスタ管理
ひとつにまとめるのはどうかな、という
ポリモフィック環境を実現するためのもの?
関連を定義しているもの
業務要件からかたまってる?
→でも実際はそんなに更新することはない
RDBMSにおいておかないという考え方もあるが、逆にアプリもしくはDBどちらかしかわからないというふうにしたくもない
ジレンマ
ー
アプリケーション側での制御
ー
パーティションという考え方★
*
データベースと多言語対応
*
Suica、消費税が変わると工数が跳ね上がる
なんでか?
買ったときは売掛金だったり。
消費税率の変わるタイミングの考慮をどうするか。
為替と同じロジックで解決できるかも。
*
経験・体験・文化に関するもの
個性的なテーブルってどんなテーブルのことをいうのか
適用期間というなんだけど、from しかない
時間経過でステータスが変わる
→リレーショナルモデル的に難しい
→論理集合じゃなくなる
*
別のところで生成されたデータベースをそのままのフォーマットでDBにつっこむ
値によって意味を変えるカラム、よろしくない
入れ物として使ったRDBのさいたるもの→EAV
ー
複合主キーの数が大量(16-32)で構成
※ここにはあとですこし追記するつもりでいます。