We've seen that immutability has a profound effect on code structure, and, therefore, on software design. We've also discussed, on multiple occasions, that I/O is fundamentally mutable. We're about to show that data storage is not necessarily mutable and that immutable data storage also has a profound effect on architecture.
How can data storage be immutable? After all, the whole reason for many software applications is to do CRUD—create, retrieve, update, and delete. The only operation that doesn't change data is retrieve, although, in some cases, retrieving data can have additional side effects such as analytics or logging.
However, remember that we face the same problem with data structures. A mutable data structure will change its structure when adding to an element or deleting from it. Yet, pure functional languages...