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
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.
- About
- Technology, programming, the interwebs and other topics by members of the slackworks community.
- Recent
- Tags