SlideShare una empresa de Scribd logo
1 de 32
Descargar para leer sin conexión
Database Smells
データベースの不吉な臭い
                              @データベース・リファクタリング読書会




 奥野 幹也
 @nippondanji
 mikiya (dot) okuno (at) gmail (dot) com
免責事項
●   本プレゼンテーションにおいて示されている見解は、私自身
    の見解であって、オラクル・コーポレーションの見解を必ず
    しも反映したものではありません。ご了承ください。
自己紹介
●   今日は個人として来ています。
     –   http://nippondanji.blogspot.com/
     –   Twitter: @nippondanji
●   MySQL サポートエンジニア
     –   2000 年にサン・マイクロシステムズ入社
     –   2007 年に MySQL KK へ転職
     –   気付くとまたサン・マイクロシステムズに・・・
     –   現在は日本オラクルに在席。
     –   サポート一筋 12 年
●   日々のしごと
     –   MySQL トラブルシューティング全般
     –   Q&A 回答
         など
私の日々の仕事は
 サポートです。
困ったことがなければ
  特に必要ない
しかし世の中
そんなに甘くない
トラブルは日常!!
難問のラストリゾート・・・
  それがサポート!!
サポートの日常
●   そもそも既に困っているからサポートへ
    –   お客様が既に臭いに気づき・・・
    –   手に負えないからサポートへ!!
    –   既に手遅れな場合も
●   よくあるパターン
    –   個性的なテーブルを目にすること幾多
    –   ややこしいクエリ
    –   膨大なスロークエリログ
世界は
不吉な臭いで
充満している!
世界は不吉な臭いで充満している!!
●   全員が気づいていないことは誰も気付けない
    –   ベストでないプラクティスが慣習に
    –   みんなそれが普通だと思っている
●   日本的なるもの
    –   盲目的な前例主義
    –   変更を許さない官僚主義
    –   面子
          ●   間違いを指摘できない
          ●   指摘しても聴く耳を持たれない
うまい空気を吸いたいです・・・
腐海に入ってはならん・・・



           by ババ様
システム移行案件にて・・・
スキーマは既存システムのものを
    そのまま使います!!


         作りなおす意味あんのかよ・・・
ロジックの実装はすべて PL/SQL
なぜならアーキがそう決めたからです!


       処理の大半はデータの整合性チェックだったり。
       それって DB の制約でできるよね?
お見積もりは
  テーブルひとつにつき○○万円です。
   → じゃあテーブル数を減らそう!
http://sec.ipa.go.jp/std/ent01-c.html




                                        テーブル数が減れば良いってもんじゃ・・・
悲劇を避けるために
ほとんどの問題はテーブル設計に帰着する
●   ひと言で言うと、リレーショナルモデルを無視した設計に
    なっている場合は悲劇につながる。
    –   リレーショナルモデルを正しく使おう!!
          ●   知らない場合はまず勉強しよう!!
    –   リレーショナルモデルを知らずに RDBMS を使うのは、オブ
         ジェクト指向を知らずに Java を書くようなもの。 HTML
         を知らずにウェブプログラムを書くようなもの。運転の仕
         方を知らずにクルマを走らせるようなもの。超危険!!
●   リレーショナルモデル
    –   リレーションの演算
    –   集合論理
●   データベース設計理論
    –   正規化
    –   直交性
アンチパターンのストーリー
Press Enter■
http://el.jibun.atmarkit.co.jp/pressenter/all_entrylist.html

第 1 回より引用

   誰かが Java を教えている。地声なのか熱くなっているのか、講師の声はやたらと大き
               く、いつもより研修内容がよく聞こえていた。

                     唐突に、その言葉が響いた。

           「オブジェクト指向など実業務では使い物にならない!」

                私は思わず手を止めてしまい、壁を見つめた。

                           〜中略〜

   「オブジェクト指向の本とかサイトとか見ると、さぞすごいもののように書かれているけ
   ど、ないからないから、そんなこと。 20 年選手のオレが言うんだから間違いない!」
くれぐれも・・・



リレーショナルモデルなんて
実践では役に立たないなどと
  思わないでください。
RDBMS の落とし穴
●   リレーショナルモデルに従わなくても強力だったりする
    –   データに永続性がある
    –   データをメモリ上にキャッシュできる
    –   トランザクションがある
    –   SQL によって柔軟な検索がおこなえる
    –   インデックスにより高速な検索がおこなえる
    –   バックアップやレプリケーションなどのツールが充実
    –   超便利!!
●   単なるデータの入れ物として使っていませんか?
リレーショナルモデルの利点
●   開発・メンテの効率化
    –   Java に例えると・・・
           ●   例)オブジェクト指向を知らなくても Java は便利だが・・・
                 –   豊富な API やパッケージ
                 –   強力な開発環境
                     etc
           ●   待ち受けてるのは地獄
                 –   読みづらい、コードの重複がたくさん、バグだらけ
    –   リレーショナルモデルに従うと
           ●   アプリのコード量が減る
           ●   データの整合性をデータベースで保証できる
           ●   SELECT がストレートに
           ●   パフォーマンスの向上
           ●   データベースの変更が容易に
というわけでひっそりと連載しています
http://gihyo.jp/magazine/wdpress/archive/2012/vol69




                                          次回は正規化の
                                           お話です。
まとめ!
世界は不吉な臭いが充満している!
●   感覚が麻痺しているかも
     –   内輪の常識を疑う
     –   赤信号、みんなで渡れば怖くない?
           ●   みんな揃って地獄行き!!
     –   プログラムや運用でカバーする羽目になる
           ●   コスト大!!
