Slide 1

Slide 1 text

@ifesdjeen

Slide 2

Slide 2 text

Cassandra Monitoring

Slide 3

Slide 3 text

No content

Slide 4

Slide 4 text

Precision

Slide 5

Slide 5 text

is not same as

Slide 6

Slide 6 text

Semantics

Slide 7

Slide 7 text

is not same as

Slide 8

Slide 8 text

Anomaly detection

Slide 9

Slide 9 text

Do you see the elephant being swallowed by the snake?

Slide 10

Slide 10 text

Agenda

Slide 11

Slide 11 text

Ad-hoc queries

Slide 12

Slide 12 text

Aggregations Fast

Slide 13

Slide 13 text

Machine Learning

Slide 14

Slide 14 text

parallel queries Step 1

Slide 15

Slide 15 text

+---------------+---------------+ | timestamp | sequenceId | +---------------+---------------+

Slide 16

Slide 16 text

Used to avoid timestamp resolution collisions To ensure sub-resolution order Snapshot the data on overflow or timeout Ensures idempotence Sequence ID

Slide 17

Slide 17 text

Fighting Dispersion

Slide 18

Slide 18 text

ts1 ts2 ts3 ts4 ts5 ts6 ts7 ts8 ts9 ts10 ts11 ts12 ts13 Range Tables

Slide 19

Slide 19 text

Full Table Scan ts1 ts2 ts3 ts4 ts5 ts6 ts7 ts8 ts9 ts10 ts11 ts12 ts13 Start End

Slide 20

Slide 20 text

ts1 ts2 ts3 ts4 ts5 ts6 ts7 ts8 ts9 ts10 ts11 ts12 ts13

Slide 21

Slide 21 text

Open Range Start End ts1 ts2 ts3 ts4 ts5 ts6 ts7 ts8 ts9 ts10 ts11 ts12 ts13

Slide 22

Slide 22 text

ts1 ts2 ts3 ts4 ts5 ts6 ts7 ts8 ts9 ts10 ts11 ts12 ts13

Slide 23

Slide 23 text

“Between” Range ts1 ts2 ts3 ts4 ts5 ts6 ts7 ts8 ts9 ts10 ts11 ts12 ts13 Start End

Slide 24

Slide 24 text

ts1 ts2 ts3 ts4 ts5 ts6 ts7 ts8 ts9 ts10 ts11 ts12 ts13

Slide 25

Slide 25 text

(rich query API) Step 2 add some algebra

Slide 26

Slide 26 text

No content

Slide 27

Slide 27 text

Stream Fusion for rich ad-hoc queries

Slide 28

Slide 28 text

What is even Stream Fusion

Slide 29

Slide 29 text

map filter reduce

Slide 30

Slide 30 text

single step mapFilterReduce

Slide 31

Slide 31 text

data Step data cursor = Yield data !cursor | Skip !cursor | Done data Stream data = ∃s. Stream (cursor → Step data cursor) cursor

Slide 32

Slide 32 text

Stream Beginning: reading from the DB

Slide 33

Slide 33 text

map Yield data cursor → Yield (f cursor) cursor Skip cursor → Skip cursor Done → Done maps :: (a → b) → Stream a → Stream b

Slide 34

Slide 34 text

filter Yield data cursor | p data → Yield data cursor | otherwise → Skip cursor Skip cursor → Skip cursor Done → Done filters :: (a → Bool) → Stream a → Stream a

Slide 35

Slide 35 text

reduce/fold Yield x cursor → loop (f data x) cursor Skip cursor → loop data cursor Done → z foldls :: (Monoid acc) => (acc → a → acc) → acc → Stream a → acc

Slide 36

Slide 36 text

Append class Monoid a where mempty :: a mappend :: a -> a -> a -- ^ Identity of 'mappend' -- ^ An associative operation

Slide 37

Slide 37 text

class (Monoid intermediate) => Aggregate intermediate end where combine :: intermediate -> end Combine

Slide 38

Slide 38 text

