Upgrade to PRO for Only $50/Year—Limited-Time Offer! 🔥
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
データベース入門(数珠つなぎオンライン勉強会 #03)
Search
Yuki Watanabe
June 11, 2023
Programming
1
270
データベース入門(数珠つなぎオンライン勉強会 #03)
Yuki Watanabe
June 11, 2023
Tweet
Share
More Decks by Yuki Watanabe
See All by Yuki Watanabe
【つよナレ#1】初心者こそバニラなPHPでWebアプリを作るべき
ukwhatn
0
340
15分間でふんわり理解するDocker @ Matsuriba MAX
ukwhatn
1
570
10分間でエンジニア就活について話す #ニックトレイン
ukwhatn
3
1.3k
[KC3 Meet! vol.1]ちょっとだけわかるPasskey
ukwhatn
1
430
基礎からわかろうOAuth2/OpenID Connect
ukwhatn
0
460
バックエンドロードマップ(数珠つなぎオンライン勉強会 #02)
ukwhatn
0
580
サーバ入門(概論〜Webサーバ構築)
ukwhatn
0
370
Other Decks in Programming
See All in Programming
Socio-Technical Evolution: Growing an Architecture and Its Organization for Fast Flow
cer
PRO
0
340
tparseでgo testの出力を見やすくする
utgwkk
2
230
React Native New Architecture 移行実践報告
taminif
1
160
WebRTC、 綺麗に見るか滑らかに見るか
sublimer
1
190
JETLS.jl ─ A New Language Server for Julia
abap34
1
410
AWS CDKの推しポイントN選
akihisaikeda
1
240
堅牢なフロントエンドテスト基盤を構築するために行った取り組み
shogo4131
8
2.4k
Why Kotlin? 電子カルテを Kotlin で開発する理由 / Why Kotlin? at Henry
agatan
2
7.3k
開発に寄りそう自動テストの実現
goyoki
2
1k
Tinkerbellから学ぶ、Podで DHCPをリッスンする手法
tomokon
0
130
20 years of Symfony, what's next?
fabpot
2
360
Integrating WordPress and Symfony
alexandresalome
0
160
Featured
See All Featured
Leading Effective Engineering Teams in the AI Era
addyosmani
8
1.3k
Java REST API Framework Comparison - PWX 2021
mraible
34
9k
Agile that works and the tools we love
rasmusluckow
331
21k
A better future with KSS
kneath
240
18k
What’s in a name? Adding method to the madness
productmarketing
PRO
24
3.8k
Typedesign – Prime Four
hannesfritz
42
2.9k
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
35
2.3k
No one is an island. Learnings from fostering a developers community.
thoeni
21
3.6k
Why Our Code Smells
bkeepers
PRO
340
57k
The Invisible Side of Design
smashingmag
302
51k
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
286
14k
GraphQLとの向き合い方2022年版
quramy
50
14k
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 設計やハンズオンはまたの機会に!