78 comments

[ 0.30 ms ] story [ 8.3 ms ] thread
That's a lot of ®, curious how ClickHouse® Inc. is treating the use of its name by others ... Hopes it's not like Oracle with JavaScript
It's defensive language for sure, i don't know how much it adds of protection in reality, but i nonethelesss sympathize with the author if he feels the need to protect himself that way or signaling the risk he takes.
They sell managed ClickHouse so I suspect it’s a precaution
From the article: > Let me clarify something: we created Tinybird ClickHouse because we wanted to build an analytics application without all the pain I'm describing. We do not offer ClickHouse® hosting; we solve the analytics problem

EDIT: I'm wrong, their home page clearly states: "Ship fast over a Managed ClickHouse®", though I don't really understand the difference between a managed clickhouse and clickhouse hosting...

Maybe you bring the hardware from any hoster, and they manage the service.
> Tinybird is not affiliated with, associated with, or sponsored by ClickHouse, Inc. ClickHouse® is a registered trademark of ClickHouse, Inc.

Yeah, it sucks they need to do this. If I was a visitor to their website, I'd immediately want to know what ClickHouse, Inc. is and you'd realize ---> it's managed clickhouse, direct competitor... why would I use the one that needs all the ®'s

It's in fact two ®'s too many: even the "they don't like it" link to the GitHub issue has them.
As an aside, I was stuck when turning on the Fulham v Crystal Palace game last week to find that Fulham have ClickHouse on their shirts this year, and Palace have Temporal AI. Talk about my worlds colliding.
I just wish Amazon would offer it as an RDS DB; it'd make my life so much easier.
You can use actual CH Cloud on AWS?..
I'm aware; unfortunately that then leads to "must have a vendor approval" and a lot more process. If it were RDS, then it'd just be provision and done.
Doesn't aws marketplace help with that?
No, because the issue is navigating legal agreements with your vendors, not the ease of deploying. With AWS Marketplace you are making a new legal agreement with the vendor of the product, not with Amazon.
AWS acquired DuckLabs recently, there is a chance they will release a product competing with CH/Snowflake as a new RDS offering
They won't be able to resist the temptation of ruining it before launch by deciding to tie it into AWS Glue
So how is clickhouse supposed to make money and continue to develop the product if you will only buy from AWS?
They have a partnership IIRC, they could pay ClickHouse like they do many others.
Do any two teams actually operate it in anything like the same way though?

What I saw of it, especially some years ago, was it was highly particular, and everyone had their own odd habits built around running it, ingestion, querying, everything, to the point I suspect there are a non trivial number of companies using it where it is actually the core operational expertise of the company, despite them all appearing to be in totally different domains.

You can use ClickHouse cloud to host it on AWS.

But given the majority of use-cases of CH, AWS can be quite expensive.

Using BYOC management reduces the costs significantly. The big cost in analytic SaaS offerings is generally compute, which vendors mark up significantly. (They keep margins low on storage.)

Disclosure: My company Altinity offers BYOC management of ClickHouse.

> For loads with over 20k rows/s and people pushing changes, you may need a full-time person to handle the cluster and take a look at the crazy queries people are going to write.

