51 karma · joined October 2, 2023
You can take a look at the 5800X3D and how it was at its cheapest about 2 years ago when AMD was winding down production and Zen 4 had been launched.
That only scales if the coin goes up in value due to the extra "interest". Which isn't impossible but there's a limit, and it's more often to happen to smaller coins.
With UUIDv7 the creation time is always leaked without any sampling. A casual attacker could quite easily lookup the time and become motivated in probing and linking the account further
There's always a large overhead of adding something new and it's always the experienced devs on the project that know where the right balance is.
There's been community forks of it since then that I switched to and will continue to use instead. Grouping tabs at the top is much worse UX than an entire page you can drag and drop around, and blatantly copying Chrome.
Generally what you need to do there is have some column that can be sorted on that you can use as a high watermark. This is often an id (PK) that you either track in a central service or periodically recalculate. I've worked at places where this was a timestamp as well. Perhaps not as clean as an id but it allowed us to schedule when the item was executed. As a queue feature this is somewhat of an antipattern but did make it clean to implement exponential backoff within the framework itself.
- Docs and guidelines on migrations would have been written
- Some level of approval and review is required before execution
These are things that isn't really postgres specific, any company that doesn't have those is going to be a nightmare.
A bit more work yes that could be simplified, but fully supported if you control the stack.
TSMC's 7nm where they jumped ahead of Intel used quad-patterning DUV which is also what Intel was trying. TSMC only started to introduce EUV at 6nm and 5nm which is when ASML had made great breakthroughs and vastly increased WPH. And even then EUV was only used sparingly at the most critical layers. Because other problems were still being solved like uptime and compatible pellicles.
If you want to blame Intel's decisions then look at their use of cobalt contacts or COAG use. They tried to do too much at 10nm when shrinks were getting harder.
If you forward emails automatically then you'd lose this accreditation. I suppose the solution would be an accreditatiom domain that forwards to your uni address only, but that's extra work now.
When it comes down to semantic diffs I'm more interested in something like the Semantic Patch Language by Coccinelle. Being able to represent mundane refactorings across an entire codebase in a few lines seems great. And it unifies intent with the diff.
For queue tables you can even use `CYCLE` to do that automatically.
This is problematic if you try to depend on the ordering. Nothing is stopping some batch process that started an hour ago from committing a value 100k lower than where you thought the sequence was at. That's an extreme example but the consideration is the same when dealing with millisecond timeframes.
We do use a custom uuid generator that uses the timestamp as a prefix that rotates on a medium term scale. That ensures we get some degree of clustering for records based on insertion time, but you can't go backwards to figure out the actual time. It's still a problem when backfilling and is more about helping with live reads.
For me the bigger thing is the randomness. A uid being random for a given row means the opposite is true; any given index entry points to a completely random heap entry.
When backfilling this leads to massive write amplification. Consider a table with rows taking up 40 bytes, so roughly 200 entries per page. If I backfill 1k rows sorted by the id then under normal circumstances I'd expect to update 6-7 pages which is ~50kiB of heap writes.
Whereas if I do that sort of backfill with a uid then I'd expect to encounter each page on a separate row. That means 1k rows backfilled is going to be around 8MB of writes to the heap.
But at a certain scale that starts taking too long and a bigint column would be quicker. Or you decide you need to periodically scan the table in batches for some reason. Perhaps to export the contents to a data warehouse as part of an initial snapshot.
You can skip enumerating these possibilities by having a bigint surrogate key from the get go. There's other advantages as well like better joins and temporal locality when the bigint index can be used rather than the uuid.
As we saw with the Blizzard acquisition the UK CMA will bend to international pressure if it's the only one holding out.