Hi Daniel,

On Apr 13, 2009, at 7:01 AM, Daniel Friesen wrote:

In CouchDB we would have needed a structure similar to:
document aaa: { "isa": "jit", "state": {}, "children": ["bbb", "ccc"] }
document bbb: { "isa": "jit", "state": {}, "children": ["ddd"] }
document ccc: { "isa": "jit", "state": {}, "children": ["ddd"] }
document ddd: { "isa": "jit", "state": {}, "children": [] }
But unfortunately we can't go grabbing data hierarchically without doing a pile of queries, or complicating the data structure in a way that I cannot sanely complicate the program itself by using when I have other options. Avoiding the huge piles of queries and overcomplicated data structures was the whole reason behind moving away from MySQL and into using non-traditional databases.

In the XML database instead of the structure before I can place all the jits into one document for the site (because I can modify individual parts of it without worrying about conflicts in other parts of the document) and make use of XQuery to to iteration and recursion and return whatever I need.
<site id="...">
<jits>
<jit id="aaa"><state/><children><jit>bbb</jit><jit>ccc</jit></ children></jit>
<jit id="bbb"><state/><children><jit>ddd</jit></children></jit>
<jit id="ccc"><state/><children><jit>ddd</jit></children></jit>
<jit id="ddd"><state/><children/></jit>
</jits>
</site>

I'm confused I think. Is it correct to say that you compile all jits into a master document per site? What would prevent you from using the same technique with CouchDB?

So querying for the jit ID by document id in couch is equivalent to `doc(...)/site/jits/jit[id="..."]` in XQuery. But because of FLWOR and the other parts of XQuery I should theoretically be able to deal with the recursive nature of our data on the database side.

I think you can do the very same thing in CouchDB using one doc per site. You can use views to generate the recursive list of jits you need to load.

As for atomicity, a document is atomic for CouchDB, so that would help as well?

Wout.

Reply via email to