Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

データベース入門

1,487 views

Published on

非エンジニアでもわかるように、データベースとは何か。特にリレーショナルデータベースとは何か、といったことを解説してまとめてみました。

Published in: Engineering
  • Be the first to comment

データベース入門

  1. 1. データベース入門
  2. 2. 目次 • データベースとは? • リレーショナルデータベースとは? • リレーショナルデータベースの種類と特徴 • 基本的なSQL • ORM • インデックス • トランザクション • 排他制御
  3. 3. データベースとは • 検索や蓄積が容易にできるよう整理された情報の集まり。 • Database -> DBと表記される 【参考】 • https://ja.wikipedia.org/wiki/%E3%83%87%E3%83%BC%E3%82%BF%E3%83%99%E3%8 3%BC%E3%82%B9
  4. 4. そもそも プログラム = アルゴリズム + データ構 造
  5. 5. データベースがある世界とない世界 【参考】 http://www.softantenna.com/wp/webservice/naikakufu-shukujitsu-csv-format/ わからない… (*・ω・)oO(理解不能…) なるほど… (・ェ・。)ナルホド
  6. 6. データベースの種類 • リレーショナル(関係)データベース(RDB): Oracle, MySQL, PostgreSQL, SQLiteなど • キー・バリュー型 (Key Value Store): Redis など • ソート済みカラム指向: Apache Cassandraなど • ドキュメント指向(Document store):MongoDBなど NoSQL 【参考】 • https://ja.wikipedia.org/wiki/NoSQL • https://ja.wikipedia.org/wiki/%E9%96%A2%E4%BF%82%E3%83%87%E3%83%BC%E3%8 2%BF%E3%83%99%E3%83%BC%E3%82%B9
  7. 7. リレーショナルデータベースの特徴 • データを適切に管理して扱うことができる (必要な時に必要なものを 必要な分だけとりだして使用することができる) • 基本的に保存されるデータは永続的(電源を落としてもデータが消 えない) • データの管理がしやすい http://www.k-miike.net/educator/kyozai/14-fileio.pdf ファイル読み込みの仕組み
  8. 8. リレーショナルデータベースとは? エクセルです!!!! エクセルのように表 の形式でデータを 管理しているもの (50点)
  9. 9. リレーショナルデータベースとエクセルの用語比較 リレーショナルデータベース Excel table シート column 列 record・row 行 field セル 【参考】 https://academy.gmocloud.com/know/20160425/2259
  10. 10. エクセルにはないものの考え方 • カラム(列)を作成する時は属性を設定できる。必ず指 定しなければいけない属性として列の名前、保存する テータタイプ(型)を指定しなければならない。 • このほかに指定できる属性 名前 意味 Primary Key(主キー) 主キー (後述) Auto Increament 自動連番 Default ドフォルト値 Not Nul NULLにできない Index インデックス(索引) (後述) Unique Index 一意制約 などなど
  11. 11. リレーショナルデータベースの制御 リレーショナルデータベースを管理、制御するシステムのことをリレーショナルデータベース 管理システム(RDBMS)という データベースの制御はSQLと呼ばれる、データの操作や定義を行うためのデータベース言 語を用いて制御する。 SQL = 一種のプログラミング言語 RDBMS => Microsoft Office Excel SQL => Excelで言う所のマクロみたいなもの
  12. 12. SQLite アプリケーションに組み込んで利用される軽量の データベース 【参考】 https://ja.wikipedia.org/wiki/SQLite
  13. 13. SQLiteの特徴 • サーバーではなく端末に組み込こまれる • 速い(他のリレーショナルデータベースと比べて) • データが全て一つのファイルに保存される(.dbファイル) • スマートフォン(Android、iOS)には標準で組み込まれている 小 ~ 中規模で使われるデータベース
  14. 14. SQLITEを入れたことでどう変わった? 毎回ダウンロード Before 一回だけダウンロード after 割と大きなデータ 割と大きなデータ
  15. 15. MySQL・MariaDB 世界でもっとも普及しているオープンソースの リレーショナルデータベース 【参考】 https://ja.wikipedia.org/wiki/MySQL
  16. 16. MySQLの特徴 • 多機能 • データの保存とアクセスを行うストレージエンジンがSQLパー サとは分離独立している。 • 高い堅牢性と高い並列性を兼ね備えている。 • アプリケーションあらゆるアプリケーションに対応できる。 ながら作業 一点集中 安定の品質
  17. 17. CRUD データベースの制御は基本的に以下の4つのみ • データの作成(Create) • 読み出し(Read) • 更新(Update) • 削除(Delete) これらの頭文字をとって、CRUDという 【参考】 https://ja.wikipedia.org/wiki/CRUD
  18. 18. 基本的なSQL 表追加: CREATE TABLE 表名 表削除: DROP TABLE 表名 表名変更: ALTER TABLE 表名 rename to 新表名
  19. 19. 基本的なSQL 行追加: INSERT INTO 表名 VALUES (値1, 値2) 行削除: DELETE FROM 表名 列追加: ALTER TABLE 表名 ADD (列名 属性) 列削除: ALTER TABLE 表名 DROP(列名) 列定義変更: ALTER TABLE 表名 MODIFY (列名 属性)
  20. 20. 基本的なSQL 読み込み(表示): SELECT * FROM 表名 修正: UPDATE 表名 SET 列名2=値2, 列名3=値 3 絞り込み: SELECT * FROM 表名 WHERE 条件式 ソート: SELECT * FROM 表名 ORDER BY 列名 ASC(昇順) or DESC(降順) 件数取得: SELECT COUNT(*) FROM 表名 グルーピング: SELECT COUNT(*) FROM 表名 GROUP BY 列名; 他
  21. 21. データベースのデータをプログラムで使う プログラム データベース 読み込み 使いづらい… しかし
  22. 22. ORM • ORM:オブジェクト関係マッピング(Object-relational mapping) • データベースとオブジェクト指向プログラミング言語の間の非互換なデータを変換するプロ グラミング技法である。オブジェクト関連マッピングとも呼ぶ。(Wikipedia) データベースのデータをプログラムしやすい形にして使う技法やライブラリ 要するに オブジェクト指向 ORM 【参考】 • https://ja.wikipedia.org/wiki/%E3%82%AA%E3%83%96%E3%82%B8 %E3%82%A7%E3%82%AF%E3%83%88%E9%96%A2%E4%BF%82%E 3%83%9E%E3%83%83%E3%83%94%E3%83%B3%E3%82%B0 • https://ja.wikipedia.org/wiki/%E3%82%AA%E3%83%96%E3%82%B8 %E3%82%A7%E3%82%AF%E3%83%88%E6%8C%87%E5%90%91
  23. 23. ビッグデータを扱う時の例 【参考例】モンストユーザー数 4000万行 でも、125804行目のデータが欲しい • テーブルを開いたら重すぎて固まる • そもそも、こんなデータ、メモリに乗らない…
  24. 24. インデックス(索引) • データを新しく作成した時、指定したカラム(列)データに紐づくインデックス(索引)情報が追加で作 られる。 • この索引情報をもとにデータを検索することで高速でデータを取得することができる。 挿入されるのと同時に作成
  25. 25. インデックス(索引)を指定する時の注意 • 検索する必要がないカラム(列)にはインデックスを 指定しない。 • 効果が薄いものにインデックス(索引)をつけない。 インデックスを使っての検索を図示(B-Tree方式) 作成するインデックス(索引)情報が増えればその 分処理も重くなりデータ量も増える 効果を指標をカーディナリティという
  26. 26. 主キー(PRIMARY KEY) 組(レコード)の識別子として利用するのにもっとも好ましいものとして、関係(テーブル)毎に ただ一つ設計者により選択・定義された候補キーをいう。つまり、関係に格納されたレコード を一意に識別するための属性(列、アトリビュート)またはその集合のうち、そのために通常 利用されるべき特定の一つをいう。(Wikipedia) 行番号をただ一つに特定するのに最も適している列 に指定する属性 Primary Key
  27. 27. トランザクション 購入 • G減少 • 所持数増加 トランザクション: 分けることのできない一連の情報処理の単位
  28. 28. トランザクション 購入 • G減少 • 所持数増加 金返せ!! 正常に完了 エラー
  29. 29. トランザクション 購入 • G減少 • 所持数増加 セット すべて反映 commit すべてもとに戻す rollback
  30. 30. 排他制御(ロック) • コンピュータ・プログラムの実行において、複数のプロセスが利用出来る共有資源に対し、 複数のプロセスからの同時アクセスにより競合が発生する場合に、あるプロセスに資源を 独占的に利用させている間は、他のプロセスが利用できないようにする事で整合性を保 つ処理の事をいう。(Wikipedia) • 複数人が同時に同じデータ(ファイル)をいじっている時の制御 • 誰かがそのデータをいじっていたらいじらせないようにしたりする 要するに
  31. 31. 排他制御(ロック) https://www.slideshare.net/kuromoyo/20140717-37115076
  32. 32. 楽観ロック 共通のデータを複数人が修正しようとした場合。 • 同時に複数の利用者がデータの読み取りが可能 • 最初の更新者のみが更新に成功。それ以降の更 新者はすべて更新に失敗する https://wagby.com/manual7/model-lockoperation.html https://www.slideshare.net/takukobayashi560/my-sqltake2-2 基本的にデータベースにアクセスするプログラ ムの方でこのような処理になるように制御する
  33. 33. 悲観ロック 共通のデータを複数人が修正しようとした場合。 • その共通データを利用できるのはただ一人に限 定される • 他の利用者は現在修正中の人が更新完了される までデータを利用することができない https://wagby.com/manual7/model-lockoperation.html https://www.slideshare.net/takukobayashi560/my-sqltake2-2 MySQLの場合、SQLで書くと Select * FROM 表名 FOR UPDATE;
  34. 34. ロックかけ忘れ事件 http://blogos.com/article/36121/ Gree ドリランド 事件
  35. 35. デバックのやりかた • インデックス • データを5万件ほど入れてみた環境でプレイして、遅くなったりしないか • トランザクションや排他制御 • プログラム上で行う場合 • トランザクションの最中にわざとエラーを起こす • 処理を遅延させる • 実際に触って見つける場合 • ボタンを連打する • 高速で画面を遷移させる ただし、お手柔らかにお願いします!!

×