Making today worse so tomorrow seems better.

Getting a Good View of Your Couch

So far I have been doing all my CouchDB queries using “temporary views” which are Javascript strings which are POSTed to the database and used to select the records you’re interested in. A more efficient way to do it is to save the Javascript strings as documents, these can be called with less traffic and a simpler API. “Permanent views” also create cached indexes, so they offer performance advantages over temporary views as well.

Tim Kofol took my ideas and ran with them, creating an ingenious way to maintain CouchDB views right in the Ruby code. Witness:

class Post < Blarg::CouchBase 
  couch_accessor :tags

  couch_view :comments_view, %[
    function(doc) {
      if (doc.type  "Comment") {
        map(doc.post_id, doc);
      }
    }
  ]

  couch_view :all_tags_view, %[
    function(doc) {
      if (doc.type  ‘Post’) {
        map(null, doc.tags);
      }
    }
  ]

  def self.all_tags   
    self.all_tags_view.flatten.uniq.sort
  end

  def comments
    comments = self.class.comments_view(:key => self.document_id)
    comments.sort{|a,b| a.created_at <=> b.created_at}
  end
end

With the views relevant to this class defined in the class itself, we need to load them into CouchDB. I added Rake task which finds all views defined in the project and loads them into CouchDB, creating them or replacing older versions.

rake db:views:load

… more

Posted by Jon Guymon on Jan 16 2008 | Filed Under: couchdb ruby tech programming blarg

First Post

What do we have here?

It would seem to be yet another blog, and it is. This one, however, is built with merb and CouchDB so building it gave me a chance to experiment with some interesting projects that I don’t get to use in my daily life as a professional web developer.

The code for this site is available to the many-eyes beasts of the Interwebs here:

git://sprocket.slackworks.com/srv/git/blarg.git

It requires merb and friends, as well as an instance of CouchDB to be running somewhere. There are a few reasons I chose merb over Rails (which is what I generally use professionally) to do this:

  • It comes with no pre-packaged ORM. I wanted to use CouchDB, so none of the existing ORMs would really work for me. My previous experiences of trying to rip ActiveRecord out of Rails have been frustrating.
  • It has more flexible routing than Rails. I realize there are ways to accomplish the things I’m doing here in Rails, but the merb routes seem clearer to me, less hand-wavy. And perhaps most importantly:
  • It’s not Rails. I use Rails all day long, and I wanted to see what else is out there.

… more

Posted by Jon Guymon on Dec 18 2007 | Filed Under: tech programming ruby couchdb merb blarg

About
Technology, programming, the interwebs and other topics by members of the slackworks community.
Recent
Tags