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

Contenu connexe

Tendances

バッチ処理にバインド変数はもうやめません? ~|バッチ処理の突発遅延を題材にして考えてみる~
バッチ処理にバインド変数はもうやめません? ~|バッチ処理の突発遅延を題材にして考えてみる~バッチ処理にバインド変数はもうやめません? ~|バッチ処理の突発遅延を題材にして考えてみる~
バッチ処理にバインド変数はもうやめません? ~|バッチ処理の突発遅延を題材にして考えてみる~
Ryota Watabe
 

Tendances (20)

SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
 
今からでも遅くないDBマイグレーション - Flyway と SchemaSpy の紹介 -
今からでも遅くないDBマイグレーション - Flyway と SchemaSpy の紹介 -今からでも遅くないDBマイグレーション - Flyway と SchemaSpy の紹介 -
今からでも遅くないDBマイグレーション - Flyway と SchemaSpy の紹介 -
 
MySQLで論理削除と正しく付き合う方法
MySQLで論理削除と正しく付き合う方法MySQLで論理削除と正しく付き合う方法
MySQLで論理削除と正しく付き合う方法
 
ドメイン駆動設計の正しい歩き方
ドメイン駆動設計の正しい歩き方ドメイン駆動設計の正しい歩き方
ドメイン駆動設計の正しい歩き方
 
ドメイン駆動設計に15年取り組んでわかったこと
ドメイン駆動設計に15年取り組んでわかったことドメイン駆動設計に15年取り組んでわかったこと
ドメイン駆動設計に15年取り組んでわかったこと
 
ドメイン駆動設計 本格入門
ドメイン駆動設計 本格入門ドメイン駆動設計 本格入門
ドメイン駆動設計 本格入門
 
データベース01 - データベースとは
データベース01 - データベースとはデータベース01 - データベースとは
データベース01 - データベースとは
 
本当は恐ろしい分散システムの話
本当は恐ろしい分散システムの話本当は恐ろしい分散システムの話
本当は恐ろしい分散システムの話
 
Sql基礎の基礎
Sql基礎の基礎Sql基礎の基礎
Sql基礎の基礎
 
SQL大量発行処理をいかにして高速化するか
SQL大量発行処理をいかにして高速化するかSQL大量発行処理をいかにして高速化するか
SQL大量発行処理をいかにして高速化するか
 
ドメインオブジェクトの見つけ方・作り方・育て方
ドメインオブジェクトの見つけ方・作り方・育て方ドメインオブジェクトの見つけ方・作り方・育て方
ドメインオブジェクトの見つけ方・作り方・育て方
 
SKYDISCのIoTを支えるテクノロジー
SKYDISCのIoTを支えるテクノロジーSKYDISCのIoTを支えるテクノロジー
SKYDISCのIoTを支えるテクノロジー
 
バッチ処理にバインド変数はもうやめません? ~|バッチ処理の突発遅延を題材にして考えてみる~
バッチ処理にバインド変数はもうやめません? ~|バッチ処理の突発遅延を題材にして考えてみる~バッチ処理にバインド変数はもうやめません? ~|バッチ処理の突発遅延を題材にして考えてみる~
バッチ処理にバインド変数はもうやめません? ~|バッチ処理の突発遅延を題材にして考えてみる~
 
Ruby on Rails の特徴とそのエコシステム
Ruby on Rails の特徴とそのエコシステムRuby on Rails の特徴とそのエコシステム
Ruby on Rails の特徴とそのエコシステム
 
レプリケーション遅延の監視について(第40回PostgreSQLアンカンファレンス@オンライン 発表資料)
レプリケーション遅延の監視について(第40回PostgreSQLアンカンファレンス@オンライン 発表資料)レプリケーション遅延の監視について(第40回PostgreSQLアンカンファレンス@オンライン 発表資料)
レプリケーション遅延の監視について(第40回PostgreSQLアンカンファレンス@オンライン 発表資料)
 
ゲームエンジニアのためのデータベース設計
ゲームエンジニアのためのデータベース設計ゲームエンジニアのためのデータベース設計
ゲームエンジニアのためのデータベース設計
 
ドメイン駆動設計のためのオブジェクト指向入門
ドメイン駆動設計のためのオブジェクト指向入門ドメイン駆動設計のためのオブジェクト指向入門
ドメイン駆動設計のためのオブジェクト指向入門
 
PostgreSQL 15 開発最新情報
PostgreSQL 15 開発最新情報PostgreSQL 15 開発最新情報
PostgreSQL 15 開発最新情報
 