I think this was a benefit of DBA culture in previous eras. Not that the DBAs were specifically necessary to write good queries (often they'd need to work with application teams to guide them towards schemas/behavior that worked well) or to maintain the database (managed DB offerings obsolete a lot of this work), but because they functioned as gatekeepers and rate-limiters of what queries and schemas could exist.

In that mode, DBAs functioned a bit like a human/process version of a thin microservice wrapping database access functionality. A big benefit was that the rate of change of queries/schema changes/access patterns was controlled and had a higher probability of being reviewed and thought about by humans before it went live. This also resulted in an increased end-database-user culture of trying to make existing schemas/query patterns work before jumping straight to bespoke access patterns. That culture's not what you want as e.g. a startup or pro-rapid-big-refactors shop, but it is what you want when your DB reliability needs or query rate/dataset size are high.

I don't think it's a given that a gatekeeper team is worth the overhead and cost; that's situational. I do think that the code version of that team (aforementioned microservice that wraps DB accesses/schema changes and nothing else) is usually not worth the cost. In my experience, that pretty much always reduces reliability and free performance gains that come from using direct DB clients from user code.

Instead we're... listen to this... we're going to take a software developer right. Just a normal developer right. We're going to make them be the database expert right. And the cloud expert. And we're going to put them on call. We're going to have them debug linux logs, and optimize our AWS costs. They'll be there for client escalation work. And big sales calls. From time to time we'll even have them do front end work.

And get this. We pay them the exact same.

yes, that was the cloud and "devops" promise. ..or what it just another sham?
>Instead we're... listen to this... we're going to take a software developer right. Just a normal developer right.

Maybe I'm old, and I am, but I just can't get past this point with such annoying writing. Like if you actually spoke like this people would hate you.

I have the same with the "if only there was a ..." sarcastic rebuttals. They belong 15 years ago and even then they were tiresome
I think the writing and the voice are both brilliant, in this case.
I read this in Steve Jobs voice. But maybe I was supposed to use Dr. Ian Malcolm instead?
Eerily accurate how it works these days, I wish you weren't correct. I met a DBA wizard (he looked like the creator of c++) at a banking IT dept and this guy intuitively sensed what you needed and how its done.
Instead of paying them a salary let’s just take that salary and use it for AI tokens.
And don't forget contract management with the supplier, L1-L2-L3 support, all in one, and integrating as the supplier is useless and your contract is shit.

Oh and you will do also business analysis with the business as claude is too complex for them (read any version of the nocode initiative).

> And get this. We pay them the exact same.

Why are you complaining? You should be grateful of the learning opportunity not everyone gets to have. Sure, we pay you peanuts for it. But, it's ultimately for your own good. Don't mind my yacht and Ferrari, though.

That kinda how moving from programmers + sysadmins to devops looks like.

Managers went happy coz now they don't need to have hire sysadmins, while in reality they hire sysadmins, call them devops, and have them know some programming on the side.

And the "savings" from not having onprem infrastructure are burned on expensive cloud and debugging cloud blackboxes

I'm going to go out on a limb here and say that having a tuned LLM would probably be able to eliminate the need for a full time DBA query analyst.

Disclaimer: I've never managed a ClickHouse cluster, let alone one of this size.

hello we still exist :)
When replaying customer queries against the next version, how do you compare results for queries using now() or approximate aggregates? Curious how you separate expected differences from actual regressions.
Where does ClickHouse fit between ElasticSearch, Pinot, TrinoDB, or just plain Spark? These are very different tools but I’m curious to know if any one has already compared them and can share some thoughts regarding their maintainability, QPS, latency, etc...
The relationship depends on the use case and is not linear. For web analytics and log management ClickHouse is a great replacement for ElasticSearch, for example.
ClickHouse I would say is more for analytics and data warehouse types of loads. So not a direct competitor to those tools except maybe for Pinot.

It is very easy to ingest data into CH. We connected exchange topics and it just worked with zero code.

But the thing with CH is that it is pretty much a Russian product so you should not use it for production anymore.

I would like to see some sources on your claim about it being Russian. It is incorporated in the US with most developers in Amsterdam.

After the invasion of Ukraine they stayed silent for a while but that was because they needed to allow there developers to get out of Russia. Many of them are Ukrainians including the CTO and founder. As soon as it was safe for there team they took a very firm stance against Russia with Ukrainian flags on the website and written statement from the team.

I am not aware of any Russian influence currently.

It was created at Yandex, the biggest techcorp in Russia, by Alexey Milovidov among others. He is still the CTO there. So I will stay away. There are many good alternatives to pick.
Did you ditch nginx for the same reason?
We’ve come at a time in which we fear exploring projects like Apache Doris because we fear that OSS might be used in malicious ways by state-backed actors.
You have to make a distinction betweet query engines, datastores and batch compute.

Trino is a federated query engine and lacks secondary indices, but can do all sorts of big scale stuff like distributed merge sort and spool to disk. The typical use case is querying your data lake (say Iceberg or Hive catalog with a bunch of Parquet format files in S3, and a separate ingestion system). It is extremely mature and well understood with lots of extensions.

ClickHouse, Pinot, StarRocks, and Druid are full on OLAP datastores that can handle varying rates of ingestion (Druid is by far the slowest, the rest are fast like 100kqps writes per table is nothing fast). ClickHouse is the most used but sucks at joins and stateful data. Druid, Pinot and StarRocks can do joins and handle stateful data. In my experience Druid is the worst, Pinot is relatively immature and has minimal industry traction, and StarRocks is the most mature and has lots of traction, both in China and in ethnic Chinese analytics teams in US companies. They can all support high qps for trivial queries (thousands of simple queries in tens of ms, given enough hardware), but depending on data partitioning it can get slow quick handling a bunch of concurrent queries that are scanning the same physical servers. But people have PostGres vertically scaled to 100kqps plus and 100+TB too. In principle the use case is dashboards and charts for your real time UI; tier down to S3 with Trino for more flexible, bigger queries.