●   目を覚まそう!!
     –   改善した結果どうなるか
     –   挫けず勇気をもって改善を。
危険を回避するために
●   リレーショナルモデルに従う。
     –   データベースの設計には必須の知識!!
           ●   しかしまともに学習する機会はほとんどないかも。
           ●   何はともあれリレーショナルモデルについての正しい理解
                を。
     –   RDBMS の基本機能だけで満足しない。
     –   正規化とはひと言でいうと重複を排除する作業
           ●   正規化していないとひとつの意味のレコードが複数の場
                所に出現してしまう
           ●   すべてを同時に更新しないと更新異常に!!
●   データベースをリファクタリングしよう!!
     –   世の中は危険な臭いで充満している!!
     –   勇気を持って改善を。
腐海に踏み込んだあなたへ。
●   ガスマスクをつけよう。
    –   適切な防御で身を守ります。
    –   無ければ即死?
●   毒ガスの正体を見極める。
    –   多くのコードはデータの整合性確認に費やされる
    –   逆に言うと・・・
          ●   整合性確認漏れに注意が必要
          ●   整合性は更新処理で問題になる
    –   例)テンポラリテーブルを活用
          ●   条件が複雑な場合にはスパゲティになりがち
          ●   ひとつの SELECT で解決するのではなく、短いクエリに区
               切る
          ●   ストアドプロシージャのほうが上手に書ける場合も
お勧め書籍
●   データベース・リファクタリング以外にも
    –   SQL and Relational Theory
    –   The Art of SQL
    –   SQL Antipatterns
    –   44 のアンチパターンに学ぶ DB システム
ご静聴ありがとうございました。

Más contenido relacionado

La actualidad más candente

リレーショナルデータベースとの上手な付き合い方
リレーショナルデータベースとの上手な付き合い方リレーショナルデータベースとの上手な付き合い方
リレーショナルデータベースとの上手な付き合い方Mikiya Okuno
 
リレーショナルな正しいデータベース設計
リレーショナルな正しいデータベース設計リレーショナルな正しいデータベース設計
リレーショナルな正しいデータベース設計Mikiya Okuno
 
データベース設計徹底指南
データベース設計徹底指南データベース設計徹底指南
データベース設計徹底指南Mikiya Okuno
 
Rdbms qpstudy-okuno
Rdbms qpstudy-okunoRdbms qpstudy-okuno
Rdbms qpstudy-okunoMikiya Okuno
 
What's New in MySQL 5.7 Replication
What's New in MySQL 5.7 ReplicationWhat's New in MySQL 5.7 Replication
What's New in MySQL 5.7 ReplicationMikiya Okuno
 
Analytics Environment
Analytics EnvironmentAnalytics Environment
Analytics EnvironmentYuu Kimy
 
第52回なんてかんたんなJavaEE
第52回なんてかんたんなJavaEE第52回なんてかんたんなJavaEE
第52回なんてかんたんなJavaEEcivicpg
 
第51回NDS PostgreSQLのデータ型 #nds51
第51回NDS PostgreSQLのデータ型 #nds51第51回NDS PostgreSQLのデータ型 #nds51
第51回NDS PostgreSQLのデータ型 #nds51civicpg
 
ActiveRecord::Enumのススメ
ActiveRecord::EnumのススメActiveRecord::Enumのススメ
ActiveRecord::Enumのススメ豊明 尾古
 
Getting start with knockout.js
Getting start with knockout.jsGetting start with knockout.js
Getting start with knockout.jsAkio Ishida
 
今さら聞けないDiとspring
今さら聞けないDiとspring今さら聞けないDiとspring
今さら聞けないDiとspring土岐 孝平
 
人材発掘うっはうは
人材発掘うっはうは人材発掘うっはうは
人材発掘うっはうはKen Ogura
 
Dark vol4 for_slideshare
Dark vol4 for_slideshareDark vol4 for_slideshare
Dark vol4 for_slideshareara_ta3
 
IT業界における伝統芸能の継承 #hachiojipm
IT業界における伝統芸能の継承 #hachiojipmIT業界における伝統芸能の継承 #hachiojipm
IT業界における伝統芸能の継承 #hachiojipm鉄次 尾形
 
Rxjavaとoptionalで関数型androidしよう
Rxjavaとoptionalで関数型androidしようRxjavaとoptionalで関数型androidしよう
Rxjavaとoptionalで関数型androidしようFumihiko Shiroyama
 
クライアントサイドjavascript簡単紹介
クライアントサイドjavascript簡単紹介クライアントサイドjavascript簡単紹介
クライアントサイドjavascript簡単紹介しくみ製作所
 
Pentaho ETL@DevLOVE関西
Pentaho ETL@DevLOVE関西Pentaho ETL@DevLOVE関西
Pentaho ETL@DevLOVE関西Hirokazu Tokuno
 
複合主キーの扱い方
複合主キーの扱い方複合主キーの扱い方
複合主キーの扱い方Makoto SAKAI
 
JavaScriptユーティリティライブラリの紹介
JavaScriptユーティリティライブラリの紹介JavaScriptユーティリティライブラリの紹介
JavaScriptユーティリティライブラリの紹介Yusuke Hirao
 

La actualidad más candente (20)

リレーショナルデータベースとの上手な付き合い方
リレーショナルデータベースとの上手な付き合い方リレーショナルデータベースとの上手な付き合い方
リレーショナルデータベースとの上手な付き合い方
 
