I'm looking for a Database for large amounts of metrics, and i'm confused that there is nothing out there to:
- store large amounts (terrabytes) of metrics data in the form:
- key (string)
- value (integer)
- datetime (timestamp)
- from a stream of 1Gb/s of such metrics
- from highly unreliable sources (tcp bad)
- execute aggregation on a subset (~10Gb) of data:
- avg(value), max(value), min(value), count(*)
- where value == "foo"
- where X < datetime < Y
- group by datetime/timespan
- within less than 5 seconds, when the subset is "current"
- need to be able to make a subset "current", i.e. load to ram
- queries on old data not marked "hot", have no time constraint
so far i evaluated:
postgres
- +never lost data ever
- -very difficult to scale
- -no performance bonus from the specific requirements
- -i don't understand how to partition data into "current" and "old"
crate.io
- -too young, many bugs while scaling
- +great partition semantics allows partition by timestamp
- -http based. alot of overhead for a 1Gb stream
influxdb
- +semantics are exactly what i need
- -doesn't scale at all
- -crashes often and loses data
opentsdb
- +looks like it was designed for my use case
- -the complexity of hbase isn't worth it
cassandra
- +scales well, and unlike hbase, i understand how it works
- +twitter uses it for metrics (rainbird)
- -aggregation is supposed to be done on top of hadoop
- -hadoop is hard
graphite
- +custom database for metric purposes
- -custom database ...
- -seems very slow and i don't see how it's supposed to scale
prometheus.io
- +looks like it was designed for my use case
- -but isn't. instead it's some sort of aggregation for "scaped" statistics. It doesn't scale well to unreliable event streams.