The cool thing about all these systems (the fast OLAP) systems is that they are all converging with Trino where they are moving their storage layer to object storage, which is way more flexible. No more hot storage nodes, and infinite storage. And then use Paimon or Iceberg v3 as your data lake and you get near real time stateful storage.

ElasticSearch is amazing but is really optimized for full text search and aggregations, and while it can scale to huge sizes, it does not give you joins and forces you into a very particular approach to materialized views. Also, not columnar... and nested documented dont scale well in my experience.

Spark on the other hand is just your old batch compute framework at this point. It is very flexible, and you are writing a series of SQLish transformations, but for many simpler use cases Trino is much faster and easier to use. Way bigger learning curve than just writing SQL and hoping your query engine has a good optimizer!

Thanks so much for sharing your experience!
> "Every single company handling ClickHouse® struggles with ingestion."

Very true. Reading about "too many parts" gave me flashbacks.

(previously owned ingestion into CH at PostHog, no longer)

Scaling during that era was fun. Slack was non-stop:

:oof-1: CH needs more disk to keep up with merges.

We ran CH way too lean in those days.

I’m operating a terabyte-scale Clickhouse - but only because I left Langfuse running for a few months on a MacBook :)

But seriously Clickhouse does love disk space.

But on the same time it is super efficient with it compare to other solutions. Kind of efficient for application logs for example.
At first when I read this, I was like "Why does The Onion's ClickHole site need so many servers?"
I cocked an eyebrow more than once reading this.

> A quick note about HTTP: ClickHouse® offers a TCP connector with a native protocol, but we don't use it. It does not offer many advantages for the type of application we build

This needs more elaboration. One of the major goals of running a ClickHouse cluster is to provide low-latency queries; a persistent TCP connection removes the need to re-establish a new connection for each query and thus reduces overall latency in line with CH goals. So I really didn't understand this.

> ClickHouse® open source faces a significant challenge: limited support for cloud storage. Modern OLAP databases and data systems should leverage cloud storage for cost efficiency and independent scaling of compute and storage resources. Snowflake established this standard over a decade ago, and ClickHouse® (open source) lags behind

ClickHouse writing to NVMEs is exactly how they provide their latency and performance advtanges. Writing and reading to object buckets is fundamentally slower with multiple network hops to reach what is, in this architectural context, a storage server for your storage server. If you really need far more storage, and are willing to sacrifice query latency to get it... why not architect for one of the OLAP databases, like Snowflake, where that was part of their architecture from day one?

> Because you are testing your analytics queries, right?

No? Half the point of an OLAP database is to let users write their own queries. If we knew the queries ahead of time, we probably wouldn't need an OLAP database, and instead use a less-flexible streaming architecture storing intermediate calculations so as not to need to pay for petabyte-scale storage. The expected value from paying for all of that storage is to support not knowing which queries will be written by users.

> Every single company handling ClickHouse® struggles with ingestion... Backpressure mechanism: Some people put Kafka before ClickHouse®. This does the job

The whole trade-off that you make with column-store databases like ClickHouse (instead of row-store databases like Postgres) is that inserts are slow for column stores (whereas they are fast for row stores). Inserts happen slowly, asynchronously, in the background. It is the price you pay for fast analytics queries. This is why OLAP databases have a latency lag and do not show real-time results. This is why stores like Kafka are usually a good fit, you let Kafka hold onto new data until batch insertions can catch up. If you do need real-time queries, you don't write to an OLAP directly; you write to a stateful frontend that answers the query itself, then streams out historical data from the OLAP that was successfully written there. And the first thing you do in a "I want to have my cake, and eat it too, and yes I'm willing to pay for the privilege" architecture like that is... to keep the persistent TCP connections, because that's really low-hanging fruit.

You can also keep persistent connections with HTTP to avoid the overhead, which is what Tinybird does. (I used to work there)
But ClickHouse has its own concept of sessions that is completely independent of HTTP:

https://clickhouse.com/docs/concepts/features/interfaces/htt...

