If the overhead of views on doc creation/update is n+1 for every view, then I think this makes a lot of sense. Only a very small percentage of my views operate on all document "types", so this could be a huge boost for non-trivial systems (again, I know nothing of the actual overhead - but I'm assuming it would be significant... We are working on a few apps powered by couch, one is a CRM that currently has ~20 doc "types" and just slightly more views. If couch knew to only call 1 or 2 views instead of all 25, seems dramatic, and we still have a lot of stuff to add).

I think this should be considered before 1.0 as mapper style api's are sprouting like weeds for every possible language (yes, couch is cool), and most use some form of type persistence (we've been baking one for a while).

As for OO, inheritance, etc... Not couch's job, nor should it go there and it doesn't need to. Thats the app's job, even if couch supports _class attrib. For example, lets assume docs implement a _class attr and design docs implement a "classes" attr that could be a string or array allowing inheritance to be easily supported (['animal','dog','shepard']), meaning the view applies to docs with those _class values, but it's the app's job to track the inheritance chains, couch just provides the opportunity.

I do not know enough about the internals to discern if the advantages could be realized at the view level or at the design doc level. My new years res was to learn erlang and help hack couch... not there yet, but I did loose 10 lbs ;)

-- troy




On Feb 11, 2009, at 10:59 AM, Paul Davis wrote:

On Wed, Feb 11, 2009 at 1:53 PM, kowsik <[email protected]> wrote:
Yeah, I wasn't thinking of this as an optimization per-se, but more
about clarity of organizing the data. Just like _id and _ref, if each
document had a _class and each view also had a _class, then it just
makes it easy to understand using the
class-method-operating-on-instances concept.

It also makes it incredibly easy (and fun) to map these into objects
in any programming language:

class Comment
  def self.count
  end

  def self.by_author
  end

  def self.in_time_range
  end
end

Anyways, just idle thoughts.

K.


Ohhh! Gotchya. Its an interesting concept, but my response is what
about inheritance of types? Also, adding logic like that into CouchDB
could also be seen as limiting the generality of use. And there's
nothing to prevent a client side from doing exactly what you're asking
for. In fact, i think there are already examples of libraries doing
that.

Keep thinking on it though, its definitely interesting. Something a
bit more general that isn't immediately available client side could
make for a good discussion.

HTH,
Paul Davis

On Wed, Feb 11, 2009 at 10:37 AM, Paul Davis
<[email protected]> wrote:
On Wed, Feb 11, 2009 at 1:22 PM, kowsik <[email protected]> wrote:
Just something that occurred to me and wanted to run it by you guys.
For pcapr, I have a number of different types of documents in
couch-db, some are comments, some are about the packets, etc. Now, I
have views that do something like this:

map: function(doc) {
  if (doc.type == 'comment') emit(...);
}

With a large set of documents and a large set of views, any new
document or updates to document is passed to __all__ of the views
(when the view is eventually invoked). But I "know" that my documents come in classes and that only certain views really apply to them. I'm
thinking of a view as a static method on a class that gets some
information about the instances.


That's an interesting way to think about views I'd never considered before.

What I'm getting at is, does it make sense to have some type of
document "class" attribute and then have views bound to these classes? The goal, of course, being that couch-db can pre-filter a lot of these things and only run the views for the appropriate types of documents.

Thoughts?

K.


My first impression is that the idea makes perfect sense but sounds
like premature optimization.

HTH,
Paul Davis



Reply via email to