pgDash, a PostgreSQL monitoring product, publishes tutorials on Postgres partitioning, sharding, indexes, replication, and release features.
HN commenters link it for practical Postgres examples, such as hash partitioning and built-in sharding in version 11, which helped one find an answer.
I wish them well but fear this won't work out for them. This sounds like a smart move until you realize that they are just one of many players in a crowded market and that this actually decreases their value proposition for end users and external contributors. Having less of both is bad news for an OSS project, no matter how you spin it.
The way I see it this type of company has a short term value that derives from them being first (more or less) to market with whatever it is they do well. In this case, their thing is having a sharded/clustered db that can replicate across datacenters and with serialized transactions.
Awesome, that's a great thing to have and it will take other databases a while to get there. But they will eventually and that matters. This stuff commoditizes quite rapidly. It's based on published research by Google half a decade ago and people can look at the source code and algorithms. It's just a matter of time before somebody else figures out how to replicate what they do in some other product. Somebody like e.g. the postgresql developers: https://tapoueh.org/blog/2018/07/postgresql-concurrency-isolation-and-locking/ and https://pgdash.io/blog/postgres-11-sharding.html. It's probably not perfect yet but they are obviously heading the same direction and there's a notion of good enough and diminishing returns.
When it does catch up, it all reverts to which is the best product in the market. Part of that is features but another part of that is a robust…
I like this approach and have successfully used both table partitioning [1] and (if necessary) foreign data wrappers [2] to keep my main database small and fast. There is a pretty old blog post that clued me into it [3]. It works really nicely, allowing for such things as old data stored on spinning disks and newer data on NVMe drives. You can query the main table directly with query parameters that limit which partitions you hit, or you can query a partition table if you know that's where all the data resides. It's pretty awesome!
[1] https://www.postgresql.org/docs/current/ddl-partitioning.html
[2] https://www.postgresql.org/docs/current/ddl-foreign-data.html
[3] https://pgdash.io/blog/postgres-11-sharding.html
PostgreSQL directly supports table sharding. https://pgdash.io/blog/postgres-11-sharding.html
Schema evolution is supported by pretty much every ORM you'd care to use; it's not the job of the SQL database to handle the migration. I'm using Prisma and you literally change the software spec for the schema and say "migrate", and it creates the migration SQL and applies it to the Postgres DB programmatically. That gets you deterministic schema evolution and not the "my schema isn't actually reliable" that NoSQL/no-schema databases rely on.
And then you have CockroachDB/YugabyteDB that give you extreme horizontal scalability, with full PostgreSQL compatibility...
And bang, the last reason to use MongoDB vanishes.
This is a great initiative. Benchmarking managed services is notoriously tricky due to varying configurations and 'black-box' optimizations. For anyone looking to run these benchmarks on their own or wanting to dive deeper into the why behind the numbers, pgmetrics (https://pgmetrics.io) is a fantastic open-source tool. It collects a massive amount of internal PG stats into a structured JSON format, making it easy to see exactly what's happening during a load test. For a more persistent and visual way to track these metrics across different providers, pgDash (https://pgdash.io) is built on top of that same data.
Does anybody know where I can find an example of hash partitioning? I see it mentioned here in the docs but am having trouble finding an example: https://www.postgresql.org/docs/11/static/ddl-partitioning.html
edit: Found an example here: https://pgdash.io/blog/partition-postgres-11.html
Followup question: Is there a way to re-partition? Say, if your data grows and you want to split the data up further?