On 11/11/06, David Boreham <david@bozemanpass.com> wrote:

>> > If we go to RDBMS, this would be the worst approach. It is suppose
>> to be
>> > a relationnal model, not an hierarchical model mapped on a relationnal
>> > model. Performance will be awfull
I missed a few iterations in this thread (been busy with the day job),
but some late thoughts:

1. Have you looked at what's inside a RDBMS engine ?
B-trees and query processing that's much the same as
the average directory server. So mapping the DS's b-tree
relations to tables (which are themselves implemented as
b-trees) is not imho an inefficient approach.

I'm in the business since 1988, and I did a RDBMS specialisation while I was a student. I think that you didn't understood what I said (may be I wasn't clear enough :) : that a _direct_ mapping of actual b-trees would be really unefficient _because_ RDBMS already use b-trees for index.So you just can't map JDBM structure to a RDBMS structure, it would induce creation of useless tables (in fact, all index can be removed). At the end, what we could have in a RDBMS would be something like 2 tables : one for entries, and one for attribute values, final. Everything else will be index. (plus one table for partitions, of course).

2. the dit hierarchy is  really a non-problem for RDBMS
mapping -- after all DS'es that use b-tree storage managers
directly already have the same identical problem to solve.
the average DIT is not very bushy nor deep anyway.

That's true.

3. If you are concerned about performance, don't use
a RDBMS. The approach already chosen for Apache DS
is the most performant (possibly needs some work, but
it's the right way to go for performance).
I  would bet 1000$ on this too, but only because you will have to request the RDBMS system through a network layer while you have direct access to JDBM. However, this is not a debate, just a feeling, because I never compared in real life the performance of each approach.

4. Attempting to 'really use' the relational data model for
directory entries takes us back to the previously mentioned
relational mapping science project. (Customer already
has a bunch of tables in Oracle, and we need to refect
those via LDAP) Certainly an interesting
field to study, but there's no obvious good way to solve
this problem that I know of. Virtual Directory and sync
(meta) type solutions have addressed this area for
years with a fair degree of success.

I think you are mixing different concerns, like "Using a RDBMS as a backend" and "Synchronizing different sources of data". The initial question (from Ersin) was : "How can we implement a RDBMS as a backend for ADS". This is something which is possible, and efficient, and IBM proved it. The second point deserve another approach (Virtual Directory/Meta Directory is a solution), but you started another thread for that, and this is a good thing :)

Emmanuel Lécharny