リレーショナルな正しいデータベース設計
リレーショナルな正しいデータベース設計リレーショナルな正しいデータベース設計
リレーショナルな正しいデータベース設計
 
データベース設計徹底指南
データベース設計徹底指南データベース設計徹底指南
データベース設計徹底指南
 
Rdbms qpstudy-okuno
Rdbms qpstudy-okunoRdbms qpstudy-okuno
Rdbms qpstudy-okuno
 
What's New in MySQL 5.7 Replication
What's New in MySQL 5.7 ReplicationWhat's New in MySQL 5.7 Replication
What's New in MySQL 5.7 Replication
 
Analytics Environment
Analytics EnvironmentAnalytics Environment
Analytics Environment
 
第52回なんてかんたんなJavaEE
第52回なんてかんたんなJavaEE第52回なんてかんたんなJavaEE
第52回なんてかんたんなJavaEE
 
第51回NDS PostgreSQLのデータ型 #nds51
第51回NDS PostgreSQLのデータ型 #nds51第51回NDS PostgreSQLのデータ型 #nds51
第51回NDS PostgreSQLのデータ型 #nds51
 
ActiveRecord::Enumのススメ
ActiveRecord::EnumのススメActiveRecord::Enumのススメ
ActiveRecord::Enumのススメ
 
Getting start with knockout.js
Getting start with knockout.jsGetting start with knockout.js
Getting start with knockout.js
 
今さら聞けないDiとspring
今さら聞けないDiとspring今さら聞けないDiとspring
今さら聞けないDiとspring
 
人材発掘うっはうは
人材発掘うっはうは人材発掘うっはうは
人材発掘うっはうは
 
Dark vol4 for_slideshare
Dark vol4 for_slideshareDark vol4 for_slideshare
Dark vol4 for_slideshare
 
TypeScript 勉強会
TypeScript 勉強会TypeScript 勉強会
TypeScript 勉強会
 
IT業界における伝統芸能の継承 #hachiojipm
IT業界における伝統芸能の継承 #hachiojipmIT業界における伝統芸能の継承 #hachiojipm
IT業界における伝統芸能の継承 #hachiojipm
 
Rxjavaとoptionalで関数型androidしよう
Rxjavaとoptionalで関数型androidしようRxjavaとoptionalで関数型androidしよう
Rxjavaとoptionalで関数型androidしよう
 
クライアントサイドjavascript簡単紹介
クライアントサイドjavascript簡単紹介クライアントサイドjavascript簡単紹介
クライアントサイドjavascript簡単紹介
 
Pentaho ETL@DevLOVE関西
Pentaho ETL@DevLOVE関西Pentaho ETL@DevLOVE関西
Pentaho ETL@DevLOVE関西
 
複合主キーの扱い方
複合主キーの扱い方複合主キーの扱い方
複合主キーの扱い方
 
JavaScriptユーティリティライブラリの紹介
JavaScriptユーティリティライブラリの紹介JavaScriptユーティリティライブラリの紹介
JavaScriptユーティリティライブラリの紹介
 

Destacado

Data analytics with hadoop hive on multiple data centers
Data analytics with hadoop hive on multiple data centersData analytics with hadoop hive on multiple data centers
Data analytics with hadoop hive on multiple data centersHirotaka Niisato
 
PostgreSQLの実行計画を読み解こう(OSC2015 Spring/Tokyo)
PostgreSQLの実行計画を読み解こう(OSC2015 Spring/Tokyo)PostgreSQLの実行計画を読み解こう(OSC2015 Spring/Tokyo)
PostgreSQLの実行計画を読み解こう(OSC2015 Spring/Tokyo)Satoshi Yamada
 
【17-E-3】 オンライン機械学習で実現する大規模データ処理
【17-E-3】 オンライン機械学習で実現する大規模データ処理【17-E-3】 オンライン機械学習で実現する大規模データ処理
【17-E-3】 オンライン機械学習で実現する大規模データ処理Developers Summit
 
Cloudera Manager4.0とNameNode-HAセミナー資料
Cloudera Manager4.0とNameNode-HAセミナー資料Cloudera Manager4.0とNameNode-HAセミナー資料
Cloudera Manager4.0とNameNode-HAセミナー資料Cloudera Japan
 
Writing Yarn Applications Hadoop Summit 2012
Writing Yarn Applications Hadoop Summit 2012Writing Yarn Applications Hadoop Summit 2012
Writing Yarn Applications Hadoop Summit 2012Hortonworks
 
Lars George HBase Seminar with O'REILLY Oct.12 2012
Lars George HBase Seminar with O'REILLY Oct.12 2012Lars George HBase Seminar with O'REILLY Oct.12 2012
Lars George HBase Seminar with O'REILLY Oct.12 2012Cloudera Japan
 
Future of HCatalog - Hadoop Summit 2012
Future of HCatalog - Hadoop Summit 2012Future of HCatalog - Hadoop Summit 2012
Future of HCatalog - Hadoop Summit 2012Hortonworks
 
並列データベースシステムの概念と原理
並列データベースシステムの概念と原理並列データベースシステムの概念と原理
並列データベースシステムの概念と原理Makoto Yui
 
あなたの知らないPostgreSQL監視の世界
あなたの知らないPostgreSQL監視の世界あなたの知らないPostgreSQL監視の世界
あなたの知らないPostgreSQL監視の世界Yoshinori Nakanishi
 
