Hi,
That will improve things, but it's still potentially got to skip through a lot of records to return limit number of records. Say you have a very prolific user and one who is less active. The prolific guy has 1000 messages for every one the laid back guy gets. If you're filtering by user you're going to have to go through ~10000 records to return the less active user 10 documents (assuming I'm understanding _changes right...). The problem is not getting the 10 documents out but skipping the 10000 documents that don't match the filter.

If the records are split across databases (one per user) you'll only hit the relevant changes to your user. Of course that might not be possible for your use case....
Cheers
Simon


On 20 Oct 2010, at 14:31, [email protected] wrote:

Hello,

Perhaps you can use the limit option together with the since option to retrieve the changes feed. That way, no matter if the application is doing a first time initialization, or starts from the last known sync, your code will always be the same : 1/ retrieve N changes infos starting from sequence S (S = 0 the very first time) 2/ do I have N changes in the couchdb response ? if so repeat 1, setting S to the last seq number of the couchdb response.

Regards,

Mickael

----- Mail Original -----
De: "Cory Zue" <[email protected]>
À: "user" <[email protected]>
Envoyé: Mercredi 20 Octobre 2010 14h06:59 GMT +01:00 Amsterdam / Berlin / Berne / Rome / Stockholm / Vienne
Objet: Re: Slow filtered _changes feed

Thanks Simon,

On Wed, Oct 20, 2010 at 6:43 AM, Simon Metson
<[email protected]> wrote:
Hi,
One thought: do you query the last N changes or the whole feed? If I apply a simple filter to my test database it is slow to get the full result, but it's relatviely fast to skip to the more recent changes (the ones I've
already consumed and go from there.

When the phones sync they provide a token containing information about
the last known sync,which we use to skip ahead in the changes feed.
However, on a first time initialization of the phone it processes the
entire feed, and if this doesn't succeed then subsequent ones likely
won't either.

Also, the _changes feed streams the documents down to the client - can your
client/server deal with a streaming response?

It doesn't yet, although we could theoretically add this.

My latest plan is to basically save a copy of all the relevant
information in a couch doc after every attempted sync.  In this case
the first operation would still timeout, but if the client retried all
the relevant doc ids could be retrieved from that document and only a
small update would have to be applied.  Since this is only likely a
problem when it is a long time between syncs I think it could work ok
(definitely not ideal, though).  Does this seem sane?

Cheers
Simon

On 20 Oct 2010, at 03:44, Cory Zue wrote:

Howdy,

I'm bringing up a problem I chatted about with a few folks with on IRC
today but was unable to solve.  My app is using the _changes feed to
detect what updates need to go to particular clients (in this case
cell phones) based on some filtered information the phones send up in
the sync request.  The flow looks something like:

Phone ---HTTP POST---> Server
Server ---filtered _changes---> CouchDB
[Server prepares couch results for phone]
Server ---Data Payload---> Phone

All of the above represents a single HTTP POST and response between
the phone and server.

The problem I am seeing is that hitting the _changes feed from the
server is prohibitively slow, and these requests are timing out before
the server can send data back down to the phone.

I was led to believe on IRC that changing my filter from javascript to
erlang would drastically increase performance, but I'm not observing
this at all.  In fact the erlang version seems slightly slower.

I setup an erlang view server following these instructions:
http://wiki.apache.org/couchdb/EnableErlangViews

Am I missing something?  Is my erlang so bad as to negate the
increased performance gain from switching over? Was I lied to? Is my whole approach dumb and do I need to implement filtered caching inside
my server and outside of couch?

Any thoughts or feedback would be much appreciated.

thanks,
Cory



Reply via email to