Hi all,
I’m searching for a way to apply “incremental updates” to a database. By “incremental updates”, I refer to the following situation:
1. Starting point is a database containing several xml resources, e.g.
/coll1/res1.xml /coll1/res2.xml /coll2/res3.xml.
2. The update consists of a file structure like
/coll1/res2.xml /coll2/res4.xml /coll3/res5.xml
- so I want to update the existing resource /coll1/res2.xml and add some additional resources /coll2.res4.xml, /coll3/res5.xml.
The desired result is a structure like this:
/coll1/res1.xml (untouched) /coll1/res2.xml (updated) /coll2/res3.xml (untouched) /coll2/res4.xml (added) /coll3/res5.xml (added)
Using the command line client and the “ADD” command, I’m able to apply the update content in a single step, but (as the documentation predicted) /coll1/res2.xml now appears twice. This isn’t the desired result - /coll1.res2.xml should be overwritten by the content of / coll1.res2.xml from the update.
Using the command line client and the “PUT” command replaces / coll1.res2.xml and adds the additional resource. But it deletes / coll1/res1.xml and /coll2/res3.xml - again, not the desired result, since resources missing in the update should simply be kept untouched.
In my real use case, the initial dataset contains about 18,000 resources, updates may contain hundreds of updated or new resources, so separating ADD and PUT operations manually isn't possible.
A simply but ugly solution would be to keep the initial set of resources in the file system, "apply" the update there and import the complete set of files as new Database. Another solution would be to write a dedicated xquery that checks for each single resource to apply a PUT or ADD operation.
Is there a better way for such a use case?
Florian