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
310
1
Share
データベース入門(数珠つなぎオンライン勉強会 #03)
Yuki Watanabe
June 11, 2023
More Decks by Yuki Watanabe
See All by Yuki Watanabe
【つよナレ#1】初心者こそバニラなPHPでWebアプリを作るべき
ukwhatn
0
420
15分間でふんわり理解するDocker @ Matsuriba MAX
ukwhatn
1
590
10分間でエンジニア就活について話す #ニックトレイン
ukwhatn
3
1.4k
[KC3 Meet! vol.1]ちょっとだけわかるPasskey
ukwhatn
2
470
基礎からわかろうOAuth2/OpenID Connect
ukwhatn
0
520
バックエンドロードマップ(数珠つなぎオンライン勉強会 #02)
ukwhatn
0
640
サーバ入門(概論〜Webサーバ構築)
ukwhatn
0
500
Other Decks in Programming
See All in Programming
生成AI時代にこそ効くGo | Why Go Works in the Age of Generative AI
mom0tomo
8
3.1k
TypeScript+Orvalで実現する型安全かつ堅牢でスケーラブルなマルチチャネル通知基盤 / TSKaigi Night talks ~after conference~
d0riven
0
210
Inside Stream API
skrb
1
620
The NotImplementedError Problem in Ruby
koic
1
420
密結合なバックエンドから TypeScript のコードを生成する
kemuridama
1
690
並列実装の現場、2ヶ月間実務でAIを使い倒したAIもPCも私も限界が近い
ming_ayami
0
100
技術記事、AIに書かせるか、自分で書くか? 〜それでも私が自分の手で書く理由〜 / #QiitaConference
jnchito
2
1.3k
代数的データ型って何が嬉しいの? #frontend_phpcon_do
kajitack
8
3.1k
運用エージェントは "作る" から "育てる" へ - 記憶と自己進化の3層設計パターン / self-evolving-agents-three-layer-agent-design
gawa
12
3.4k
DynamoDBには集計系のクエリがないけどなんとかしたい
musan
1
130
LLM本来の能力を解き放つサンドボックス技術とAI民主化への適用
yukukotani
3
2.4k
AIとRubyの静的型付け
ukin0k0
0
530
Featured
See All Featured
Code Reviewing Like a Champion
maltzj
528
40k
How to Get Subject Matter Experts Bought In and Actively Contributing to SEO & PR Initiatives.
livdayseo
0
130
Digital Projects Gone Horribly Wrong (And the UX Pros Who Still Save the Day) - Dean Schuster
uxyall
0
1.6k
How to Build an AI Search Optimization Roadmap - Criteria and Steps to Take #SEOIRL
aleyda
1
2.1k
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
508
140k
We Have a Design System, Now What?
morganepeng
55
8.2k
DBのスキルで生き残る技術 - AI時代におけるテーブル設計の勘所
soudai
PRO
65
55k
Conquering PDFs: document understanding beyond plain text
inesmontani
PRO
4
2.8k
Java REST API Framework Comparison - PWX 2021
mraible
34
9.3k
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
162
16k
[SF Ruby Conf 2025] Rails X
palkan
2
1.1k
State of Search Keynote: SEO is Dead Long Live SEO
ryanjones
0
200
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 設計やハンズオンはまたの機会に!