This is obviously my off-the-cuff immediate reaction. My first observation is that is tremendously useful to have this kind of detailed real-world feedback on what is not working. Now we just need to decide what to do with it.

In the posted list of availability issues, even though there are five bullets, there are only really two issues. (I'm not counting the bugs listed as the fifth bullet. They're fixed. Other bugs will crop up. As Couch matures, one expects this issue to decrease in importance.) In summary:

Issue 1:
Compaction fails silently. I've noticed this myself, and that is clearly something that has to be fixed. Failures will happen sometimes. They shouldn't be silent. Especially when that kind of silent failure can eat a tremendous amount of disc space.

Issue 2:
Queries fail because of slow disk performance or while reindexing. Reindexing can fail, or can take an extraordinarily long time. While one view is being reindexed, all views *from that design document* fail. (The performance problem listed in the post, I think, comes down to the same thing. And so do most of the maintenance problems)

My experience with this issue is also similar, but I've added the phrase about design documents. I have a couple of databases (one with 3.5M documents) with multiple views defined in the same design document. I made the mistake of trying to develop an application on this database. It was really painful every time I decided that one view needed to be changed, and having to wait a couple of hours while all the views got rebuilt. (For that purpose, I made a filtered version of the database with about 10K documents to use during view development.) Although I haven't tested it, I'm planning to move to a structure that puts one view per design document to see if the other views remain usable while one of them rebuilds. Since other databases remain usable, I expect that this will work. It would be good to have advice somewhere on the Couch web site or wiki about how to organize views into documents, with more details about how that might affect performance.

I don't know if it is possible to restructure the code to serve up other views from the same design document while one is being rebuilt. And while I know about "stale=ok" or "stale=update_after", both of those are hard to use from web sites that access the database. since they require modifying the URL. And the "update_after" version only helps the first user, and just pushes the burden of waiting onto the next user. If you have an active site with lots of users making queries, there is still going to be a performance hit.

Perhaps the solution is to make it possible to configure the server (on a per-database level? or globally?) to *always* return stale views while a view is rebuilding, and just mark them as stale. Perhaps another reserved word, either returning something like
    _stale : true | false
or
    _currency: "stale" | "current"
so the user or script could decide whether to use that data or wait until the view is rebuilt (which begins suggesting other changes so you can query if the view is done rebuilding, but I won't follow that tangent any furether at the moment).

I think the bottom line is that some serious attention needs to be paid to real-world performance issues, primarily centered around rebuilding views and compaction.

    -- Kevin

On 5/10/2012 12:53 PM, Noah Slater wrote:
Guys,

What can we learn from this:

http://saucelabs.com/blog/index.php/2012/05/goodbye-couchdb/


Thanks,

N

Reply via email to