1,882 karma · joined August 30, 2009
So, "events" in Datomic are structured and Datomic uses them to give you query powers, they're not opaque blobs of data.
But if you have a handful of app servers, it's much more reasonable. The relatively low scale back-office systems I tend to work with typically has 2, max 3. Also, spinning up an extra instance that does some data crunching does not affect the performance of the app servers, as they don't have to coordinate.
There's also the performance and practicality benefits you get from not having to do round-trips in order to query. You can now actually do 100 queries in a loop, instead of having to formulate everything as a single query.
And if you have many different apps that operates on the same DB, it becomes a benefit as well. The app server will only have the _actual_ working set it queries on in memory, not the sum of the working set across all of the app servers.
If this becomes a problem, you can always architecture your way around it as well, by having two beefy API app servers that your 10s or 100s of other app servers talks to.
Writing in a single thread removes a whole host of problems in understanding (and implementing) how data changes over time. (And a busy MVCC sql db spends 75% of its time doing coordination, not actual writes, so a single thread applying a queue of transactions in sequence can be faster than your gut feeling might tell you.)
Transactions as first-class entities of the system means you can easily add meta-data for every change in the system that explains who and why the change happened, so you'll never again have to wonder "hmm, why does that column have that value, and how did it happen". Once you get used to this, doing UPDATE in SQL feels pretty weird, as the default mode of operation of your _business data_ is to delete data, with no trace of who and why!
Having the value of the entire database at a point in time available to your business logic as a (lazy) immutable value you can run queries on opens up completely new ways of writing code, and lets your database follow "functional core, imperative shell". Someone needs to have the working set of your database in memory, why shouldn't it be your app server and business logic?
Looking forward to see what this does for the adoption of Datomic!
Classical doesn't really fit that well into a schema, since you have composers, performers, and then under performers there's soloist, or multiple soloists, which orchestra, which conductor, and so on.
And it would also be nice to have things like "show most popular recordings of Beethoven's 5th".
Not that I think it's a bad decision, but I wish they somehow managed to break Conway's Law and enhance Windows itself by fixing the file system speed issues as well as somehow making NT/Windows processes fork instantaneously just like on Linux :)
> "that's really up to Microsoft," [Craig Federighi] said. "We have the core technologies for them to do that, to run their ARM version of Windows, which in turn of course supports x86 user mode applications. But that's a decision Microsoft has to make, to bring to license that technology for users to run on these Macs. But the Macs are certainly very capable of it."
From: https://arstechnica.com/gadgets/2020/11/we-are-giddy-intervi...
Exclusivity deal rumor: https://www.xda-developers.com/qualcomm-exclusivity-deal-mic...
E.g. Amazon already bills me through some Norwegian entity of some kind, to get VAT done right etc.
If they had servers in Norway, I suppose it would have been possible to proxy everything - not just billing - in AWS Norway through this sub operator?
It's not that I doubt that astrophysicists take this into account, I'm sure they do! But when we see an "image of a black hole", that's really a gazillion data points from a multitude of different observatories, processed by human made algorithms with human made models and biases, and it happens to look just like we expected - how do we know it's not just our assumptions that made it into the processing and modelling?
Again, I'm sure every astrophysicist ever has thought about this and knows how it's handled, so it's not a criticism. I'd just love to read more about it, as a layperson :)
I suppose this one is from our perspective?
How we know that the arms of the milky way are bent when viewed "from above"? Imagine if they were straight lines when viewed from above. From our perspective, they would appear to be spiraling arms, since the light at the far end of the arm would take longer to reach us.
I'm not doubting astrophysics here, I'm just a layperson that wonders how these things are properly taken into account.
Other peoples world views are valid.
It's so easy and so human to criticize other people's views, filtered through my own world view. But then I'm really only criticizing own interpretation of their view.
For me, this is a lesson that almost can't be repeated enough, because I tend to slip into forgetting about it.
But good for you if you find it obvious and banal :)
For example, you used to have to manually set RCU/WCU to a high number when you expected a spike in traffic, since the ramp-up for on-demand scaling was pretty slow (could take up to 30 minutes). But these days, on-demand can handle spikes from 10s of requests a minute to 100s/1000s per second gracefully.
The downside of on-demand is the pricing - it's more expensive if you have continuous load. But it can easily become _much_ cheaper if you have naturally spiky load patterns.
Example: https://aws.amazon.com/blogs/database/running-spiky-workload...
This reminds me of how App Store used to ban game emulators interpreting ROMs downloaded from the internet, while at the same time allowing XML parsing.
Does it really matter if the interface you're talking to over the network is code written by another team, or data written by another team? I suppose implementation details are often hidden away in data stores, but does it have to be that way?