Hadoop Summit 2012 - Hadoop and Vertica: The Data Analytics Platform at Twitter
Hadoop Summit 2012 - Hadoop and Vertica: The Data Analytics Platform at TwitterHadoop Summit 2012 - Hadoop and Vertica: The Data Analytics Platform at Twitter
Hadoop Summit 2012 - Hadoop and Vertica: The Data Analytics Platform at TwitterBill Graham
 
【SQLインジェクション対策】徳丸先生に怒られない、動的SQLの安全な組み立て方
【SQLインジェクション対策】徳丸先生に怒られない、動的SQLの安全な組み立て方【SQLインジェクション対策】徳丸先生に怒られない、動的SQLの安全な組み立て方
【SQLインジェクション対策】徳丸先生に怒られない、動的SQLの安全な組み立て方kwatch
 
SQLチューニング入門 入門編
SQLチューニング入門 入門編SQLチューニング入門 入門編
SQLチューニング入門 入門編Miki Shimogai
 
Datalogからsqlへの トランスレータを書いた話
Datalogからsqlへの トランスレータを書いた話Datalogからsqlへの トランスレータを書いた話
Datalogからsqlへの トランスレータを書いた話Yuki Takeichi
 
PostgreSQLクエリ実行の基礎知識 ~Explainを読み解こう~
PostgreSQLクエリ実行の基礎知識 ~Explainを読み解こう~PostgreSQLクエリ実行の基礎知識 ~Explainを読み解こう~
PostgreSQLクエリ実行の基礎知識 ~Explainを読み解こう~Miki Shimogai
 

Destacado (15)

Data analytics with hadoop hive on multiple data centers
Data analytics with hadoop hive on multiple data centersData analytics with hadoop hive on multiple data centers
Data analytics with hadoop hive on multiple data centers
 
PostgreSQLの実行計画を読み解こう(OSC2015 Spring/Tokyo)
PostgreSQLの実行計画を読み解こう(OSC2015 Spring/Tokyo)PostgreSQLの実行計画を読み解こう(OSC2015 Spring/Tokyo)
PostgreSQLの実行計画を読み解こう(OSC2015 Spring/Tokyo)
 
【17-E-3】 オンライン機械学習で実現する大規模データ処理
【17-E-3】 オンライン機械学習で実現する大規模データ処理【17-E-3】 オンライン機械学習で実現する大規模データ処理
【17-E-3】 オンライン機械学習で実現する大規模データ処理
 
Cloudera Manager4.0とNameNode-HAセミナー資料
Cloudera Manager4.0とNameNode-HAセミナー資料Cloudera Manager4.0とNameNode-HAセミナー資料
Cloudera Manager4.0とNameNode-HAセミナー資料
 
Writing Yarn Applications Hadoop Summit 2012
Writing Yarn Applications Hadoop Summit 2012Writing Yarn Applications Hadoop Summit 2012
Writing Yarn Applications Hadoop Summit 2012
 
Lars George HBase Seminar with O'REILLY Oct.12 2012
Lars George HBase Seminar with O'REILLY Oct.12 2012Lars George HBase Seminar with O'REILLY Oct.12 2012
Lars George HBase Seminar with O'REILLY Oct.12 2012
 
Future of HCatalog - Hadoop Summit 2012
Future of HCatalog - Hadoop Summit 2012Future of HCatalog - Hadoop Summit 2012
Future of HCatalog - Hadoop Summit 2012
 
並列データベースシステムの概念と原理
並列データベースシステムの概念と原理並列データベースシステムの概念と原理
並列データベースシステムの概念と原理
 
あなたの知らないPostgreSQL監視の世界
あなたの知らないPostgreSQL監視の世界あなたの知らないPostgreSQL監視の世界
あなたの知らないPostgreSQL監視の世界
 
Hadoop Summit 2012 - Hadoop and Vertica: The Data Analytics Platform at Twitter
Hadoop Summit 2012 - Hadoop and Vertica: The Data Analytics Platform at TwitterHadoop Summit 2012 - Hadoop and Vertica: The Data Analytics Platform at Twitter
Hadoop Summit 2012 - Hadoop and Vertica: The Data Analytics Platform at Twitter
 
【SQLインジェクション対策】徳丸先生に怒られない、動的SQLの安全な組み立て方
【SQLインジェクション対策】徳丸先生に怒られない、動的SQLの安全な組み立て方【SQLインジェクション対策】徳丸先生に怒られない、動的SQLの安全な組み立て方
【SQLインジェクション対策】徳丸先生に怒られない、動的SQLの安全な組み立て方
 
SQLチューニング入門 入門編
SQLチューニング入門 入門編SQLチューニング入門 入門編
SQLチューニング入門 入門編
 
Datalogからsqlへの トランスレータを書いた話
Datalogからsqlへの トランスレータを書いた話Datalogからsqlへの トランスレータを書いた話
Datalogからsqlへの トランスレータを書いた話
 
ならば(その弐)
ならば(その弐)ならば(その弐)
ならば(その弐)
 
PostgreSQLクエリ実行の基礎知識 ~Explainを読み解こう~
PostgreSQLクエリ実行の基礎知識 ~Explainを読み解こう~PostgreSQLクエリ実行の基礎知識 ~Explainを読み解こう~
PostgreSQLクエリ実行の基礎知識 ~Explainを読み解こう~
 

Similar a Database smells

リレーショナルデータベースとの上手な付き合い方 long version
リレーショナルデータベースとの上手な付き合い方 long version リレーショナルデータベースとの上手な付き合い方 long version
リレーショナルデータベースとの上手な付き合い方 long version Mikiya Okuno
 
