I was directed by Ben Tyler (elixir meetup Amsterdam, he gave an excellent talk there) to this interesting paper “immutability changes everything”. There are even immutable filesystems!
Designs are driving towards immutability. We need immutability to coordinate at ever increasing distances. We can afford immutability given room to store data for a long time. Versioning gives us a changing view of things while the underlying data is expressed with new contents bound to a unique identifier.
Copy-on-Write: Many emerging systems leverage copy-on-write semantics to provide a façade of change while writing immutable files to an underlying store. In turn, the underlying store offers robustness and scalability because it is storing immutable files. For instance, there are many key-value systems implemented with log-structured merge trees (e.g. HBase, BigTable, & LevelDB).
Clean Replication: When data is immutable and has a unique identifier, many different challenges with replication are eased. There’s never a worry about finding a stale version of the data because there are no stale versions. Consequently, the replication system may be more fluid and less picky about where it allows a replica to land. There are fewer replication bugs, too.
Immutable DataSets: Immutable DataSets can be combined by reference with transactional database data and offer clean semantics when the DataSets project relational schema and tables. We can look at the semantics projected by an immutable DataSet and create a new version of it optimized for a different usage pattern but still projecting the same semantics. Projections, redundant copies, denormalization, indexing, and column stores are all examples of optimizing immutable data while preserving its semantics.
Parallelism and Fault Tolerance: Immutability and functional computation are the key to implementing “Big Data”.
Immutability does change everything!
Full paper here: http://cidrdb.org/cidr2015/Papers/CIDR15_Paper16.pdf