大規模ソーシャルゲーム開発から学んだPHP&MySQL実践テクニック
大規模ソーシャルゲーム開発から学んだPHP&MySQL実践テクニック大規模ソーシャルゲーム開発から学んだPHP&MySQL実践テクニック
大規模ソーシャルゲーム開発から学んだPHP&MySQL実践テクニック
 
Google Cloud でアプリケーションを動かす.pdf
Google Cloud でアプリケーションを動かす.pdfGoogle Cloud でアプリケーションを動かす.pdf
Google Cloud でアプリケーションを動かす.pdf
 

En vedette

En vedette (8)

名古屋アジャイル勉強会「春のアジャイル入門」
名古屋アジャイル勉強会「春のアジャイル入門」名古屋アジャイル勉強会「春のアジャイル入門」
名古屋アジャイル勉強会「春のアジャイル入門」
 
テストを書こう!!
テストを書こう!!テストを書こう!!
テストを書こう!!
 
データベース入門1
データベース入門1データベース入門1
データベース入門1
 
データベース入門2
データベース入門2データベース入門2
データベース入門2
 
データベース入門3
データベース入門3データベース入門3
データベース入門3
 
SQL Server 入門
SQL Server 入門SQL Server 入門
SQL Server 入門
 
Phpcon2015
Phpcon2015Phpcon2015
Phpcon2015
 
サルでもわかるディープラーニング入門 (2017年) (In Japanese)
サルでもわかるディープラーニング入門 (2017年) (In Japanese)サルでもわかるディープラーニング入門 (2017年) (In Japanese)
サルでもわかるディープラーニング入門 (2017年) (In Japanese)
 

Similaire à データベース入門

第57回日本人類遺伝学会大会 教育講演「バイオインフォマティクス:データベース統合化によるアプローチ」
第57回日本人類遺伝学会大会 教育講演「バイオインフォマティクス:データベース統合化によるアプローチ」第57回日本人類遺伝学会大会 教育講演「バイオインフォマティクス:データベース統合化によるアプローチ」
第57回日本人類遺伝学会大会 教育講演「バイオインフォマティクス:データベース統合化によるアプローチ」
Hidemasa Bono
 
オープンデータと「つながる社会」@オープンデータ京都勉強会(2013.04.20)
オープンデータと「つながる社会」@オープンデータ京都勉強会(2013.04.20)オープンデータと「つながる社会」@オープンデータ京都勉強会(2013.04.20)
オープンデータと「つながる社会」@オープンデータ京都勉強会(2013.04.20)
Ikki Ohmukai
 
20140418 info talkセミナー資料
20140418 info talkセミナー資料20140418 info talkセミナー資料
20140418 info talkセミナー資料
Takahiro Iwase
 
Webアプリケーション入門(3)
Webアプリケーション入門(3) Webアプリケーション入門(3)
Webアプリケーション入門(3)
Takashi Asanuma
 
SciVerse ScienceDirect training 201103
SciVerse ScienceDirect training 201103SciVerse ScienceDirect training 201103
SciVerse ScienceDirect training 201103
tsuneyoshi
 

Similaire à データベース入門 (20)

実はとても面白い...Documentation library
実はとても面白い...Documentation library実はとても面白い...Documentation library
実はとても面白い...Documentation library
 
SQLアンチパターン メンター用資料
SQLアンチパターン メンター用資料SQLアンチパターン メンター用資料
SQLアンチパターン メンター用資料
 
Sql勉強会用_1
Sql勉強会用_1Sql勉強会用_1
Sql勉強会用_1
 
セマンテックウェブとRDFDB
セマンテックウェブとRDFDBセマンテックウェブとRDFDB
セマンテックウェブとRDFDB
 
第57回日本人類遺伝学会大会 教育講演「バイオインフォマティクス:データベース統合化によるアプローチ」
第57回日本人類遺伝学会大会 教育講演「バイオインフォマティクス:データベース統合化によるアプローチ」第57回日本人類遺伝学会大会 教育講演「バイオインフォマティクス:データベース統合化によるアプローチ」
第57回日本人類遺伝学会大会 教育講演「バイオインフォマティクス:データベース統合化によるアプローチ」
 
オープンデータと「つながる社会」@オープンデータ京都勉強会(2013.04.20)
オープンデータと「つながる社会」@オープンデータ京都勉強会(2013.04.20)オープンデータと「つながる社会」@オープンデータ京都勉強会(2013.04.20)
オープンデータと「つながる社会」@オープンデータ京都勉強会(2013.04.20)
 
