[Date Prev][Date Next] [Chronological] [Thread] [Top]

Re: pcache rfe



Howard Chu wrote:
Remco Post wrote:

Hi all,

I've been playing with the pcache (HEAD code) and it does seem to be very usefull as it is but:

I'd like to be able to cache only a subset of the data. We have fields like userPassword and loginShell that should preferably allways be retrieved from the slq backend because these values can change quite rappidly (if a user has used all his budget, his shell changes, when more budget is added his shell changes back, comparable things happen to userPassword) so these should not be cached, or cached only for a short time, while other attributes are more static and could be cached for ages (one hour or even more).

Even worse, one client does not even list the requested attributes in it's ldap-queries (I've notified the vendor that I think it should), so non of that clients queries are cachable.

as I see it, currently the pcache does not allow for only part of a query to be retrieved from cache and the rest of the attributes to be retrieved from the backend (in my case sql). It would be nice (I think) if this were possible in the future, I guess this might be quite intrusive in the way the cache works, but it would make the cache more versatile and in my case it makes a huge impact on the usefullness of the cache.


I believe what you suggest would actually completely negate the usefulness of the cache. If any part of the entry is not cached, then all requests for the entry will have to be passed through to the underlying database. Of course, this depends on the actual queries; if there are no queries that request both cached and uncached attributes at the same time then I guess it might be practical.


There is one catch. The way bask-sql works, it has to do a sql query for echt attribute requested. So if I were to do a query for both cached and uncached attributes we could save on the sql queries for the cached attributes, saving possibly a lot of time.


We (Symas) have already developed merging code to coalesce attributes from entries in two separate databases into a single entry. This will be appearing in HEAD soon as the "translucent" overlay. This overlay was briefly mentioned at the OpenLDAP Developer Day conference in San Diego last month. The idea is that you have a remote database that carries authoritative, generic information for the DIT and a local database that contains partial entries carrying attributes to augment the remote entries. This is particularly useful for application-specific local directories that have no write-access to the schema of the remote/authoritative directory, but need to associate application-specific information with the existing entries.

E.g., the master database might have
  dn: cn=Joe User,o=example.org
  objectclass: person
  cn: Joe
  sn: User
  userPassword: mySecret

and the local database might have
  dn: cn=Joe User,o=example.org
  objectclass: CustomAppObject
  customAttr: a bunch of info

Searching on the local database for "Joe User" would return a single merged entry:
dn: cn=Joe User,o=example.org
objectclass: person
objectclass: CustomAppObject
cn: Joe
sn: User
userPassword: mySecret
customAttr: a bunch of info


This feature can probably be incorporated into the proxycache code to achieve what you want. (This statement does not imply that anybody I know of is planning to do so, just that a sufficiently motivated person could do it.)


This does seem to be intresting. I'd like to motivate anybody with the proper skills to do so ;-)


--
Met vriendelijke groeten,

Remco Post

SARA - Reken- en Netwerkdiensten                      http://www.sara.nl
High Performance Computing  Tel. +31 20 592 3000    Fax. +31 20 668 3167

"I really didn't foresee the Internet. But then, neither did the
computer industry. Not that that tells us very much of course - the
computer industry didn't even foresee that the century was going to
end." -- Douglas Adams