data Count = Count Int instance Monoid Count where mempty = Count 0 mappend (Count a) (Count b) = Count $ a + b instance Aggregate Count Int where combine (Count a) = a Count Example

Slide 39

Slide 39 text

add some ML Step 3

Slide 40

Slide 40 text

Storing Models

Slide 41

Slide 41 text

Support Vector Machines

Slide 42

Slide 42 text

Hyperplane α·x - φ = 1

Slide 43

Slide 43 text

[ α1 α1 α1 ...αn ] ρ

Slide 44

Slide 44 text

Option 1: list

Slide 45

Slide 45 text

CREATE TABLE support_vectors( path varchar, alpha list, phi int, PRIMARY KEY(path))

Slide 46

Slide 46 text

Problems High deserialisation overhead Need to add PK specifiers for multiple SVs

Slide 47

Slide 47 text

Alternative: blob & byte buffers

Slide 48

Slide 48 text

Vector Representation

Slide 49

Slide 49 text

0 8 16 24 32 40 n*8 +----+----+----+----+----+----+----+----+ | α | α | α | α | α | ... | α | +----+----+----+----+----+----+----+----+ byte address points 1 2 3 4 0 n

Slide 50

Slide 50 text

Matrix Representation

Slide 51

Slide 51 text

0 8 16 24 32 40 n*8 +----+----+----+----+----+---------+----+ | α | α | α | α | α | ... | α | +----+----+----+----+----+---------+----+ 01 02 03 04 00 1n n*8+ 0 8 16 24 32 40 n*8 +----+----+----+----+----+---------+----+ | α | α | α | α | α | ... | α | +----+----+----+----+----+---------+----+ 01 02 03 04 00 1n m*n*8+ 0 8 16 24 32 40 n*8 +----+----+----+----+----+---------+----+ | α | α | α | α | α | ... | α | +----+----+----+----+----+---------+----+ m1 m2 m3 m4 m0 mn

Slide 52

Slide 52 text

Advantages No serialisation overhead Fast relative access Easy to go multi-dimensional Easy to implement atomic in-memory operations

Slide 53

Slide 53 text

Bayesian Classifiers

Slide 54

Slide 54 text

P(X | blue)= Number of Blue near X Total number of blue P(X | red)= Number of Red near X Total number of Red

Slide 55

Slide 55 text

[[Mean(x1), Var(x1)] [Mean(x2), Var(x3)] ... [Mean(xn), Var(xn)]]

Slide 56

Slide 56 text

0 8 16 +---------+---------+ | Mean(x )| Var(x ) | +---------+---------+ 0 0 16 24 32 +---------+---------+ | Mean(x )| Var(x ) | +---------+---------+ 1 1 2n*8 (2n+1)*8 +---------+---------+ | Mean(x )| Var(x ) | +---------+---------+ n n byte address payloads

Slide 57

Slide 57 text

make it rocket-fast Step 4

Slide 58

Slide 58 text

Approximate Data Structures

Slide 59

Slide 59 text

Bloom Filters are basically long arrays / vectors

Slide 60

Slide 60 text

BitSet

Slide 61

Slide 61 text

0 8 +---+---+---+---+---+---+---+---+ | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | +---+---+---+---+---+---+---+---+ 8 16 +---+---+---+---+---+---+---+---+ | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | +---+---+---+---+---+---+---+---+ 16 24 +---+---+---+---+---+---+---+---+ | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | +---+---+---+---+---+---+---+---+ 24 32 +---+---+---+---+---+---+---+---+ | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | +---+---+---+---+---+---+---+---+ bit address

Slide 62

Slide 62 text

Advantages 64 bits per 8-byte Long Easy to represent by the long-array using offsets, bit shifts and masks Easy to implement atomic in-memory operations

Slide 63

Slide 63 text

Count-min sketches are basically int matrices

Slide 64

Slide 64 text

Histograms are basically long vectors

Slide 65

Slide 65 text

Conclusions Ad-hoc queries Parallelism Lightweight DSs representation Optimisations and good API fits

Slide 66

Slide 66 text

@ifesdjeen