ArithmerDB Introduction
ArithmerDB IntroductionArithmerDB Introduction
ArithmerDB Introduction
 
20140418 info talkセミナー資料
20140418 info talkセミナー資料20140418 info talkセミナー資料
20140418 info talkセミナー資料
 
実務で役立つデータベースの活用法
実務で役立つデータベースの活用法実務で役立つデータベースの活用法
実務で役立つデータベースの活用法
 
Webアプリケーション入門(3)
Webアプリケーション入門(3) Webアプリケーション入門(3)
Webアプリケーション入門(3)
 
202005 log analyse
202005 log analyse202005 log analyse
202005 log analyse
 
RDBってなに?
RDBってなに?RDBってなに?
RDBってなに?
 
GCPUG in Osaka #6 5分でCloud Dataprepを説明する
GCPUG in Osaka #6 5分でCloud Dataprepを説明するGCPUG in Osaka #6 5分でCloud Dataprepを説明する
GCPUG in Osaka #6 5分でCloud Dataprepを説明する
 
SciVerse ScienceDirect training 201103
SciVerse ScienceDirect training 201103SciVerse ScienceDirect training 201103
SciVerse ScienceDirect training 201103
 
Glueの開発環境(zeppelin)をrancherで作ってみる
Glueの開発環境(zeppelin)をrancherで作ってみるGlueの開発環境(zeppelin)をrancherで作ってみる
Glueの開発環境(zeppelin)をrancherで作ってみる
 
SPARQLアプリケーション開発
SPARQLアプリケーション開発SPARQLアプリケーション開発
SPARQLアプリケーション開発
 
Rとデータベース 第61回 Tokyo.R
Rとデータベース 第61回 Tokyo.RRとデータベース 第61回 Tokyo.R
Rとデータベース 第61回 Tokyo.R
 
異分野融合型の科学データ公開サイトLink data.org
異分野融合型の科学データ公開サイトLink data.org異分野融合型の科学データ公開サイトLink data.org
異分野融合型の科学データ公開サイトLink data.org
 
第4回 データベース
第4回 データベース第4回 データベース
第4回 データベース
 
おとなのテキストマイニング
おとなのテキストマイニングおとなのテキストマイニング
おとなのテキストマイニング
 

Plus de 拓 小林

Ue4でandroidビルド ...できなかった...
Ue4でandroidビルド ...できなかった...Ue4でandroidビルド ...できなかった...
Ue4でandroidビルド ...できなかった...
拓 小林
 
My sqlで遭遇したトランザクションとロックのお話take2 2
My sqlで遭遇したトランザクションとロックのお話take2 2My sqlで遭遇したトランザクションとロックのお話take2 2
My sqlで遭遇したトランザクションとロックのお話take2 2
拓 小林
 
ゆとりエンジニア交流会_20130706
ゆとりエンジニア交流会_20130706ゆとりエンジニア交流会_20130706
ゆとりエンジニア交流会_20130706
拓 小林
 

Plus de 拓 小林 (12)

通信
通信通信
通信
 
Unityでar
UnityでarUnityでar
Unityでar
 
声貯
声貯声貯
声貯
 
3d入門
3d入門3d入門
3d入門
 
Ue4でandroidビルド ...できなかった...
Ue4でandroidビルド ...できなかった...Ue4でandroidビルド ...できなかった...
Ue4でandroidビルド ...できなかった...
 
諸注意とご連絡
諸注意とご連絡諸注意とご連絡
諸注意とご連絡
 
UE4よちよち勉強会オリエンテーション資料
UE4よちよち勉強会オリエンテーション資料UE4よちよち勉強会オリエンテーション資料
UE4よちよち勉強会オリエンテーション資料
 
バーチャルジャイアンツプレゼン
バーチャルジャイアンツプレゼンバーチャルジャイアンツプレゼン
バーチャルジャイアンツプレゼン
 
Care farm
Care farmCare farm
Care farm
 
My sqlで遭遇したトランザクションとロックのお話take2 2
My sqlで遭遇したトランザクションとロックのお話take2 2My sqlで遭遇したトランザクションとロックのお話take2 2
My sqlで遭遇したトランザクションとロックのお話take2 2
 
My sqlで遭遇したトランザクションとロックのお話
My sqlで遭遇したトランザクションとロックのお話My sqlで遭遇したトランザクションとロックのお話
My sqlで遭遇したトランザクションとロックのお話
 
ゆとりエンジニア交流会_20130706
ゆとりエンジニア交流会_20130706ゆとりエンジニア交流会_20130706
ゆとりエンジニア交流会_20130706
 

データベース入門