On 02/02/2009, at 12:22 AM, Martin Scholl wrote:

What worries me most, is that I am still unsure in how to differ between design docs and indexing schemes, and when to use which infrastructure.
Applied to the doc-relationship example you gave: how should
"intermediate reults" of the dag processing be treated? As documents?
Should they be put into view functions? Should views be able to hint,
which indexing scheme is to be used? Depending on the index type,
indexing and doc / view-processing can become inherently coupled and
complex. Is this still CouchDB then?

No sure if this is exactly what you're talking about, but the way I was thinking (which I picked up from GeoCouch) was to have design docs that define no couch view, that allow you to configure the external e.g. in my case, which was for returning the TC of user/role/ permissions graphs, that might look like this:

{
  "_id": ...,
  "_rev": ...,

  transitive_closure_generator: {
    "User": { "from": "_id", "to": "[roles]" },
    "Role": { "from": "_id", "to": "[permissions]" },
  }
}

Then, in my external I process such docs in my update-loop to generate the configuration of the external i.e. I monitor changes to design docs with a 'transitive_closure_generator' element, obviously caching and persisting that configuration. You also need to catch design docs updates that remove that element, and the deletion of monitored docs as well.

Because I use CouchRest, I can use the 'couchrest-type' key that it inserts to identify which document's fields I need to process e.g. 'User'/'Role'.

As an aside, it might be nice if you could use that doc to define the endpoint for your externals, so you could completely simulate a built- in view. Putting external configuration into design docs isn't good idea but maybe it could be indirect e.g.

{
  "_id": 'my_design',
  "_rev": ...,

  transitive_closure_generator: { ... }
  externals: {
    view_name: 'tc',
    external: <the id of the external mapping in the .ini>
  }
}

which would then allow you to access your external via '_view/ my_design/tc'. External views mapped like this would need to adhere to the view contract e.g. params etc.

Antony Blakey
--------------------------
CTO, Linkuistics Pty Ltd
Ph: 0438 840 787

Always have a vision. Why spend your life making other people’s dreams?
 -- Orson Welles (1915-1985)

Reply via email to