Jubatusの紹介@第6回さくさくテキストマイニング
Jubatusの紹介@第6回さくさくテキストマイニングJubatusの紹介@第6回さくさくテキストマイニング
Jubatusの紹介@第6回さくさくテキストマイニングYuya Unno
 
モジュールの凝集度・結合度・インタフェース
モジュールの凝集度・結合度・インタフェースモジュールの凝集度・結合度・インタフェース
モジュールの凝集度・結合度・インタフェースHajime Yanagawa
 
opensource and accessibility (Dec2000) Part 2
opensource and accessibility (Dec2000) Part 2opensource and accessibility (Dec2000) Part 2
opensource and accessibility (Dec2000) Part 2Takuya Nishimoto
 
Amazon DynamoDB 初心者が理解した事
Amazon DynamoDB 初心者が理解した事Amazon DynamoDB 初心者が理解した事
Amazon DynamoDB 初心者が理解した事Hirokazu Tokuno
 
フレームワーク使おうぜ!
フレームワーク使おうぜ!フレームワーク使おうぜ!
フレームワーク使おうぜ!Takuya Sato
 
Intoroduction of Bad Data Handbook
Intoroduction of Bad Data HandbookIntoroduction of Bad Data Handbook
Intoroduction of Bad Data HandbookAtsushi Hayakawa
 
20121019-jenkins-akiko_pusu.pdf
20121019-jenkins-akiko_pusu.pdf20121019-jenkins-akiko_pusu.pdf
20121019-jenkins-akiko_pusu.pdfakiko_pusu
 
【Hpcstudy】みんな、ベンチマークどうやってるの?
【Hpcstudy】みんな、ベンチマークどうやってるの?【Hpcstudy】みんな、ベンチマークどうやってるの?
【Hpcstudy】みんな、ベンチマークどうやってるの?Seiichiro Ishida
 
Janog31 bof-pattern-sasaki-01
Janog31 bof-pattern-sasaki-01Janog31 bof-pattern-sasaki-01
Janog31 bof-pattern-sasaki-01Ken SASAKI
 
議論を描く技術「ファシリテーショングラフィック」
議論を描く技術「ファシリテーショングラフィック」議論を描く技術「ファシリテーショングラフィック」
議論を描く技術「ファシリテーショングラフィック」nishikawa_makoto7
 
アジャイル開発を始めてみませんか?(思い出編)
アジャイル開発を始めてみませんか?(思い出編)アジャイル開発を始めてみませんか?(思い出編)
アジャイル開発を始めてみませんか?(思い出編)Miho Nagase
 
PFPファシグラ(2009/07/03)
PFPファシグラ(2009/07/03)PFPファシグラ(2009/07/03)
PFPファシグラ(2009/07/03)nishikawa_makoto7
 
TypeScriptをオススメする理由
TypeScriptをオススメする理由TypeScriptをオススメする理由
TypeScriptをオススメする理由Yusuke Naka
 
大規模ソーシャルゲームを支える技術~PHP+MySQLを使った高負荷対策~
大規模ソーシャルゲームを支える技術~PHP+MySQLを使った高負荷対策~大規模ソーシャルゲームを支える技術~PHP+MySQLを使った高負荷対策~
大規模ソーシャルゲームを支える技術~PHP+MySQLを使った高負荷対策~infinite_loop
 
B 2-1 はじめての Windows Azure
B 2-1 はじめての Windows AzureB 2-1 はじめての Windows Azure
B 2-1 はじめての Windows AzureGoAzure
 
20120927 findjob4 dev_ops
20120927 findjob4 dev_ops20120927 findjob4 dev_ops
20120927 findjob4 dev_opsume3_
 

Similar a Database smells (20)

リレーショナルデータベースとの上手な付き合い方 long version
リレーショナルデータベースとの上手な付き合い方 long version リレーショナルデータベースとの上手な付き合い方 long version
リレーショナルデータベースとの上手な付き合い方 long version
 
Jubatusの紹介@第6回さくさくテキストマイニング
Jubatusの紹介@第6回さくさくテキストマイニングJubatusの紹介@第6回さくさくテキストマイニング
Jubatusの紹介@第6回さくさくテキストマイニング
 
モジュールの凝集度・結合度・インタフェース
モジュールの凝集度・結合度・インタフェースモジュールの凝集度・結合度・インタフェース
モジュールの凝集度・結合度・インタフェース
 
opensource and accessibility (Dec2000) Part 2
opensource and accessibility (Dec2000) Part 2opensource and accessibility (Dec2000) Part 2
opensource and accessibility (Dec2000) Part 2
 
Amazon DynamoDB 初心者が理解した事
Amazon DynamoDB 初心者が理解した事Amazon DynamoDB 初心者が理解した事
Amazon DynamoDB 初心者が理解した事
 
フレームワーク使おうぜ!
フレームワーク使おうぜ!フレームワーク使おうぜ!
フレームワーク使おうぜ!
 
Intoroduction of Bad Data Handbook
Intoroduction of Bad Data HandbookIntoroduction of Bad Data Handbook
Intoroduction of Bad Data Handbook
 
20121019-jenkins-akiko_pusu.pdf
20121019-jenkins-akiko_pusu.pdf20121019-jenkins-akiko_pusu.pdf
20121019-jenkins-akiko_pusu.pdf
 
【Hpcstudy】みんな、ベンチマークどうやってるの?
【Hpcstudy】みんな、ベンチマークどうやってるの?【Hpcstudy】みんな、ベンチマークどうやってるの?
【Hpcstudy】みんな、ベンチマークどうやってるの?
 
