Roché Compaan wrote at 2007-2-23 22:00 +0200:
>Thanks for that pointer. It's good that way, it should make invalidation
>easier. It could be as simple as invalidating any cached result that
>contains the documentId being indexed. Do you see any problem with the
>following invalidation strategy:
>If the 'documentId' exists (cataloging existing object), invalidate all
>cached result sets that contain the documentId.
>If the 'documentId' doesn't exist (cataloging new object), invalidate
>all result sets where the ids of indexes applied, are contained in the
>cache key for that result set.
I see several problems:
* the RAMCacheManager does not provide an API to implement
* a cache manager would need a special data structure
to efficiently implement the policy (given a documentId,
find all cached results containing the documentId).
* Apparently, your cache key contains the indexes involved
in producing the result.
The problem with this is that these indexes are known
only after the query has been performed:
The catalog API allows indexes to respond to subqueries,
that do not contain their own name.
I use this feature to allow a "Managable RangeIndex"
to transparently replace "effective, expires" queries.
But otherwise, the feature is probably not used
Of course, you can add the information *after*
the query has been performed and use it for invalidation -- in
a specialized cache manager.
On the other hand, new objects are usually indexed with
all available (and not only a few) indexes.
While some of the indexes may not be able to determine
a senseful value for the document, the standard indexes
have problems to handle this properly ("ManagableIndex"es can)
and the API does not propagate the information.
Zope-Dev maillist - Zope-Dev@zope.org
** No cross posts or HTML encoding! **
(Related lists -