This approach is sort of similar to an LSM - you can make this more efficient by doing a routine compaction in your storage whereby you collapse many patches on top of the original version and call it v2. You can say have a row with the same id (manage those conflicts!), a reference to the last patch applied, and a new version number. Then, you just always query the latest "version".