Janog31 bof-pattern-sasaki-01
Janog31 bof-pattern-sasaki-01Janog31 bof-pattern-sasaki-01
Janog31 bof-pattern-sasaki-01
 
議論を描く技術「ファシリテーショングラフィック」
議論を描く技術「ファシリテーショングラフィック」議論を描く技術「ファシリテーショングラフィック」
議論を描く技術「ファシリテーショングラフィック」
 
Djangoのススメ
DjangoのススメDjangoのススメ
Djangoのススメ
 
アジャイル開発を始めてみませんか?(思い出編)
アジャイル開発を始めてみませんか?(思い出編)アジャイル開発を始めてみませんか?(思い出編)
アジャイル開発を始めてみませんか?(思い出編)
 
PFPファシグラ(2009/07/03)
PFPファシグラ(2009/07/03)PFPファシグラ(2009/07/03)
PFPファシグラ(2009/07/03)
 
DevOps Conference #1
DevOps Conference #1DevOps Conference #1
DevOps Conference #1
 
TypeScriptをオススメする理由
TypeScriptをオススメする理由TypeScriptをオススメする理由
TypeScriptをオススメする理由
 
大規模ソーシャルゲームを支える技術~PHP+MySQLを使った高負荷対策~
大規模ソーシャルゲームを支える技術~PHP+MySQLを使った高負荷対策~大規模ソーシャルゲームを支える技術~PHP+MySQLを使った高負荷対策~
大規模ソーシャルゲームを支える技術~PHP+MySQLを使った高負荷対策~
 
オススメ書籍紹介
 オススメ書籍紹介 オススメ書籍紹介
オススメ書籍紹介
 
B 2-1 はじめての Windows Azure
B 2-1 はじめての Windows AzureB 2-1 はじめての Windows Azure
B 2-1 はじめての Windows Azure
 
20120927 findjob4 dev_ops
20120927 findjob4 dev_ops20120927 findjob4 dev_ops
20120927 findjob4 dev_ops
 

Más de Mikiya Okuno

MySQL Cluster 新機能解説 7.5 and beyond
MySQL Cluster 新機能解説 7.5 and beyondMySQL Cluster 新機能解説 7.5 and beyond
MySQL Cluster 新機能解説 7.5 and beyondMikiya Okuno
 
MySQL 5.7 トラブルシューティング 性能解析入門編
MySQL 5.7 トラブルシューティング 性能解析入門編MySQL 5.7 トラブルシューティング 性能解析入門編
MySQL 5.7 トラブルシューティング 性能解析入門編Mikiya Okuno
 
私は如何にして詳解 MySQL 5.7を執筆するに至ったか
私は如何にして詳解 MySQL 5.7を執筆するに至ったか私は如何にして詳解 MySQL 5.7を執筆するに至ったか
私は如何にして詳解 MySQL 5.7を執筆するに至ったかMikiya Okuno
 
What's New in MySQL 5.7 Security
What's New in MySQL 5.7 SecurityWhat's New in MySQL 5.7 Security
What's New in MySQL 5.7 SecurityMikiya Okuno
 
とあるギークのキーボード遍歴
とあるギークのキーボード遍歴とあるギークのキーボード遍歴
とあるギークのキーボード遍歴Mikiya Okuno
 
What's New in MySQL 5.7 InnoDB
What's New in MySQL 5.7 InnoDBWhat's New in MySQL 5.7 InnoDB
What's New in MySQL 5.7 InnoDBMikiya Okuno
 
What's New in MySQL 5.7 Optimizer @MySQL User Conference Tokyo 2015
What's New in MySQL 5.7 Optimizer @MySQL User Conference Tokyo 2015What's New in MySQL 5.7 Optimizer @MySQL User Conference Tokyo 2015
What's New in MySQL 5.7 Optimizer @MySQL User Conference Tokyo 2015Mikiya Okuno
 
MySQL Cluster 7.4で楽しむスケールアウト @DB Tech Showcase 2015/06
MySQL Cluster 7.4で楽しむスケールアウト @DB Tech Showcase 2015/06MySQL Cluster 7.4で楽しむスケールアウト @DB Tech Showcase 2015/06
MySQL Cluster 7.4で楽しむスケールアウト @DB Tech Showcase 2015/06Mikiya Okuno
 
人類は如何にして大切な データベースを守るべきか
人類は如何にして大切な データベースを守るべきか人類は如何にして大切な データベースを守るべきか
人類は如何にして大切な データベースを守るべきかMikiya Okuno
 
MySQLトラブル解析入門
MySQLトラブル解析入門MySQLトラブル解析入門
MySQLトラブル解析入門Mikiya Okuno
 
カジュアルにMySQL Clusterを使ってみよう@MySQL Cluster Casual Talks 2013.09
カジュアルにMySQL Clusterを使ってみよう@MySQL Cluster Casual Talks 2013.09カジュアルにMySQL Clusterを使ってみよう@MySQL Cluster Casual Talks 2013.09
カジュアルにMySQL Clusterを使ってみよう@MySQL Cluster Casual Talks 2013.09Mikiya Okuno
 
MySQl 5.6新機能解説@第一回 中国地方DB勉強会
MySQl 5.6新機能解説@第一回 中国地方DB勉強会MySQl 5.6新機能解説@第一回 中国地方DB勉強会
MySQl 5.6新機能解説@第一回 中国地方DB勉強会Mikiya Okuno
 
