[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Generalizing element selection in Wes's -02pre OOPS draft



>>>>> On Fri, 15 Nov 2002 10:19:13 -0500, Robert Moore <remoore@us.ibm.com> said:

Robert> I've inserted <bob> / </bob>'s below.

I've let emacs munge them into Robert>s.

Wes> a) the tables implemented in the agent will be aligned and the
Wes> data returned for the two different requests contained in the
Wes> entire pdu will generate identically ordered responses.  Thus,
Wes> neither the management app nor the agent needs to do alignment
Wes> work.  Joining the two response portions in the PDU are trivial.
Wes> I'd expect this to be the 90-99% case.

Robert> I'm not sure I understand your point here.  If the management
Robert> app isn't *guaranteed* aligned data, won't it have to do the
Robert> alignment step every time, even if the data are in fact
Robert> aligned?

If it's not guaranteed to be aligned, then you only need to check to
see if it is.  If it is going to be aligned 99% of the time, I'd
expect to compare only the indexes across the 2 (say) response parts
and only start to scream if they weren't always equal.  C-ish:

response_piece *p1, *p2;

for(; p1 && p2; p1 = p1->next; p2 = p2->next) {
  if (memcmp(p1->index1, p2->index2) != 0 && ...) {
    /* scream and have to manually align somewhere else, but only for
       p1/p2 greater than what we've already seen */;
  }
}
if (p1 || p2) {
  /* scream again, one had more data than the other.  At least we
     don't have to align.  Just figure out what to do with the other
     data */
}

Point being, the above comparisons should be fast.  Much faster than
assuming that no data is ever aligned and thus forcing sorting and
alignment every time.

Wes> b) The tables implemented in the agent are *not* data aligned (ie,
Wes> the table information are stored independently and in a
Wes> different order).  In this case, I was limiting the sorting that
Wes> the agent had to do.  IE, if the manager needs it combined then
Wes> the manager should do it (insert high-scale database technology
Wes> only available in managers here).  This would generally be the
Wes> minority case, I would think, but I can see situations where
Wes> this could easily happen.

Robert> I was not thinking about this case, but I see your point.
Robert> The question in my mind is just how rare this case will be -
Robert> has anyone actually encountered an agent that works this
Robert> way?

Well, that's what I'd like to ask as well.  However, if no one has
then doing parallel requests as opposed to an in-packet-join won't
hurt you either ;-).  If they have, then my point is valid.

I could easily see someone implementing the storage for the
snmpTargetAddrExtTable table (from the SNMP-COMMUNITY-MIB) in a
separate memory region than the snmpTargetAddrTable it extends.  IE, I
can easily see performance benefits of hashing the augment by address
(since that's how you're going to look stuff up in it a lot of the
time) and the other by index.  Now, I don't know of anyone who's done
this (and I can't raise my hand, because I haven't implemented the
COMMUNITY-MIB).


Wes> 2b) I'll try to publish a new draft shortly after the conference
Wes> with a new ElementSpecifier containing a multiple-subcomponent
Wes> specifier which will actually be something like:

Wes> SEQUENCE {  sub-component OBJECT IDENTIFIER
Wes>             sub-elements  ElementSpecifier }

Robert> <bob>When we first looked at this, we were also thinking along the
Robert> lines of #2b.  The problem we encountered is that while it's clear
Robert> how this works for the request-element-list, it's harder to see how
Robert> it would work for search-criteria.  If you're ANDing, ORing, and
Robert> negating filter elements, it seems like you'd end up with each
Robert> element basically self contained: one table ID plus one column
Robert> ID.

I doubt people are going to AND and OR huge amounts of columns.  But
then, I've been surprised before I suppose.
 
Robert> I also don't understand your comment about regaining
Robert> compression.  In the single-table case, where there's only one
Robert> table OID involved, our proposal is, aside from one extra
Robert> SEQUENCE OF tag, exactly equivalent to yours.

When I looked at it later I realized I misread it.  You're right.

Apparently we'll have to wait for the meeting to hear other opinions
(when I promise to bug people ;-)
-- 
Wes Hardaker
Network Associates Laboratories