2015q4_innercourse_presentation

21
Relational Database 2015,10 aecho@aeersi.com

Upload: hung-wei-liu

Post on 29-Jan-2018

93 views

Category:

Technology


0 download

TRANSCRIPT

Page 1: 2015q4_InnerCourse_Presentation

Relational Database2015,10 [email protected]

Page 2: 2015q4_InnerCourse_Presentation

OutletIntroduction

Index

cluster index

non-cluster index

Concurrency Control

optimistic locking

Page 3: 2015q4_InnerCourse_Presentation

Introduction

Page 4: 2015q4_InnerCourse_Presentation

IntroductionDatabase I/O

page, 4KB, 8KB, or 16KB

db I/O Unit

Read / Write, Disk <—> Memory

I/O >>>> CPU

Page 5: 2015q4_InnerCourse_Presentation

Index

Page 6: 2015q4_InnerCourse_Presentation

Index

Index File

Data file

Index entries

Direct search fordata entries

Data entries

DataRecords

Page 7: 2015q4_InnerCourse_Presentation

IndexIndex entries

B+ tree, non-leaf node, search key

Data entries

B+ tree, leaf node

Data records

record id (rid)

Page 8: 2015q4_InnerCourse_Presentation

IndexFan-out

non-leaf node, # of children (denoted as F)

Search, (logFN + 1) I/O -> page data

In practice, F is at least 100

log100106 = 3,

3, or 4 I/O <=> 106 records

Page 9: 2015q4_InnerCourse_Presentation

IndexData entries

K*: Search key, and other fields.

Clustered index

<K, rid>: Search key, and record id

<K, rid-list>: Search key, and record id list.

Page 10: 2015q4_InnerCourse_Presentation

IndexCluster index vs non-cluster index

Clustered index ( Primary key)

K*

Non-clustered index

<K, rid>

<K, rid-list>

Page 11: 2015q4_InnerCourse_Presentation

Clustered IndexIndex entries

Direct search fordata entries

Data entries

DataRecords

Page 12: 2015q4_InnerCourse_Presentation

Non-clustered IndexIndex entries

Direct search fordata entries

Data entries

DataRecords

Page 13: 2015q4_InnerCourse_Presentation

Index Data TypeInt, Long, Guid

Sequential vs non-sequential

Int, Long => Sequential

Guid => ?

Page 14: 2015q4_InnerCourse_Presentation

Composite index

Direct search fordata entries

Data entries

idx_1

idx_2

Page 15: 2015q4_InnerCourse_Presentation

Composite IndexIncrease the tree-depth

Search key

〇 idx_1 only

〇 <idx_1, idx_2>

✕ idx_2 only

The order of indexes

Page 16: 2015q4_InnerCourse_Presentation

Concurrency Control

Page 17: 2015q4_InnerCourse_Presentation

Optimistic lockingOptimistic vs Pessimistic

Optimistic Pessimistic

Conflict Conflict detect Conflict avoid

效率 快 慢

實作 很容易 較麻煩

Lock 無 有

考慮因素 1. 不常衝突 2. 衝突代價低

1. 常常衝突 2. 衝突代價⾼

Page 18: 2015q4_InnerCourse_Presentation

Optimistic locking參考資料, Java Hibernate實作

概念

有個欄位為rowVersion

int vs timestamp

每次db update時,由db檢查該值,並且負責更新這個欄位

判斷db update時, rowVersion是否被別⼈修改了。

Page 19: 2015q4_InnerCourse_Presentation

Optimistic lockingUpdating

rowVersion == original rowVersion ?

If no, reject it.

rowVersion += 1

Page 20: 2015q4_InnerCourse_Presentation

Pessimistic lockingBuilding lock manager

Types:

exclusive write lock

exclusive read lock

read/write lock

Lock Table

Dead lock

Timeout, for a victim

Page 21: 2015q4_InnerCourse_Presentation

參考資料Clustered vs non-clustered index

Microsoft, Clustered and Nonclustered Indexes Described

Wiki, database index