CMU 15-445/645 Database Systems (Fall 2017) :: Database ... · mmap page1 page2 page3 page4 page1...

Preview:

Citation preview

mmap

page1 page2 page3 page4

page1

page2

page3

page4

mmap

page1 page2 page3 page4

page1

page2

page3

page4

page1 page1

mmap

page1 page2 page3 page4

page1

page2

page3

page4

page1 page1

page3

page3

mmap

page1 page2 page3 page4

page1

page2

page3

page4

page1 page1

page3

page3

→ page_id offset/slot→

CTID (4-bytes)

ROWID (10-bytes)

ROWID (8-bytes)

→→

Header

Page

Data

Page

Data

Page

Data

Page

Data

Directory

Page

Data

Page

Data

Page

Data

→→→

Log File

…INSERT id=1,val=a

INSERT id=2,val=b

DELETE id=4

UPDATE val=X (id=3)

UPDATE val=Y (id=4)

INSERT id=3,val=c

Log File

INSERT id=1,val=a

INSERT id=2,val=b

DELETE id=4

UPDATE val=X (id=3)

UPDATE val=Y (id=4)

INSERT id=3,val=c

SELECT * FROM tableWHERE id = 1

Log File

INSERT id=1,val=a

INSERT id=2,val=b

DELETE id=4

UPDATE val=X (id=3)

UPDATE val=Y (id=4)

INSERT id=3,val=c

…id=1

id=2

id=3

id=4

SELECT * FROM tableWHERE id = 1

Log File

id=1,val=aid=2,val=bid=3,val=Xid=4,val=Y

Header

Tuple #1

Tuple #2

Tuple #3

Header

Tuple #1

Tuple #3

Header

Tuple #1

Tuple #3

Tuple #4

→→

Header

Tuple #1

Tuple #3

Tuple #4

→→

Header

Tuple #4

Tuple #2

Tuple #3

Tuple #1

→→

Header

Tuple #4

Tuple #2

Tuple #3

Tuple #1

→→

Header Attribute Data

Header a b c d e

CREATE TABLE foo (a INT PRIMARY KEY,b INT NOT NULL,c INT,d DOUBLE,e FLOAT

);

INTEGER BIGINT SMALLINT TINYINT→

FLOAT REAL NUMERIC DECIMAL→

VARCHAR VARBINARY TEXT BLOB→

TIME DATE TIMESTAMP→

#include <stdio.h>

int main(int argc, char* argv[]) {float x = 0.1;float y = 0.2;printf("x+y = %.20f\n", x+y);printf("0.3 = %.20f\n", 0.3);

}

x+y = 0.300000011920928955080.3 = 0.29999999999999998890

→ NUMERIC DECIMAL

→ VARCHAR

typedef unsigned char NumericDigit;

typedef struct {

int ndigits;

int weight;

int scale;

int sign;

NumericDigit *digits;

} numeric;

typedef unsigned char NumericDigit;

typedef struct {

int ndigits;

int weight;

int scale;

int sign;

NumericDigit *digits;

} numeric;

Recommended