MySQL 5.6新機能解説@dbtechshowcase2012
MySQL 5.6新機能解説@dbtechshowcase2012MySQL 5.6新機能解説@dbtechshowcase2012
MySQL 5.6新機能解説@dbtechshowcase2012Mikiya Okuno
 
MySQL日本語利用徹底入門
MySQL日本語利用徹底入門MySQL日本語利用徹底入門
MySQL日本語利用徹底入門Mikiya Okuno
 
Performance Schema @ MySQL Casual #2
Performance Schema @ MySQL Casual #2Performance Schema @ MySQL Casual #2
Performance Schema @ MySQL Casual #2Mikiya Okuno
 
Art of MySQL Replication.
Art of MySQL Replication.Art of MySQL Replication.
Art of MySQL Replication.Mikiya Okuno
 

Más de Mikiya Okuno (17)

MySQL Cluster 新機能解説 7.5 and beyond
MySQL Cluster 新機能解説 7.5 and beyondMySQL Cluster 新機能解説 7.5 and beyond
MySQL Cluster 新機能解説 7.5 and beyond
 
MySQL 5.7 トラブルシューティング 性能解析入門編
MySQL 5.7 トラブルシューティング 性能解析入門編MySQL 5.7 トラブルシューティング 性能解析入門編
MySQL 5.7 トラブルシューティング 性能解析入門編
 
私は如何にして詳解 MySQL 5.7を執筆するに至ったか
私は如何にして詳解 MySQL 5.7を執筆するに至ったか私は如何にして詳解 MySQL 5.7を執筆するに至ったか
私は如何にして詳解 MySQL 5.7を執筆するに至ったか
 
What's New in MySQL 5.7 Security
What's New in MySQL 5.7 SecurityWhat's New in MySQL 5.7 Security
What's New in MySQL 5.7 Security
 
とあるギークのキーボード遍歴
とあるギークのキーボード遍歴とあるギークのキーボード遍歴
とあるギークのキーボード遍歴
 
What's New in MySQL 5.7 InnoDB
What's New in MySQL 5.7 InnoDBWhat's New in MySQL 5.7 InnoDB
What's New in MySQL 5.7 InnoDB
 
What's New in MySQL 5.7 Optimizer @MySQL User Conference Tokyo 2015
What's New in MySQL 5.7 Optimizer @MySQL User Conference Tokyo 2015What's New in MySQL 5.7 Optimizer @MySQL User Conference Tokyo 2015
What's New in MySQL 5.7 Optimizer @MySQL User Conference Tokyo 2015
 
MySQL Cluster 7.4で楽しむスケールアウト @DB Tech Showcase 2015/06
MySQL Cluster 7.4で楽しむスケールアウト @DB Tech Showcase 2015/06MySQL Cluster 7.4で楽しむスケールアウト @DB Tech Showcase 2015/06
MySQL Cluster 7.4で楽しむスケールアウト @DB Tech Showcase 2015/06
 
人類は如何にして大切な データベースを守るべきか
人類は如何にして大切な データベースを守るべきか人類は如何にして大切な データベースを守るべきか
人類は如何にして大切な データベースを守るべきか
 
MySQLトラブル解析入門
MySQLトラブル解析入門MySQLトラブル解析入門
MySQLトラブル解析入門
 
Mysql toranomaki
Mysql toranomakiMysql toranomaki
Mysql toranomaki
 
カジュアルにMySQL Clusterを使ってみよう@MySQL Cluster Casual Talks 2013.09
カジュアルにMySQL Clusterを使ってみよう@MySQL Cluster Casual Talks 2013.09カジュアルにMySQL Clusterを使ってみよう@MySQL Cluster Casual Talks 2013.09
カジュアルにMySQL Clusterを使ってみよう@MySQL Cluster Casual Talks 2013.09
 
MySQl 5.6新機能解説@第一回 中国地方DB勉強会
MySQl 5.6新機能解説@第一回 中国地方DB勉強会MySQl 5.6新機能解説@第一回 中国地方DB勉強会
MySQl 5.6新機能解説@第一回 中国地方DB勉強会
 
MySQL 5.6新機能解説@dbtechshowcase2012
MySQL 5.6新機能解説@dbtechshowcase2012MySQL 5.6新機能解説@dbtechshowcase2012
MySQL 5.6新機能解説@dbtechshowcase2012
 
MySQL日本語利用徹底入門
MySQL日本語利用徹底入門MySQL日本語利用徹底入門
MySQL日本語利用徹底入門
 
Performance Schema @ MySQL Casual #2
Performance Schema @ MySQL Casual #2Performance Schema @ MySQL Casual #2
Performance Schema @ MySQL Casual #2
 
Art of MySQL Replication.
Art of MySQL Replication.Art of MySQL Replication.
Art of MySQL Replication.
 

