Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
データベース入門(数珠つなぎオンライン勉強会 #03)
Search
Yuki Watanabe
June 11, 2023
Programming
1
260
データベース入門(数珠つなぎオンライン勉強会 #03)
Yuki Watanabe
June 11, 2023
Tweet
Share
More Decks by Yuki Watanabe
See All by Yuki Watanabe
【つよナレ#1】初心者こそバニラなPHPでWebアプリを作るべき
ukwhatn
0
270
15分間でふんわり理解するDocker @ Matsuriba MAX
ukwhatn
1
550
10分間でエンジニア就活について話す #ニックトレイン
ukwhatn
3
1.3k
[KC3 Meet! vol.1]ちょっとだけわかるPasskey
ukwhatn
1
410
基礎からわかろうOAuth2/OpenID Connect
ukwhatn
0
430
バックエンドロードマップ(数珠つなぎオンライン勉強会 #02)
ukwhatn
0
540
サーバ入門(概論〜Webサーバ構築)
ukwhatn
0
340
Other Decks in Programming
See All in Programming
HTMLの品質ってなんだっけ? “HTMLクライテリア”の設計と実践
unachang113
4
2.7k
Zendeskのチケットを Amazon Bedrockで 解析した
ryokosuge
3
290
プロポーザル駆動学習 / Proposal-Driven Learning
mackey0225
2
1.2k
GitHubとGitLabとAWS CodePipelineでCI/CDを組み比べてみた
satoshi256kbyte
4
210
時間軸から考えるTerraformを使う理由と留意点
fufuhu
15
4.6k
ユーザーも開発者も悩ませない TV アプリ開発 ~Compose の内部実装から学ぶフォーカス制御~
taked137
0
140
さようなら Date。 ようこそTemporal! 3年間先行利用して得られた知見の共有
8beeeaaat
3
1.4k
Performance for Conversion! 分散トレーシングでボトルネックを 特定せよ
inetand
0
130
ソフトウェアテスト徹底指南書の紹介
goyoki
1
150
250830 IaCの選定~AWS SAMのLambdaをECSに乗り換えたときの備忘録~
east_takumi
0
390
意外と簡単!?フロントエンドでパスキー認証を実現する WebAuthn
teamlab
PRO
2
720
Deep Dive into Kotlin Flow
jmatsu
1
310
Featured
See All Featured
How to Think Like a Performance Engineer
csswizardry
26
1.9k
Imperfection Machines: The Place of Print at Facebook
scottboms
268
13k
RailsConf 2023
tenderlove
30
1.2k
Learning to Love Humans: Emotional Interface Design
aarron
273
40k
GraphQLとの向き合い方2022年版
quramy
49
14k
Rebuilding a faster, lazier Slack
samanthasiow
83
9.2k
Typedesign – Prime Four
hannesfritz
42
2.8k
Gamification - CAS2011
davidbonilla
81
5.4k
Scaling GitHub
holman
463
140k
Testing 201, or: Great Expectations
jmmastey
45
7.6k
KATA
mclloyd
32
14k
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
12
1.1k
Transcript
基礎からちょっとだけ触れる データベース入門 Yuki Watanabe (@ukwhatn) from KINDAI Info-Tech HUB
SPEAKER • 渡邉 雄貴 / Yuki Watanabe ◦ 近畿大学 理工学部
B3 ▪ KINDAI Info-Tech HUB 役員 ▪ KC3運営委員会(NPO法人NxTEND) 理事 ◦ Webバックエンド・インフラエンジニア ▪ 長期インターンシップ・業務委託での開発 ▪ 転職型プログラミングスクール メンター
SPEAKER • 渡邉 雄貴 / Yuki Watanabe ◦ SKILLS ▪
Webバックエンド • Ruby(Rails) / Python(FastAPI, Flask) / Kotlin / TS ▪ Webフロントエンド • TS(React) / JS / HTML-CSS ▪ インフラ・その他 • Linux / AWS / Docker / DB / 認証・認可
データベースとは?
データベースとの関わり • 「データベース」 ◦ イメージはできますか? ▪ 分かる人は、たぶん使ったことある人 ◦ システムの裏側で動くもの ▪
ユーザには見えない ▪ 見えないので、意識することがない データベースとは?
データベースとの関わり • 「データベース」 ◦ 需要の高まり ▪ “ビッグデータ” • 大量のデータを効率的に保存し、利用しなければならない データベースとは?
データベースの基本機能 • 基本機能 ◦ データの更新 ▪ データの登録・修正・削除を行うことができる ◦ データの検索・抽出 ▪
大量のデータの中から条件に合致するものを取り出す ◦ 同時実行の制御(排他制御) ▪ 不特定多数からの更新に対して整合性を維持する データベースとは?
データベースの基本機能 • 基本機能 ◦ 耐障害性 ▪ データの冗長化 ▪ バックアップ ◦
セキュリティ・アクセス制御 ▪ 有効な権限を持つユーザが、必要な情報のみにアクセス データベースとは?
データベースの種類 • 5つの分類 ◦ 階層型データベース ▪ データをツリーで管理 • 樹形図みたいな感じ データベースとは?
データベースの種類 • 5つの分類 ◦ リレーショナルデータベース(関係型DB) ▪ 二次元テーブル形式でデータを保存 ◦ オブジェクト指向データベース ▪
あんまない ◦ NoSQLデータベース ▪ データの整合性を犠牲にし、分散処理と高い拡張性 データベースとは?
リレーショナルデータベース • RDBMS ◦ コンセプト ▪ データを二次元表を使って管理する • アプリケーションが使いやすいExcel ◦
操作 ▪ SQLによって行う • データを扱うことへのハードルが一気に下がった データベースとは?
SQL (Structured Query Language) • SQL ◦ データ操作のための言語 ▪ すべてのRDBMSアプリケーションで使える
(※) データベースを扱う言語 SELECT name, age FROM users WHERE age >= 20;
SQL (Structured Query Language) • SQL ◦ データ操作へのハードルを下げた ▪ 英語に似ている
= 扱いやすい ◦ 基本操作コマンド ▪ SELECT, INSERT, UPDATE, DELETE ◦ データ管理のための概念 ▪ テーブル, 行, 列, セル データベースを扱う言語
データベースの基本概念 • ACID ◦ Atomicity / 原子性 ▪ データの更新は、全部成功するか、全部失敗するかの2択 ◦
Consistency / 一貫性 ▪ データの整合性を常に保証する ◦ Isolation / 分離性 ▪ 並列実行された場合と順次実行された場合で結果が同じ ◦ Durability / 持続性 ▪ データ操作が完了したら、その状態は永続する
データベースの基本概念 • トランザクション ◦ 複数のクエリをひとまとまりにして扱う ▪ 原子性と一貫性を担保するための仕組み • ロック ◦
更新対象の部分をロックし、上書きを防ぐ ▪ トランザクションごとに発行される
データベースの基本概念 • ロック ◦ ロックタイムアウト ▪ ロック待ち時間を超えた場合にロールバックされる ◦ デッドロック ▪
ユーザA:α→βで更新 • αをロックして更新→βをロックしようとする ▪ ユーザB:β→αで更新 • βをロックして更新→αをロックしようとする
データベースの基本概念 • やってはいけないトランザクション処理 ◦ オートコミット ▪ デフォルトでONになってるので注意! ◦ ロングトランザクション ▪
デッドロックが発生しやすくなる!
データベースの基本概念 • 分離レベル ◦ 分離性を担保するレベル ▪ 非コミット読み取り • 確定していないデータも読み取る ▪
コミット済み読み取り • 確定されたデータのみ読み取る ▪ 再読み込み可能読み取り • 読み取り対象のデータをロックする ▪ 直列化可能 • 順次実行したときと同じ結果が保証される
データベースの基本概念 • 分離レベル ◦ 分離性を損なう現象 ▪ Dirty Read • トランザクションがコミットされる前に読み込まれてしまう
▪ Fuzzy Read / Non-Repeatable Read • 2度同じデータを読み込んだとき、その間に他のプロセスに 更新され、得られるデータが変わること
データベースの基本概念 • 分離レベル ◦ 分離性を損なう現象 ▪ Phantom Read • 2度の読み出しの間に挿入や削除が行われ、
得られるデータの数が変わること
DBにかかわるアーキテクチャ • セキュリティと利用の容易さの両立 ◦ Web3層 データベースを構成するために
DBにかかわるアーキテクチャ • サーバの冗長化 ◦ 単一のストレージを2つのDBサーバで利用する ▪ Active-Active構成 ▪ Active-Standby構成 •
Cold Standby • Hot Standby データベースを構成するために
DBにかかわるアーキテクチャ • ストレージの冗長化 ◦ レプリケーション ▪ DB-ストレージのセットをいくつか用意し、 ActiveからStandbyにデータを同期する ▪ ディザスタリカバリや負荷分散に利用される
• 遠隔地レプリケーション データベースを構成するために
DBのパフォーマンス • インデックス ◦ 特定の列の情報をB-treeで保存 ▪ 検索を早く行うことができる ▪ デメリット •
インデックス処理のオーバーヘッドによって更新が遅くなる ▪ 鉄則 • サイズが大きく、カーディナリティの高い列に作る データベースを構成するために
EOF 設計やハンズオンはまたの機会に!