cmu 15-445/645 database systems (fall 2017) :: database ... · mmap page1 page2 page3 page4 page1...
Post on 05-Jun-2020
14 Views
Preview:
TRANSCRIPT
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
…
…
→→→
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 #4
Tuple #2
Tuple #3
Tuple #1
→→
Header
Tuple #4
Tuple #2
Tuple #3
Tuple #1
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→
→ FLOAT REAL DOUBLE
#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
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;
→→
VARCHAR DATA
Header a b c d e
top related