Database smells

  • 1. Database Smells データベースの不吉な臭い @データベース・リファクタリング読書会 奥野 幹也 @nippondanji mikiya (dot) okuno (at) gmail (dot) com
  • 2. 免責事項 ● 本プレゼンテーションにおいて示されている見解は、私自身 の見解であって、オラクル・コーポレーションの見解を必ず しも反映したものではありません。ご了承ください。
  • 3. 自己紹介 ● 今日は個人として来ています。 – http://nippondanji.blogspot.com/ – Twitter: @nippondanji ● MySQL サポートエンジニア – 2000 年にサン・マイクロシステムズ入社 – 2007 年に MySQL KK へ転職 – 気付くとまたサン・マイクロシステムズに・・・ – 現在は日本オラクルに在席。 – サポート一筋 12 年 ● 日々のしごと – MySQL トラブルシューティング全般 – Q&A 回答 など
  • 9.
  • 10.
  • 11.
  • 12. サポートの日常 ● そもそも既に困っているからサポートへ – お客様が既に臭いに気づき・・・ – 手に負えないからサポートへ!! – 既に手遅れな場合も ● よくあるパターン – 個性的なテーブルを目にすること幾多 – ややこしいクエリ – 膨大なスロークエリログ
  • 14. 世界は不吉な臭いで充満している!! ● 全員が気づいていないことは誰も気付けない – ベストでないプラクティスが慣習に – みんなそれが普通だと思っている ● 日本的なるもの – 盲目的な前例主義 – 変更を許さない官僚主義 – 面子 ● 間違いを指摘できない ● 指摘しても聴く耳を持たれない
  • 17. システム移行案件にて・・・ スキーマは既存システムのものを そのまま使います!! 作りなおす意味あんのかよ・・・
  • 18. ロジックの実装はすべて PL/SQL なぜならアーキがそう決めたからです! 処理の大半はデータの整合性チェックだったり。 それって DB の制約でできるよね?
  • 19. お見積もりは テーブルひとつにつき○○万円です。 → じゃあテーブル数を減らそう! http://sec.ipa.go.jp/std/ent01-c.html テーブル数が減れば良いってもんじゃ・・・
  • 21. ほとんどの問題はテーブル設計に帰着する ● ひと言で言うと、リレーショナルモデルを無視した設計に なっている場合は悲劇につながる。 – リレーショナルモデルを正しく使おう!! ● 知らない場合はまず勉強しよう!! – リレーショナルモデルを知らずに RDBMS を使うのは、オブ ジェクト指向を知らずに Java を書くようなもの。 HTML を知らずにウェブプログラムを書くようなもの。運転の仕 方を知らずにクルマを走らせるようなもの。超危険!! ● リレーショナルモデル – リレーションの演算 – 集合論理 ● データベース設計理論 – 正規化 – 直交性
  • 22. アンチパターンのストーリー Press Enter■ http://el.jibun.atmarkit.co.jp/pressenter/all_entrylist.html 第 1 回より引用 誰かが Java を教えている。地声なのか熱くなっているのか、講師の声はやたらと大き く、いつもより研修内容がよく聞こえていた。  唐突に、その言葉が響いた。  「オブジェクト指向など実業務では使い物にならない!」  私は思わず手を止めてしまい、壁を見つめた。 〜中略〜 「オブジェクト指向の本とかサイトとか見ると、さぞすごいもののように書かれているけ ど、ないからないから、そんなこと。 20 年選手のオレが言うんだから間違いない!」
  • 24. RDBMS の落とし穴 ● リレーショナルモデルに従わなくても強力だったりする – データに永続性がある – データをメモリ上にキャッシュできる – トランザクションがある – SQL によって柔軟な検索がおこなえる – インデックスにより高速な検索がおこなえる – バックアップやレプリケーションなどのツールが充実 – 超便利!! ● 単なるデータの入れ物として使っていませんか?
  • 25. リレーショナルモデルの利点 ● 開発・メンテの効率化 – Java に例えると・・・ ● 例)オブジェクト指向を知らなくても Java は便利だが・・・ – 豊富な API やパッケージ – 強力な開発環境 etc ● 待ち受けてるのは地獄 – 読みづらい、コードの重複がたくさん、バグだらけ – リレーショナルモデルに従うと ● アプリのコード量が減る ● データの整合性をデータベースで保証できる ● SELECT がストレートに ● パフォーマンスの向上 ● データベースの変更が容易に
  • 28. 世界は不吉な臭いが充満している! ● 感覚が麻痺しているかも – 内輪の常識を疑う – 赤信号、みんなで渡れば怖くない? ● みんな揃って地獄行き!! – プログラムや運用でカバーする羽目になる ● コスト大!! ● 目を覚まそう!! – 改善した結果どうなるか – 挫けず勇気をもって改善を。
  • 29. 危険を回避するために ● リレーショナルモデルに従う。 – データベースの設計には必須の知識!! ● しかしまともに学習する機会はほとんどないかも。 ● 何はともあれリレーショナルモデルについての正しい理解 を。 – RDBMS の基本機能だけで満足しない。 – 正規化とはひと言でいうと重複を排除する作業 ● 正規化していないとひとつの意味のレコードが複数の場 所に出現してしまう ● すべてを同時に更新しないと更新異常に!! ● データベースをリファクタリングしよう!! – 世の中は危険な臭いで充満している!! – 勇気を持って改善を。
  • 30. 腐海に踏み込んだあなたへ。 ● ガスマスクをつけよう。 – 適切な防御で身を守ります。 – 無ければ即死? ● 毒ガスの正体を見極める。 – 多くのコードはデータの整合性確認に費やされる – 逆に言うと・・・ ● 整合性確認漏れに注意が必要 ● 整合性は更新処理で問題になる – 例)テンポラリテーブルを活用 ● 条件が複雑な場合にはスパゲティになりがち ● ひとつの SELECT で解決するのではなく、短いクエリに区 切る ● ストアドプロシージャのほうが上手に書ける場合も
  • 31. お勧め書籍 ● データベース・リファクタリング以外にも – SQL and Relational Theory – The Art of SQL – SQL Antipatterns – 44 のアンチパターンに学ぶ DB システム