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
220
データベース入門(数珠つなぎオンライン勉強会 #03)
Yuki Watanabe
June 11, 2023
Tweet
Share
More Decks by Yuki Watanabe
See All by Yuki Watanabe
【つよナレ#1】初心者こそバニラなPHPでWebアプリを作るべき
ukwhatn
0
190
15分間でふんわり理解するDocker @ Matsuriba MAX
ukwhatn
1
530
10分間でエンジニア就活について話す #ニックトレイン
ukwhatn
3
1.2k
[KC3 Meet! vol.1]ちょっとだけわかるPasskey
ukwhatn
1
380
基礎からわかろうOAuth2/OpenID Connect
ukwhatn
0
390
バックエンドロードマップ(数珠つなぎオンライン勉強会 #02)
ukwhatn
0
490
サーバ入門(概論〜Webサーバ構築)
ukwhatn
0
300
Other Decks in Programming
See All in Programming
エンジニアが挑む、限界までの越境
nealle
1
330
Flutterでllama.cppをつかってローカルLLMを試してみた
sakuraidayo
0
150
Golangci-lint v2爆誕: 君たちはどうすべきか
logica0419
1
270
個人開発の学生アプリが企業譲渡されるまで
akidon0000
2
1.2k
LRパーサーはいいぞ
ydah
7
1.4k
Cursor/Devin全社導入の理想と現実
saitoryc
29
22k
VitestのIn-Source Testingが便利
taro28
9
2.5k
The Missing Link in Angular’s Signal Story: Resource API and httpResource
manfredsteyer
PRO
0
150
Boast Code Party / RubyKaigi 2025 After Event
lemonade_37
0
110
Instrumentsを使用した アプリのパフォーマンス向上方法
hinakko
0
250
Optimizing JRuby 10
headius
0
610
Browser and UI #2 HTML/ARIA
ken7253
2
180
Featured
See All Featured
How To Stay Up To Date on Web Technology
chriscoyier
790
250k
Optimizing for Happiness
mojombo
378
70k
Building a Scalable Design System with Sketch
lauravandoore
462
33k
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
137
33k
How to train your dragon (web standard)
notwaldorf
91
6k
Reflections from 52 weeks, 52 projects
jeffersonlam
349
20k
Code Reviewing Like a Champion
maltzj
523
40k
Adopting Sorbet at Scale
ufuk
76
9.4k
Why You Should Never Use an ORM
jnunemaker
PRO
56
9.4k
Making the Leap to Tech Lead
cromwellryan
133
9.3k
Faster Mobile Websites
deanohume
307
31k
StorybookのUI Testing Handbookを読んだ
zakiyama
30
5.7k
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 設計やハンズオンはまたの機会に!