If you throw something like nginx in front to try to better guarantee the "balance" part of load balancing, as an improvement over TCP connections that are sticky to the initial server they reach, then you're asking different CH servers to handle the same original session. So what did the load balancer give you?

Now, CH added session-aware routing for the HTTP client... but it's a beta feature, and it requires an Enterprise license anyway: https://clickhouse.com/docs/products/cloud/features/infrastr...

Why go against the tide?

A couple weeks ago I was scanning Github for repos with frequent commits to identify so-called "software factories" and was surprised to see clickhouse. I wouldn't touch it with a 10ft pole considering how quickly they're merging code into main. I'm talking 50+ commits per day and thousands of AI generated issues and triages. Check it out for yourself https://github.com/clickhouse/clickhouse
Just wait till you find out how many commits per day to a product are occurring to most of the SaaS you rely on.

Clickhouse has a managed SaaS and it's their primary product. They have a lot of engineers. They're going to do a lot of commits.

The CTO himself reported 600 commits and 300 PRs each day. And they can do so because they have a massive CI [1]:

> Every day CI runs about 20..80 million tests in 600 commits and 300 pull requests

> Last year, ClickHouse spent 360 years of machine time for CI

I am no user of CH so I can't talk about their product. But we are talking about a company with 686 employees as per their LinkedIn, where ClickHouse is clearly the core of their business. Considering all of this, is 50+ commits a day that much?

[1] https://presentations.clickhouse.com/2026-openhouse-sf/great...

Complex systems have complex operations and problems. I think isolating the read and write workloads and separating the read queries by departments or even users is a distinct possibility especially with technologies like DuckDB.
That is exactly where all the high scale stuff like Trino and StarRocks have gone (and ClickHouse can use S3 as storage too). However, the problem you run into is when you want to index stuff- secondary indices are tightly coupled to the query engine, so in practice you arent going to use StarRocks to write and index data to the object store, and then use ClickHouse or Trino to query it. I think it would be a useful development to decouple writes and reads, but this requires a common indexing scheme, and then once you have this standard, in principle lots more indexing plugins can be written and all compatible query engines can use them. Apache DataFusion is probably the right framework to build off of.
Valid. We need to innovate on this and re-think secondary indices. Storage is cheap.
My dude, you only need to put the registered trademark symbol after the first occurrence of the mark. You® don't® need® to® put® it® after® every® mention® of® Click®House®™™®™®™®™®™.
it's kind of an internal joke, ClickHouse Inc lawyers are a pain in the ass with their letters and every time you forget a (r) somewhere, they write.
About 20 years ago the titans of the database fields told us they wanted to put ML in the brain of databases. I think agentic databases are the future.
I don’t think it’s necessarily the use case changed but maybe the constraints. Streaming directly to Clickhouse is a great solution. Recent approaches I’ve seen though buffer data as parquet in object storage first, and read data from there. Im not sure if CH would be the preference
Yeah that's cool but your blog won't load on my hardened Firefox:

- Uncaught TypeError: navigator.sendBeacon is not a function

- Uncaught (in promise) ReferenceError: WebAssembly is not defined

Not sure why a blog entry needs WebAssembly but I'll give it a pass.

Sometimes I think you guys run your browser like this just to make these performative comments
What kind of systems are generating enough useful analytics data to ever scale to petabytes in the first place?

It's difficult (for my bird brain, at least) to imagine a scenario where such volume of analytics data would ever be necessary.

It's multiple records per user over time. See something like posthog. One interaction with a form can generate 10-15 events. eg enter page, click link with text "settings", change input, clicked input, etc. So active users can generate 15-150 events per session, each ~1kb to 2kb in size.

The reason to store that data is to be able to build analytics and funnels you didn't anticipate and construct them retrospectively. You can of course save massive amounts of storage by building rollups and aggregating, but that prevents you from being able to eg change the funnels and see the funnel in the past.

10M users × 100 events/day × 1KB ≈ 1TB/day. A couple years gets you into PB range.

The other obvious thing is logs. Being able to have a vulnerability then go back in time and see if you were exploited is super valuable. See eg log4shell: if you kept records, you probably could go back and see if you'd been exploited.

they are working with CDNs and others companies like Vercel, localstack or canva and those companies generate a lot of (really a lot) data.

In fact, they have solutions teams to check with the clients what they are storing and what they really need to store, how to consume it, etc.