DATA ANALYTICS USING DEEP LEARNING
GT 8803 // FALL 2019 // JOY ARULRAJ
L E C T U R E # 0 8 : Q U E R Y E X E C U T I O N
DATA ANALYTICS USING DEEP LEARNING GT 8803 // FALL 2019 // JOY - - PowerPoint PPT Presentation
DATA ANALYTICS USING DEEP LEARNING GT 8803 // FALL 2019 // JOY ARULRAJ L E C T U R E # 0 8 : Q U E R Y E X E C U T I O N administrivia Reminders Sign up for discussion slots on Thursday Proposal presentations on next Wednesday
L E C T U R E # 0 8 : Q U E R Y E X E C U T I O N
GT 8803 // Fall 2019
– Sign up for discussion slots on Thursday – Proposal presentations on next Wednesday – 2 page document + 5 minute presentation – Assignment 1 due on Wednesday
2
GT 8803 // Fall 2019
3
1 2 Georgia Tech 15000 Wisconsin 30000 Atlanta Madison ID University Enrollment City 3 Carnegie Mellon 4 UC Berkeley 6000 30000 Pittsburgh Berkeley
FLEXIBLE STORAGE MODEL
GT 8803 // Fall 2019
– Zone maps – Dictionary encoding
4
Original Data
val 100 200 300 400 400
GT 8803 // Fall 2019
– Zone maps – Dictionary encoding
5
Zone Map
val 100 400 280 1400 type MIN MAX AVG SUM 5 COUNT
Original Data
val 100 200 300 400 400
GT 8803 // Fall 2019
– Zone maps – Dictionary encoding
6
Zone Map
val 100 400 280 1400 type MIN MAX AVG SUM 5 COUNT
Original Data
val 100 200 300 400 400
SELECT * FROM table WHERE val > 600
GT 8803 // Fall 2019
– Convolutional Auto Encoder
7
ENCODER (CONVOLUTIONS) DECODER (DECONVOLUTIONS) COMPRESSED DATA
GT 8803 // Fall 2019
8
GT 8803 // Fall 2018
9
GT 8803 // Fall 2019
Connection Manager + Admission Control Query Parser Query Optimizer Query Executor Lock Manager (Concurrency Control) Access Methods (or Indexes) Buffer Pool Manager Log Manager Memory Manager + Disk Manager Networking Manager
10
Source: Anatomy of a Database System
GT 8803 // Fall 2019
– Data flows from the leaves toward the root. – Output of the root node is the result of the query.
11
SELECT A.id, B.value FROM A, B WHERE A.id = B.id AND B.value > 100
A.id=B.id value>100 A.id, B.value
GT 8803 // Fall 2019
– Different trade-offs for different workloads. – Top-down or Bottom-up execution – Determines what data is sent between operators
– Tuple-at-a-time Model – Operator-at-a-time Model – Vector-at-a-time Model
12
GT 8803 // Fall 2019
– On each invocation, the operator returns either a single tuple or a null marker if there are no more tuples. – The operator implements a loop that calls next on its children to retrieve their tuples and then process them.
13
GT 8803 // Fall 2018
14
SELECT A.id, B.value FROM A, B WHERE A.id = B.id AND B.value > 100
A.id=B.id value>100 A.id, B.value
GT 8803 // Fall 2018
15
SELECT A.id, B.value FROM A, B WHERE A.id = B.id AND B.value > 100
A.id=B.id value>100 A.id, B.value
for t in A: emit(t) for t1 in left.Next(): buildHashTable(t1) for t2 in right.Next(): if probe(t2): emit(t1⨝t2) for t in child.Next(): emit(projection(t)) for t in child.Next(): if evalPred(t): emit(t) for t in B: emit(t)
GT 8803 // Fall 2018
16
SELECT A.id, B.value FROM A, B WHERE A.id = B.id AND B.value > 100
A.id=B.id value>100 A.id, B.value
for t in A: emit(t) for t1 in left.Next(): buildHashTable(t1) for t2 in right.Next(): if probe(t2): emit(t1⨝t2) for t in child.Next(): emit(projection(t)) for t in child.Next(): if evalPred(t): emit(t) for t in B: emit(t)
GT 8803 // Fall 2018
17
SELECT A.id, B.value FROM A, B WHERE A.id = B.id AND B.value > 100
A.id=B.id value>100 A.id, B.value
for t in A: emit(t) for t1 in left.Next(): buildHashTable(t1) for t2 in right.Next(): if probe(t2): emit(t1⨝t2) for t in child.Next(): emit(projection(t)) for t in child.Next(): if evalPred(t): emit(t) for t in B: emit(t)
GT 8803 // Fall 2018
18
SELECT A.id, B.value FROM A, B WHERE A.id = B.id AND B.value > 100
A.id=B.id value>100 A.id, B.value
for t in A: emit(t) for t1 in left.Next(): buildHashTable(t1) for t2 in right.Next(): if probe(t2): emit(t1⨝t2) for t in child.Next(): emit(projection(t)) for t in child.Next(): if evalPred(t): emit(t) for t in B: emit(t)
GT 8803 // Fall 2018
19
SELECT A.id, B.value FROM A, B WHERE A.id = B.id AND B.value > 100
A.id=B.id value>100 A.id, B.value
for t in A: emit(t) for t1 in left.Next(): buildHashTable(t1) for t2 in right.Next(): if probe(t2): emit(t1⨝t2) for t in child.Next(): emit(projection(t)) for t in child.Next(): if evalPred(t): emit(t) for t in B: emit(t)
GT 8803 // Fall 2018
20
SELECT A.id, B.value FROM A, B WHERE A.id = B.id AND B.value > 100
A.id=B.id value>100 A.id, B.value
for t in A: emit(t) for t1 in left.Next(): buildHashTable(t1) for t2 in right.Next(): if probe(t2): emit(t1⨝t2) for t in child.Next(): emit(projection(t)) for t in child.Next(): if evalPred(t): emit(t) for t in B: emit(t)
GT 8803 // Fall 2018
21
SELECT A.id, B.value FROM A, B WHERE A.id = B.id AND B.value > 100
A.id=B.id value>100 A.id, B.value
for t in A: emit(t) for t1 in left.Next(): buildHashTable(t1) for t2 in right.Next(): if probe(t2): emit(t1⨝t2) for t in child.Next(): emit(projection(t)) for t in child.Next(): if evalPred(t): emit(t) for t in B: emit(t)
GT 8803 // Fall 2019
– Allows for tuple pipelining.
– Joins, Subqueries, Order By – Known as pipeline breakers
– Limit
22
GT 8803 // Fall 2019
– The operator "materializes" it output as a single result. – The DBMS can push down hints into to avoid scanning too many tuples.
23
GT 8803 // Fall 2018
24
SELECT A.id, B.value FROM A, B WHERE A.id = B.id AND B.value > 100
A.id=B.id value>100 A.id, B.value
for t in A:
for t1 in left.Output(): buildHashTable(t1) for t2 in right.Output(): if probe(t2): out.add(t1⨝t2)
for t in child.Output():
for t in child.Output(): if evalPred(t): out.add(t)
for t in B:
GT 8803 // Fall 2018
25
SELECT A.id, B.value FROM A, B WHERE A.id = B.id AND B.value > 100
A.id=B.id value>100 A.id, B.value
for t in A:
for t1 in left.Output(): buildHashTable(t1) for t2 in right.Output(): if probe(t2): out.add(t1⨝t2)
for t in child.Output():
for t in child.Output(): if evalPred(t): out.add(t)
for t in B:
GT 8803 // Fall 2018
26
SELECT A.id, B.value FROM A, B WHERE A.id = B.id AND B.value > 100
A.id=B.id value>100 A.id, B.value
for t in A:
for t1 in left.Output(): buildHashTable(t1) for t2 in right.Output(): if probe(t2): out.add(t1⨝t2)
for t in child.Output():
for t in child.Output(): if evalPred(t): out.add(t)
for t in B:
GT 8803 // Fall 2018
27
SELECT A.id, B.value FROM A, B WHERE A.id = B.id AND B.value > 100
A.id=B.id value>100 A.id, B.value
for t in A:
for t1 in left.Output(): buildHashTable(t1) for t2 in right.Output(): if probe(t2): out.add(t1⨝t2)
for t in child.Output():
for t in child.Output(): if evalPred(t): out.add(t)
for t in B:
GT 8803 // Fall 2018
28
SELECT A.id, B.value FROM A, B WHERE A.id = B.id AND B.value > 100
A.id=B.id value>100 A.id, B.value
for t in A:
for t1 in left.Output(): buildHashTable(t1) for t2 in right.Output(): if probe(t2): out.add(t1⨝t2)
for t in child.Output():
for t in child.Output(): if evalPred(t): out.add(t)
for t in B:
GT 8803 // Fall 2018
29
SELECT A.id, B.value FROM A, B WHERE A.id = B.id AND B.value > 100
A.id=B.id value>100 A.id, B.value
for t in A:
for t1 in left.Output(): buildHashTable(t1) for t2 in right.Output(): if probe(t2): out.add(t1⨝t2)
for t in child.Output():
for t in child.Output(): if evalPred(t): out.add(t)
for t in B:
GT 8803 // Fall 2018
30
SELECT A.id, B.value FROM A, B WHERE A.id = B.id AND B.value > 100
A.id=B.id value>100 A.id, B.value
for t in A:
for t1 in left.Output(): buildHashTable(t1) for t2 in right.Output(): if probe(t2): out.add(t1⨝t2)
for t in child.Output():
for t in child.Output(): if evalPred(t): out.add(t)
for t in B:
GT 8803 // Fall 2019
– Transactions typically only access a small number of tuples at a time. – Lower execution / coordination overhead.
31
GT 8803 // Fall 2019
– The operator's internal loop processes multiple tuples at a time. – The size of the batch can vary based on hardware
32
GT 8803 // Fall 2018
33
SELECT A.id, B.value FROM A, B WHERE A.id = B.id AND B.value > 100
A.id=B.id value>100 A.id, B.value
for t in A:
if |out|> n : emit(out)
for t1 in left.Next(): buildHashTable(t1) for t2 in right.Next(): if probe(t2): out.add(t1⨝t2) if |out|> n: emit(out)
for t in child.Next():
if |out|> n: emit(out)
for t in child.Next(): if evalPred(t): out.add(t) if |out|> n : emit(out)
for t in B:
if |out|> n : emit(out)
GT 8803 // Fall 2018
34
SELECT A.id, B.value FROM A, B WHERE A.id = B.id AND B.value > 100
A.id=B.id value>100 A.id, B.value
for t in A:
if |out|> n : emit(out)
for t1 in left.Next(): buildHashTable(t1) for t2 in right.Next(): if probe(t2): out.add(t1⨝t2) if |out|> n: emit(out)
for t in child.Next():
if |out|> n: emit(out)
for t in child.Next(): if evalPred(t): out.add(t) if |out|> n : emit(out)
for t in B:
if |out|> n : emit(out)
GT 8803 // Fall 2018
35
SELECT A.id, B.value FROM A, B WHERE A.id = B.id AND B.value > 100
A.id=B.id value>100 A.id, B.value
for t in A:
if |out|> n : emit(out)
for t1 in left.Next(): buildHashTable(t1) for t2 in right.Next(): if probe(t2): out.add(t1⨝t2) if |out|> n: emit(out)
for t in child.Next():
if |out|> n: emit(out)
for t in child.Next(): if evalPred(t): out.add(t) if |out|> n : emit(out)
for t in B:
if |out|> n : emit(out)
GT 8803 // Fall 2019
36
GT 8803 // Fall 2019
– Reduces number of next function invocations – Works well for OLAP
– Intermediate tables may not fit in main-memory – Fetching batches of tuples reduces number of page accesses
37
GT 8803 // Fall 2019
– Reduces number of next function invocations – Works well for OLAP
– Intermediate tables may not fit in main-memory – Fetching batches of tuples reduces number of page accesses
38
GT 8803 // Fall 2019
– Reduces number of next function invocations – Works well for OLAP
– Intermediate tables may not fit in main-memory – Fetching batches of tuples reduces number of page accesses
39
GT 8803 // Fall 2019
– Greatly reduces the number of invocations per
– Allows for operators to use vectorized instructions (SIMD) to process batches of tuples.
40
GT 8803 // Fall 2018
41
→Direction: Top-Down →Emits: Tuple Batch →Target: OLAP
→Direction: Bottom-Up →Emits: Entire Tuple Set →Target: OLTP
→Direction: Top-Down →Emits: Single Tuple →Target: General Purpose
GT 8803 // Fall 2019
– Not defined in relational algebra – Physical database design
– Sequential Scan – Index Scan – Multi-index / "Bitmap" Scan
42
SELECT A.id, B.value FROM A, B WHERE A.id = B.id AND B.value > 100
A.id=B.id value>100 A.id, B.value
GT 8803 // Fall 2019
– Not defined in relational algebra – Physical database design
– Sequential Scan – Index Scan – Multi-index / "Bitmap" Scan
43
SELECT A.id, B.value FROM A, B WHERE A.id = B.id AND B.value > 100
A.id=B.id value>100 A.id, B.value
GT 8803 // Fall 2019
– Retrieve it from the buffer pool. – Iterate over each tuple and check whether to include it.
44
for page in table.pages: for t in page.tuples: if evalPred(t): // Do Something!
GT 8803 // Fall 2019
– Prefetching – Parallelization – Buffer Pool Bypass – Zone Maps – Late materialization – Heap clustering
45
GT 8803 // Fall 2019
– Prefetching – Parallelization – Buffer Pool Bypass – Zone Maps – Late materialization – Heap clustering
46
GT 8803 // Fall 2019
– DBMS checks the zone map first to decide whether it wants to access the page.
47
Original Data
val 100 200 300 400 400
GT 8803 // Fall 2019
– DBMS checks the zone map first to decide whether it wants to access the page.
48
Zone Map
val 100 400 280 1400 type MIN MAX AVG SUM 5 COUNT
Original Data
val 100 200 300 400 400
GT 8803 // Fall 2019
– DBMS checks the zone map first to decide whether it wants to access the page.
49
Zone Map
val 100 400 280 1400 type MIN MAX AVG SUM 5 COUNT
Original Data
val 100 200 300 400 400
SELECT * FROM table WHERE val > 600
GT 8803 // Fall 2019
50
GT 8803 // Fall 2019
51
1 2 3
a b c
SELECT AVG(C) FROM foo JOIN bar ON foo.b = bar.b WHERE a > 100
GT 8803 // Fall 2019
52
1 2 3
a b c
SELECT AVG(C) FROM foo JOIN bar ON foo.b = bar.b WHERE a > 100
foo.b=bar.b a>100 AVG(c)
GT 8803 // Fall 2019
53
1 2 3
a b c
SELECT AVG(C) FROM foo JOIN bar ON foo.b = bar.b WHERE a > 100
foo.b=bar.b a>100 AVG(c)
GT 8803 // Fall 2019
54
1 2 3
a b c
SELECT AVG(C) FROM foo JOIN bar ON foo.b = bar.b WHERE a > 100
foo.b=bar.b a>100 AVG(c)
GT 8803 // Fall 2019
55
1 2 3
a b c
SELECT AVG(C) FROM foo JOIN bar ON foo.b = bar.b WHERE a > 100
foo.b=bar.b a>100 AVG(c)
Offsets
GT 8803 // Fall 2019
56
1 2 3
a b c
SELECT AVG(C) FROM foo JOIN bar ON foo.b = bar.b WHERE a > 100
foo.b=bar.b a>100 AVG(c)
Offsets Offsets
GT 8803 // Fall 2019
57
1 2 3
a b c
SELECT AVG(C) FROM foo JOIN bar ON foo.b = bar.b WHERE a > 100
foo.b=bar.b a>100 AVG(c)
Offsets Offsets Result
GT 8803 // Fall 2019
58
101 102 103 104
GT 8803 // Fall 2019
59
101 102 103 104
GT 8803 // Fall 2019
60
101 102 103 104
GT 8803 // Fall 2019
– What attributes the index contains – What attributes the query references – The attribute's value domains – Predicate composition – Whether the index has unique or non-unique keys
61
GT 8803 // Fall 2019
– What attributes the index contains – What attributes the query references – The attribute's value domains – Predicate composition – Whether the index has unique or non-unique keys
62
GT 8803 // Fall 2019
– Index #1: age – Index #2: dept
63
SELECT * FROM students WHERE age < 30 AND dept = 'CS' AND country = 'US'
GT 8803 // Fall 2019
– Index #1: age – Index #2: dept
64
SELECT * FROM students WHERE age < 30 AND dept = 'CS' AND country = 'US'
GT 8803 // Fall 2019
– Index #1: age – Index #2: dept
65
SELECT * FROM students WHERE age < 30 AND dept = 'CS' AND country = 'US'
GT 8803 // Fall 2019
– Compute sets of record ids using each matching index. – Combine these sets based on the query's predicates (union vs. intersect). – Retrieve the records and apply any remaining terms.
66
GT 8803 // Fall 2019
– We can retrieve the record ids satisfying age<30 using the first, – Then retrieve the record ids satisfying dept='CS' using the second, – Take their intersection – Retrieve records and check country='US'.
67
SELECT * FROM students WHERE age < 30 AND dept = 'CS' AND country = 'US'
GT 8803 // Fall 2019
68
SELECT * FROM students WHERE age < 30 AND dept = 'CS' AND country = 'US'
GT 8803 // Fall 2019
69
record ids
SELECT * FROM students WHERE age < 30 AND dept = 'CS' AND country = 'US'
GT 8803 // Fall 2019
70
record ids record ids
SELECT * FROM students WHERE age < 30 AND dept = 'CS' AND country = 'US'
GT 8803 // Fall 2019
71
record ids record ids
country='US'
fetch records
SELECT * FROM students WHERE age < 30 AND dept = 'CS' AND country = 'US'
GT 8803 // Fall 2019
72
101 102 103 104
GT 8803 // Fall 2019
73
101 102 103 104
GT 8803 // Fall 2019
74
101 102 103 104
GT 8803 // Fall 2019
75
101 102 103 104
Page 102 Page 103 Page 102 Page 104 Page 104 Page 103 Page 102 Page 101 Page 104 Page 103 Page 102 Page 103
GT 8803 // Fall 2019
76
101 102 103 104
Page 102 Page 103 Page 102 Page 104 Page 104 Page 103 Page 102 Page 101 Page 104 Page 103 Page 102 Page 103
GT 8803 // Fall 2019
77
101 102 103 104
Page 102 Page 103 Page 102 Page 104 Page 104 Page 103 Page 102 Page 101 Page 104 Page 103 Page 102 Page 103 Page 102 Page 101 Page 102 Page 102 Page 103 Page 104 Page 103 Page 104 Page 101 Page 102 Page 103 Page 104
GT 8803 // Fall 2019
78
GT 8803 // Fall 2019
– Clustered: Tuples are stored physically on disk in the same order as the index. Only one per table. – Unclustered: Ordered differently. Values are only pointers to the physical tuples.
79
GT 8803 // Fall 2018
80
GT 8803 // Fall 2019
81
SELECT A.id, B.value FROM A, B WHERE A.id = B.id AND B.val > 100
GT 8803 // Fall 2019
82
SELECT A.id, B.value FROM A, B WHERE A.id = B.id AND B.val > 100
GT 8803 // Fall 2019
83
SELECT A.id, B.value FROM A, B WHERE A.id = B.id AND B.val > 100
Attribute(B.id)
=
Attribute(A.id)
AND >
Attribute(val) Constant(100)
GT 8803 // Fall 2019
– Comparison Operators (=, <, >, !=) – Logical Operators (AND, OR) – Arithmetic Operators (+, -, *, /, %) – Constant Values – Tuple Attribute References
84
GT 8803 // Fall 2018
85
SELECT * FROM B WHERE B.val = ? + 1
GT 8803 // Fall 2018
86
SELECT * FROM B WHERE B.val = ? + 1
GT 8803 // Fall 2018
87
SELECT * FROM B WHERE B.val = ? + 1
Current Tuple (123, 1000) Query Parameters (int:999) Table Schema B→(int:id, int:val)
Attribute(val) Constant(1) = + Parameter(0)
GT 8803 // Fall 2018
88
SELECT * FROM B WHERE B.val = ? + 1
Current Tuple (123, 1000) Query Parameters (int:999) Table Schema B→(int:id, int:val)
Attribute(val) Constant(1) = + Parameter(0)
GT 8803 // Fall 2018
89
SELECT * FROM B WHERE B.val = ? + 1
Current Tuple (123, 1000) Query Parameters (int:999) Table Schema B→(int:id, int:val)
Attribute(val) Constant(1) = + Parameter(0)
GT 8803 // Fall 2018
1000
90
SELECT * FROM B WHERE B.val = ? + 1
Current Tuple (123, 1000) Query Parameters (int:999) Table Schema B→(int:id, int:val)
Attribute(val) Constant(1) = + Parameter(0)
GT 8803 // Fall 2018
1000
91
SELECT * FROM B WHERE B.val = ? + 1
Current Tuple (123, 1000) Query Parameters (int:999) Table Schema B→(int:id, int:val)
Attribute(val) Constant(1) = + Parameter(0)
GT 8803 // Fall 2018
1000
92
SELECT * FROM B WHERE B.val = ? + 1
Current Tuple (123, 1000) Query Parameters (int:999) Table Schema B→(int:id, int:val)
Attribute(val) Constant(1) = + Parameter(0)
GT 8803 // Fall 2018
1000 999
93
SELECT * FROM B WHERE B.val = ? + 1
Current Tuple (123, 1000) Query Parameters (int:999) Table Schema B→(int:id, int:val)
Attribute(val) Constant(1) = + Parameter(0)
GT 8803 // Fall 2018
1000 999
94
SELECT * FROM B WHERE B.val = ? + 1
Current Tuple (123, 1000) Query Parameters (int:999) Table Schema B→(int:id, int:val)
Attribute(val) Constant(1) = + Parameter(0)
GT 8803 // Fall 2018
1000 999 1
95
SELECT * FROM B WHERE B.val = ? + 1
Current Tuple (123, 1000) Query Parameters (int:999) Table Schema B→(int:id, int:val)
Attribute(val) Constant(1) = + Parameter(0)
GT 8803 // Fall 2018
1000 999 1 true 1000
96
SELECT * FROM B WHERE B.val = ? + 1
Current Tuple (123, 1000) Query Parameters (int:999) Table Schema B→(int:id, int:val)
Attribute(val) Constant(1) = + Parameter(0)
GT 8803 // Fall 2019
97
GT 8803 // Fall 2019
– Structural elements simplify manipulation as
– Works well for complex recursive structures (e.g., sub-queries, nested expressions)
98
GT 8803 // Fall 2019
99
GT 8803 // Fall 2018
100
GT 8803 // Fall 2019
– Each table corresponds to a video – Each tuple corresponds to a detected object – Each table should correspond to an unique entity – Object re-identification
101
Object ID Frame ID Class Mask Features Content 1 1 Bus Mask [F1, F2] Content
GT 8803 // Fall 2019
– Assume that data is already populated (i.e., data created externally typically by humans). – In contrast, BLAZEIT automatically populates the data using an off-the-shelf classifier
– Similar to an un-materialized view. – This laziness enables several optimizations
102
GT 8803 // Fall 2019
– Ad-hoc queries: Pre-computing all possible features would be expensive. Wasteful for ad-hoc queries since many of the columns with extracted features may never be used. – Online queries: For queries on live newscasts or broadcast games, it could be faster to execute the queries and classifier directly on the live data.
103
GT 8803 // Fall 2019
104
SELECT cameraID, frameID, 𝒟1(ℱ1(vehBox)) AS vehType, 𝒟2(ℱ2(vehBox)) AS vehColor FROM (PROCESS inputVideo PRODUCE cameraID, frameID, vehBox USING VehDetector) WHERE vehType=SUV ∧ vehColor=red;
GT 8803 // Fall 2019
105
OLD PLAN NEW PLAN
GT 8803 // Fall 2019
– It must filter out a large portion of the input and have few false negatives – Also known as a probabilistic predicate or specialized model
106
GT 8803 // Fall 2019
– Linear SVMs – Deep neural networks
– Based on low-level visual features (e.g., avg. color) – If an analyst were to query for “red buses”, we could filter the video to have a certain number of red pixels, or a certain level of redness.
107
GT 8803 // Fall 2019
– Filtering based on temporal cues – Example: Analyst may want to find buses in the scene for at least K frames. In this case, sub-sample the video at a rate of (K−1)/2.
– Only regions of interest (ROIs) of the scene are considered. – ROI can be used to train smaller faster models
108
GT 8803 // Fall 2019
– Example: User is interested in some statistic over the data, such as average number of cars per frame – Only populate a small number of tuples (or not populate them at all) for faster execution. – In cases where the filtering classifier is accurate enough, we can return the answer directly from the filtering classifier
109
GT 8803 // Fall 2019
– Example: A clip containing at least one bus and five cars – Intuition is to bias the search towards regions of the video that likely contain the event – Train a filtering classifier to bias which frames to sample.
110
GT 8803 // Fall 2019
– Filtering, Sampling
– Tuple-at-a-time
– Sequential scan with a complex predicate – Index scan: Filtering classifier (e.g., vehType) – Multi-Index scan: Spatial access (e.g., R-trees)
111
GT 8803 // Fall 2019
– Query optimization
112