all about capturing change, not simply state ▪ Time Series help understand the past and predict the future ▪ Time Series are the bridges between the physical world and its digital twin ▪ Time Series are the memory of the universe we live in ▪ Time Series are eating the world
data are different by nature ▪ Their production rate is massive and continuous ▪ The historical datasets that need to be retained are gigantic ▪ The access pattern to Time Series data is unique ▪ The type of analysis performed on Time Series data is uncommon ▪ Traditional tools MUST be adapted if they are to be used
and text format for easy integration ▪ Ability to ingest and fetch very long streams of data points ▪ Support for WebSocket input and output ▪ Fine grained access control via cryptographic tokens ▪ Proven scalability with no cardinality problems ▪ Support for Univariate and Multivariate data points ▪ Distributed throttling mechanisms for number of series and data points rate
for time precisions from ns to ms ▪ Class and labels support UTF-8 in both names and values ▪ Support for 5 types LONG, DOUBLE, BOOLEAN, STRING, BINARY 64 -Infinity NaN 4E-05 F ’foo’ b64:UmVmbHV4Cg== ▪ Support for nested Multivariate values - each MV is a GTS (Geo Time Series™) [ 2/42 64/48.0:-4.5/’hello’ 128/[ 1 2 3 ] 256/hex:12345 ]
over 500M series ▪ Ingestion performance of 120M data points per second on a single in-memory ▪ Historical datasets of several hundreds of trillions of data points ▪ Sustained ingestion of several million data points per second per ingress ▪ Ingestion of over 300k data points per second on a single thread on a RPi 4 ▪ Random deletions at several million data points per second
concatenative language ▪ Turing complete with loops, conditionals, asynchronous transfer of control ▪ Supports Geo Time Series as ﬁrst class citizens ▪ Over 980 functions available - from summary statistics to signal processing ▪ 6 frameworks - BUCKETIZE, MAP, REDUCE, FILL, APPLY, FILTER ▪ Fully extensible and embeddable ▪ Ability to call external programs
FETCH ‘gts’ STORE // Fetch last 24 hours [ $gts bucketizer.mean NOW 0 1 m ] BUCKETIZE ‘mean’ STORE // mean every 1’ [ $gts mapper.rate 1 0 0 ] MAP ‘rate’ STORE // Compute rate of change NEWGTS 'randomwalk' RENAME 0.0 'v' STORE 42 PRNG 1 1000 <% 10 m * NOW SWAP - NaN DUP DUP $v SRAND 0.5 - + 'v' STORE $v ADDVALUE %> FOR
<% // This is a macro body %> ▪ Macros can be deployed on the server side ▪ Macros can be packaged in a jar ▪ Macros can access some conﬁg elements (MACROCONFIG) ▪ Macros can be deployed on a remote server
Macros can be hosted on any HTTP server including GitHub ▪ Resolution is performed at runtime ▪ Support for multiple macro repositories ▪ Script execution can modify repositories ▪ WarpFleet™ resolver can be disabled altogether ▪ Support for versioning via the IMPORT function ▪ SenX provides a growing set of macros via its own repo ▪ Warp 10 does intelligent caching of fetched macros ▪ Support for runtime injection of elements (MACROCONFIG)
are run in the Warp 10 process ▪ Plugins can be in a Java (JVM) or Go, Rust, C, C++ (JNA) ▪ Very diverse things can be done using plugins ▪ Authentication plugins add new types of credentials ▪ No license constraints Kafka, MQTT, WarpStudio, Zeppelin, HTTP, UDP, TCP, Py4J, InfluxDB Line Protocol OVH is considering open sourcing plugins to support PromQL, Graphite, OpenTSDB, InfluxQL query languages Poke them to make it happen!
▪ CLI tool on NPM - npm install -g @senx/warpfleet ▪ Modules are hosted on maven repositories ▪ Beneﬁt from dependency resolution mechanisms ▪ Modules can be fetched by Spark for example ▪ Again, contributions more than welcome!