3 ms·
"the more important aspect of a db is ..." No. To you it's that. To me the ability to be able to easily recreate the state, any state the DB was in at any ti
by martinced 14y ago
"the more important aspect of a db is ..."
No. To you it's that.
To me the ability to be able to easily recreate the state, any state the DB was in at any time is much more important.
A big part of my job consist in asking DBA a dump of the production DB to PREPROD or DEV environments so that I can try to recreate the state at which the shit hit the fan. And it's more than painful. And it's not my fault: I'm inheriting apps that I have to maintain/bugfix/enhance. And it's hell. Mutability hell.
One day CRUD DB shall be regarded as dumbly as languages in which any variable can be globally modified, from any thread. We'll look back at these CRUD DB and wonder how stupid we've been not to listen earlier to the ones advocating a saner world.
You really should listen to several of Rich Hickey's talk because his ideas are more than sound and comes from a lot of Real-World [TM] immense pain suffering.
All the time he says: "Have you ever ...? Not fun!" he's 100% on spot. He's language and DB are the most pragmatic things ever.
It's amazing.
- ucee054 14y agoYou can right now rewind a database to an arbitrary point in time right off the transaction log. The feature exists in the technology, the vendors just haven't productized it. What does that tell you? That the demand for your use case is commercially insignificant.
- weavejester 14y agoOr it's more difficult to apply in practise than you believe. Being able to create a duplicate of the database at a past date for debugging purposes would have been extremely useful in my previous job.
- pradocchia 14y agoConceptually this is not so different than a regular database and its log. The log is the immutable, write-only part, and the tables are the current representation. Datomic moves the current representation further up the stack.
- freework 14y agoYou can implement an immutable database system with SQL databases today. For instance, just design your application to only add new records, and not to issue any updates. Why is an entirely new database system needed?
- chongli 14y agoDatomic does a lot more than just avoiding updates/deletes. It splits the database into multiple parts. The transactor doesn't do any data storage. The clients handle all their own query locally. This means that the transactor (the only bottleneck in the system) does not have to handle any queries or storage and can spend 100% of its time handling write transactions. All other components of the system are trivially cacheable and scalable. The other big advantage is the concept of "the database as a value". As a client, you can easily obtain the database as an immutable value right inside your application. This allows you to do all the queries you want without affecting anyone else.