The VictoriaMetrics Observability Blog

Go Singleflight Melts in Your Code, Not in Your DB

What singleflight does is ensure that only one of those goroutines actually runs the operation, like getting the data from the database. It allows only one ‘in-flight’ (ongoing) operation for the same piece of data (known as a ‘key’) at any given moment.

Go sync.Cond, the Most Overlooked Sync Mechanism

In Go, sync.Cond is a synchronization primitive, though it’s not as commonly used as its siblings like sync.Mutex or sync.WaitGroup. That said, as a Go engineer, you don’t really want to find yourself reading through code that uses sync.Cond and not have a clue what’s going on.

The Rise of Open Source Time Series Databases

Time series databases are essential tools in any software engineer’s toolbelt. Their development has been shaped by user needs and countless open source contributors, leading to the healthy ecosystem of options we see today. In this article, you’ll see how time series databases came about, and why so many are open source.

Go sync.WaitGroup and The Alignment Problem

When we’re spinning off many goroutines to do their thing, we want to keep track of them so that the main goroutine doesn’t just finish up and exit before everyone else is done. That’s where the WaitGroup comes in. Each time one of our goroutines wraps up its task, it lets the WaitGroup know.

Open Source Software Licenses vs Revenue Growth Rates

A software license change may have a short term impact on revenue, but the long-term damage can be consequential and take time to fix. Read our CTO’s take on open source software licenses vs revenue growth rates.

VictoriaMetrics Cloud reduces monitoring costs by 5x

We’re happy to announce VictoriaMetrics Cloud, a hosted monitoring platform and managed service for metrics that allows organizations to monitor and store large amounts of time-series data, without having to run the underlying infrastructure.

Go Maps Explained: How Key-Value Pairs Are Actually Stored

Map is a built-in type that acts as a key-value storage. Unlike arrays where you’re stuck with keys as increasing indices like 0, 1, 2, and so on, with maps, the key can be any comparable type.