On Tue, Nov 4, 2008 at 6:47 PM, Antony Blakey <[EMAIL PROTECTED]> wrote:

My solution is to use the notification mechanism to maintain (multiple) SQLite databases containing the document keys I need to search over. In the URP example, I store (db, src, dest) records. I also store the last seqno,
so that I can do incremental updates to SQLite.

Then, using _external, I can make queries of SQLite to get me either (user,
permission) pairs using a self-join, or in the case of the arbitrary
metadata queries, a list of document ids.

The primary difficulties I have with this simple model are:

1) The notification mechanism doesn't give me enough information. Currently I have to do a _all_docs_by_seq and check for deletions by attempting to get each document, which I have to do for every document in any case (unless I use transparent id's) to determine if I'm interested in it, and then get the data. I presume this technique works because deletion is actually a form of
update until compaction (I copied it from GeoCouch).

** SUGGESTION ** I would prefer an update interface that gave me a stream of (old, new) document pairs, which covers add/update/delete, plus a (from, to) seqno pair. Have a 'from' seqno lets me know when I have to trigger a full
rescan, which I need to do in a variety of circumstances such as
configuration change.

In retrospect this is not a good idea. I think notification handlers should do nothing more than mark a view or query source as dirty, invalidate a cache such as memcached, and possibly check for mods to a config document to enable/disable the query service. The _external/ plugin query handler should do the subsequence processing and update any private data structures or on-disk indexes, just as the map/reduce views do, and for the same reason. So I don't think the notification mechanism should be changed.

However, that raises a question about external view/query server updating: should a view update to the seqnum that is current when the request is received, or should it keep looping in an update cycle until the seqnum has reached a steady state?

The former would make sense if you just wanted the ensure that the view was up-to-date with records a client might have just written in the requesting thread, whilst the later would seem to potentially block forever depending on the amount of processing required to update the external view and the update rate.

Finally, does anyone have advice about the merits of mnesia vs. sqlite (or another sql db) for this kind of auxiliary indexing?

Antony Blakey
--------------------------
CTO, Linkuistics Pty Ltd
Ph: 0438 840 787

Lack of will power has caused more failure than lack of intelligence or ability.
 -- Flower A. Newhouse

Reply via email to