- cross-posted to:
- programmerhumor@lemmy.ml
- cross-posted to:
- programmerhumor@lemmy.ml
This is literally me at every possible discussion regarding any other RDBMS.
My coworkers joked that I got paid for promoting Postgres.
Then we switched from Percona to Patroni and everyone agreed that… fuck yes, PostgreSQL is the best.
I used to agree, but recently tried out Clickhouse for high ingestion rate time series data in the financial sector and I’m super impressed by it. Postgres was struggling and we migrated.
This isn’t to say that it’s better overall by any means, but simply that I did actually find a better tool at a certain limit.
I’ve been using ClickHouse too and it’s significantly faster than Postgres for certain analytical workloads. I benchmarked it and while Postgres took 47 seconds, ClickHouse finished within 700ms when performing a query on the OpenFoodFacts dataset (~9GB). Interestingly enough TimescaleDB (Postgres extension) took 6 seconds.
Insertion Query speed Clickhouse 23.65 MB/s ≈650ms TimescaleDB 12.79 MB/s ≈6s Postgres - ≈47s SQLite 45.77 MB/s1 ≈22s DuckDB 8.27 MB/s1 crashed All actions were performed through Datagrip
1 Insertion speed is influenced by reduced networking overhead due to the databases being in-process.
Updates and deletes don’t work as well and not being able to perform an upsert can be quite annoying. However, I found the ReplacingMergeTree and AggregatingMergeTree table engines to be good replacements so far.
Also there’s !clickhouse@programming.dev
deleted by creator
If you can, share your experience!
I also do finance, so if there is anything more to explore, I’m here to listen and learn.
Clickhouse has a unique performance gain when you have a system that isn’t operational data that is normalized and updated often. But rather tables of timeseries data being ingested for write only.
An example, stock prices or order books in real-time. Tens of thousands per second. Clickhouse can write, merge, aggregate records really nicely.
Then selects against ordered data with aggregates are lightning fast. It has lots of nuances to learn and has really powerful capability, but only for this type of use case.
It doesn’t have atomic transactions. Updates and deletes are very poor performing.
For high ingestion (really high) you have to start sharding. It’s nice to have a DB that can do that natively, MongoDB and Influx are very popular, depending on the exact application.
I have a colleague like that too, and then the other camp that loves MySQL.
Why do you like postgres
I made several lengthy presentations about many features, mainly those that are/were missing in MySQL.
In short, MySQL (has been) shit since its inception, with insane defaults and lacking SQL support.
After Oracle bought it, it got better, but it’s catching up with stuff that Postgres has had for 20+ years (in some cases).
Also, fuck Oracle, it’s a shit company.
Edit: if I had to pick the best features I can’t live without, it would be ‘returning’, copy mode and arrays
As a complete newb to Postgres, I LOVE arrays.
Postgres feels like all of the benefits of a database and a document store.
Yeah, that was the goal.
First make it feature-complete document-oriented database, then make if peroformant.
And you can feel the benefits in every step of the way. Things just work, features actually complement each other… and there’s always a way to make any crazy idea stick.
I usually tell people running MySQL that they would probably be better off using a NoSQL key-value store, SQLite, or PostgreSQL, in that order. Most people using MySQL don’t actually need an RDBMS. MySQL occupies this weird niche of being optimised for mostly reads, not a lot of concurrency and cosplaying as a proper database while being incompatible with SQL standards.
incompatible with SQL standards.
Wait… Wait a minute, is that Oracle’s entrance music‽
Sure, once you make the move it’s great. It’s just that it takes time and resources to actually make the move
I mean, with mysql_fwd, I migrated the data quickly, and apart from manual ‘on duplicate update’ queries (or rare force index) it works the same.
What’s that? Did you say you needed an RDBMS that can also handle JSON data? Well have I got good news for you!
Mysql / Mari can handle it too! Just use BLOB 🤣
pg can actually query into json fields!
And you can add indexes on those JSON fields too!
Kind of. I hope you don’t like performance…
The performance is actually not bad. You’re far better off using conventional columns but in the one off cases where you have to store queryable JSON data, it actually performs quite well.
Quite well is very subjective. It’s much slower than columns or specialized databases like MongoDB.
Sure, if you use a field often it is most likely better to extract it into a column with auto-updates from the JSON data.
But you have to tune it and see what is best for your use case. Just saying that you can add indexes to JSON fields as well!
Mysql can too, slow af tho.
oh i didn’t know that. iirc postgres easily beats mongo in json performance which is a bit embarrassing.
Holy, never knew, and never would expect. Postgres truly is king.
As a (data) scientist I am not super familiar with most databases, but duckdb is great for what I need it for.
Things happen magically with docker. Container needs PostgreSQL? Expose the port, define a volume, username and password, connect service to that port, forget PostgreSQL’s existence until data corruption.
Not data corruption, but I replaced by mistake my .env file for authentik, containing the password for the postgresql database…
Cue a couple existential crisis for not having set up backups, thinking about nuking the whole installation, learning about postgresql, and finally managing to manually set another password.
Yeah, I feel several years older now…
forget PostgreSQL’s existence until data corruption.
Oh, so about 2 hours then LMAO
…ok, I’m morbidly curious. How did you manage to do that?
first thing i’d ask it is how to pronounce SQL
Yup, and it’s S-Q-L not sequel (🤢)
squeal gang rise up!
Sequel with external collaborators.
Squeal with the homies.
15 years ago I called it S-Q-L and then I was told that it’s wrong and it’s “Sequel”, and they kept calling it Sequel in college so for the past 10 years I’ve called it Sequel, My-Sequel, Sequel-lite, Postgres, transact-sequel, etc. Now y’all are telling me it’s not Sequel
That’s easy, but PostgreSQL is pronounced Postgres-Q-L.
No need. It’s the best DB… Until you need something portable
My laptops runs postgres, but it is still pretty portable
What do you mean by “portable”?
Just if you need to be able to take it with you.
The whole point of a database is that you leave it where it is though
I think the OP is trying to talk about SQLite, so yeah, he could really be talking about carrying it on his phone.
But it’s just such a weird word to use there that I can’t really be sure.
Ohhhh right, that’s the base part right?
I’m running it on a raspberry pi, how much more portable could you need?