Slide 1

Slide 1 text

基礎からちょっとだけ触れる データベース入門 Yuki Watanabe (@ukwhatn) from KINDAI Info-Tech HUB

Slide 2

Slide 2 text

SPEAKER ● 渡邉 雄貴 / Yuki Watanabe ○ 近畿大学 理工学部 B3 ■ KINDAI Info-Tech HUB 役員 ■ KC3運営委員会(NPO法人NxTEND) 理事 ○ Webバックエンド・インフラエンジニア ■ 長期インターンシップ・業務委託での開発 ■ 転職型プログラミングスクール メンター

Slide 3

Slide 3 text

SPEAKER ● 渡邉 雄貴 / Yuki Watanabe ○ SKILLS ■ Webバックエンド ● Ruby(Rails) / Python(FastAPI, Flask) / Kotlin / TS ■ Webフロントエンド ● TS(React) / JS / HTML-CSS ■ インフラ・その他 ● Linux / AWS / Docker / DB / 認証・認可

Slide 4

Slide 4 text

データベースとは?

Slide 5

Slide 5 text

データベースとの関わり ● 「データベース」 ○ イメージはできますか? ■ 分かる人は、たぶん使ったことある人 ○ システムの裏側で動くもの ■ ユーザには見えない ■ 見えないので、意識することがない データベースとは?

Slide 6

Slide 6 text

データベースとの関わり ● 「データベース」 ○ 需要の高まり ■ “ビッグデータ” ● 大量のデータを効率的に保存し、利用しなければならない データベースとは?

Slide 7

Slide 7 text

データベースの基本機能 ● 基本機能 ○ データの更新 ■ データの登録・修正・削除を行うことができる ○ データの検索・抽出 ■ 大量のデータの中から条件に合致するものを取り出す ○ 同時実行の制御(排他制御) ■ 不特定多数からの更新に対して整合性を維持する データベースとは?

Slide 8

Slide 8 text

データベースの基本機能 ● 基本機能 ○ 耐障害性 ■ データの冗長化 ■ バックアップ ○ セキュリティ・アクセス制御 ■ 有効な権限を持つユーザが、必要な情報のみにアクセス データベースとは?

Slide 9

Slide 9 text

データベースの種類 ● 5つの分類 ○ 階層型データベース ■ データをツリーで管理 ● 樹形図みたいな感じ データベースとは?

Slide 10

Slide 10 text

データベースの種類 ● 5つの分類 ○ リレーショナルデータベース(関係型DB) ■ 二次元テーブル形式でデータを保存 ○ オブジェクト指向データベース ■ あんまない ○ NoSQLデータベース ■ データの整合性を犠牲にし、分散処理と高い拡張性 データベースとは?

Slide 11

Slide 11 text

リレーショナルデータベース ● RDBMS ○ コンセプト ■ データを二次元表を使って管理する ● アプリケーションが使いやすいExcel ○ 操作 ■ SQLによって行う ● データを扱うことへのハードルが一気に下がった データベースとは?

Slide 12

Slide 12 text

SQL (Structured Query Language) ● SQL ○ データ操作のための言語 ■ すべてのRDBMSアプリケーションで使える (※) データベースを扱う言語 SELECT name, age FROM users WHERE age >= 20;

Slide 13

Slide 13 text

SQL (Structured Query Language) ● SQL ○ データ操作へのハードルを下げた ■ 英語に似ている = 扱いやすい ○ 基本操作コマンド ■ SELECT, INSERT, UPDATE, DELETE ○ データ管理のための概念 ■ テーブル, 行, 列, セル データベースを扱う言語

Slide 14

Slide 14 text

データベースの基本概念 ● ACID ○ Atomicity / 原子性 ■ データの更新は、全部成功するか、全部失敗するかの2択 ○ Consistency / 一貫性 ■ データの整合性を常に保証する ○ Isolation / 分離性 ■ 並列実行された場合と順次実行された場合で結果が同じ ○ Durability / 持続性 ■ データ操作が完了したら、その状態は永続する

Slide 15

Slide 15 text

データベースの基本概念 ● トランザクション ○ 複数のクエリをひとまとまりにして扱う ■ 原子性と一貫性を担保するための仕組み ● ロック ○ 更新対象の部分をロックし、上書きを防ぐ ■ トランザクションごとに発行される

Slide 16

Slide 16 text

データベースの基本概念 ● ロック ○ ロックタイムアウト ■ ロック待ち時間を超えた場合にロールバックされる ○ デッドロック ■ ユーザA:α→βで更新 ● αをロックして更新→βをロックしようとする ■ ユーザB:β→αで更新 ● βをロックして更新→αをロックしようとする

Slide 17

Slide 17 text

データベースの基本概念 ● やってはいけないトランザクション処理 ○ オートコミット ■ デフォルトでONになってるので注意! ○ ロングトランザクション ■ デッドロックが発生しやすくなる!

Slide 18

Slide 18 text

データベースの基本概念 ● 分離レベル ○ 分離性を担保するレベル ■ 非コミット読み取り ● 確定していないデータも読み取る ■ コミット済み読み取り ● 確定されたデータのみ読み取る ■ 再読み込み可能読み取り ● 読み取り対象のデータをロックする ■ 直列化可能 ● 順次実行したときと同じ結果が保証される

Slide 19

Slide 19 text

データベースの基本概念 ● 分離レベル ○ 分離性を損なう現象 ■ Dirty Read ● トランザクションがコミットされる前に読み込まれてしまう ■ Fuzzy Read / Non-Repeatable Read ● 2度同じデータを読み込んだとき、その間に他のプロセスに 更新され、得られるデータが変わること

Slide 20

Slide 20 text

データベースの基本概念 ● 分離レベル ○ 分離性を損なう現象 ■ Phantom Read ● 2度の読み出しの間に挿入や削除が行われ、 得られるデータの数が変わること

Slide 21

Slide 21 text

DBにかかわるアーキテクチャ ● セキュリティと利用の容易さの両立 ○ Web3層 データベースを構成するために

Slide 22

Slide 22 text

DBにかかわるアーキテクチャ ● サーバの冗長化 ○ 単一のストレージを2つのDBサーバで利用する ■ Active-Active構成 ■ Active-Standby構成 ● Cold Standby ● Hot Standby データベースを構成するために

Slide 23

Slide 23 text

DBにかかわるアーキテクチャ ● ストレージの冗長化 ○ レプリケーション ■ DB-ストレージのセットをいくつか用意し、 ActiveからStandbyにデータを同期する ■ ディザスタリカバリや負荷分散に利用される ● 遠隔地レプリケーション データベースを構成するために

Slide 24

Slide 24 text

DBのパフォーマンス ● インデックス ○ 特定の列の情報をB-treeで保存 ■ 検索を早く行うことができる ■ デメリット ● インデックス処理のオーバーヘッドによって更新が遅くなる ■ 鉄則 ● サイズが大きく、カーディナリティの高い列に作る データベースを構成するために

Slide 25

Slide 25 text

EOF 設計やハンズオンはまたの機会に!