Is it that big a problem? I mean if you store 100,000 uris of avg. length 50 chars you will have a file about 5mb... One needs only keep an absolute minimum amount of metadata around.
That aside here are my comments:
* I had personally expected something more like a harvesting API, but what you present is more like a metadata writing API. Much like the set of writing methods in
http://xesam.org/main/XesamMetadataAPI. This may just be a matter of taste though.
* If we are talking a "harvesting" metaphor (which we may not be) then it seems wrong to imply in the methods that Evo is writing the data and not just sending it
* I thought Tracker needed a service type to select the right table. Of course we know we are dealing with emails here, but the API fails to generalize.
* Timestamps are not mandatory in the protocol. The receiver will have to parse the payload to extract a timestamp (which is not guaranteed to be there in the first place). Without a timestamp a payload is meaningless
* Is there any form of sorting mandated by the SetMany method? Fx sorting subjects by mtime?
* About the Set method. What happens to predicates set on the subject that are not in the 'predicates' arg? Are they kept or deleted? Or to rephrase the question do you overwrite the entire set of metadata for the subject?