At a high-level, here is what they could have done to produce a more objective and fair comparison: 2/
When calculating the compression ratio, analyze compressed data. Strangely, they decided to calculate a compression ratio on our uncompressed data.

(Promscale keeps a small fixed amount of uncompressed data for performance; at higher volumes this amount is minimal.) 3/
I can guarantee that our uncompressed data has a compression ratio of exactly 0. 🤷🏽‍♀️ 4/
Similarly, admit that their own compression is lossy, while Promscale’s is lossless. There is a big difference between lossy compression and lossless. Sometimes lossy compression is okay (eg JPG vs PNG image formats), as long as you know what you are getting. 5/
Comparing not just IOPS but also durability. Promscale by default requires higher IOPS, but in return offers strong guarantees that you won’t lose data. We fsync all commits to WAL by default, and return an acknowledgement to Prometheus’s write-request only after commit. 6/
This means that when Promscale tells Prometheus it stored a thing, it actually stored that thing.

Promscale also allows users to change this default, in case one desires lower IOPS with lower durability. 7/
VM by contrast doesn’t have a WAL, and as far as I know there is no solid guarantee of durability even after some time. VM maybe stores the thing. It’s the UDP of databases.

Again, perhaps an okay tradeoff (eg usage of UDP vs TCP), but one that should be made clear to users. 8/
Another example: VM claimed to measure how much memory we needed; what they actually measure is how much memory they configured. PostgreSQL is designed to use all the memory you configure it with as a page cache for queries. 9/
So, VM verified that our DB’s memory configuration variable did exactly the right thing. They even used nice Grafana graphs. Thanks! 10/
But seriously, why wouldn’t you want your database to use the memory you give it for caching? An interesting analysis would be the minimum amount of memory needed to support the workload, but that’s not what VM did (even though they probably thought they did). 11/
VM is also not transparent about the qualitative differences: Promscale supports both SQL and 100% standard-compliant PromQL. VM only supports a broken version of PromQL, which a third-party found featured <60% compatibility with PromQL: https://promlabs.com/blog/2020/11/26/an-update-on-promql-compatibility-across-vendors 12/
In addition, Promscale (but not VM) allows you to perform complex analysis, joining metric data with other relational data, using standard SQL visualization and AI/ML tools, supporting enterprise-grade security and permissions, etc. 13/
Benchmarking, done right, informs the reader of the tradeoffs various systems make (and how best to choose what's right for your system). Unfortunately, by hiding the true tradeoffs and design decisions made by these two systems, these benchmarks fail to inform the reader. 14/
The real shame here is that I think VM is actually a good piece of technology, with some trade-offs that some may find reasonable. But that gets hidden by this kind of questionable marketing (and general spamming its creators tend to do on other people’s forums). 15/
VictoriaMetrics tech /is/ pretty cool: the most impressive part is their careful optimization of Go and the resulting low resource usage. I can definitely see use cases for it in resource-constrained environments. 16/
The @PrometheusIO community deserves honest benchmarking. Let’s do better! 18/18
You can follow @cevianNY.
Tip: mention @twtextapp on a Twitter thread with the keyword “unroll” to get a link to it.

Latest Threads Unrolled:

By continuing to use the site, you are consenting to the use of cookies as explained in our Cookie Policy to improve your experience.