Networking

NAVIGATION
CATEGORIES
REFERRENCE
LINKS
  • Advice on approach to coping with a table that potentially has thousandsof rows

    5 answers - 2864 bytes - related search similar search Add To My Delicious Add To My Stumble Upon Add To My Google Mark Add To My Facebook Add To My Digg Add To My Reddit

    Hey all,
    We are implementing a modified version of draft-ietf-sip-mib-09.txt,
    where we've stripped out the use of the NETWRK-SERVICES-MIB and are
    adding X.731 state information (similar to what is covered in RFC 4268)
    and additional information we feel we need to capture to successfully
    manage an openSER (http://openser.org/) instance. For example, tracking
    active phone calls is something we need that isn't supported by the
    SIPMIBs.
    Most of the data we need to expose is pretty straightforward and doesn't
    require a lot of ingenuity. However, there are two tables in the
    SIP-SERVER-MIB that are potential problems: sipRegUserTable and
    sipContactTable. The sipRegUserTable has a list of all registrations on
    the server (think one per SIP phone to make life easier). That list is
    potentially unbounded, limited only by available memory and storage.
    The sipContactTable can potentially be worse, as it represents contact
    information per registration. A single registration can have multiple
    contact rows.
    The proposed communication mechanism with openSER is to use the official
    FIF interface, where essentially we shove some text into the FIF and
    we get a text response back. At the moment, we've decided to not add
    AgentX support directly into openSER. So all of the data is going to
    live in the openSER instance and we will be poking it via the FIF to
    expose it in the SNMP agent. No problem so far. Now I need to manage
    the sipRegUserTable, where I don't have the list of current
    registrations in memory. Querying for that list (just the index
    information, not the entire table row) may be prohibitive if it's
    several thousand entries. I don't know at this time if the module that
    tracks reservations will be our own, or one of the stock modules from
    openSER. If it's our own, we can likely keep the list of registrations
    in a sorted order; if it's not, we can't depend on the registrations
    being properly sorted.
    Any suggestions on what approach I should take? While the FAQ entries
    for mib2c are helpful, and point me to the iterate or mfd config files
    to deal with tables that have external data, I was hoping someone could
    point out in advance whether or not the standard approaches will scale
    to the 10,000+ row case.
    I'll poke away at it myself and report back whatever progress I make.
    Thanks,
    Glenn McAllister
    SMA Networks, Inc.
    This SF.net email is sponsored by: Splunk Inc. Do you grep through log files
    for problems? Stop! Download the new AJAX search engine that makes
    searching your log files as easy as surfing the web. DWNLAD SPLUNK!
    Net-snmp-coders mailing list
    Net-snmp-coders (AT) lists (DOT) sourceforge.net
  • No.1 | | 950 bytes | |

    Thu, 22 Dec 2005 09:40:45 -0500, Glenn McAllister <glenn (AT) somanetworks (DOT) comsaid:

    GlennAny suggestions on what approach I should take? While the FAQ
    Glennentries for mib2c are helpful, and point me to the iterate or
    Glennmfd config files to deal with tables that have external data, I
    Glennwas hoping someone could point out in advance whether or not
    Glennthe standard approaches will scale to the 10,000+ row case.

    Well, what you need to make sure your code supports is a notion of
    caching. The MFD code in particular helps you implement caching so
    that you should only have to communicate with your other process once
    the cache expires by collecting all the information in the agent
    temporarily. , however, this can make the agent memory grow
    quite a bit but it greatly reduces CPU time (a trade off).

    Can it scale to 10000 rows? Yes, but you will have to use some
    careful programming.
  • No.2 | | 2969 bytes | |

    Robert Story wrote:
    Thu, 22 Dec 2005 09:40:45 -0500 Glenn wrote:
    GMI don't know at this time if the module that
    GMtracks reservations will be our own, or one of the stock modules from
    GMopenSER. If it's our own, we can likely keep the list of registrations
    GMin a sorted order; if it's not, we can't depend on the registrations
    GMbeing properly sorted.
    GM
    GMAny suggestions on what approach I should take?

    It really depends on whether or not your data is sorted, if it's sorted
    properly, and if the fifo allows access to individual entries or just the
    whole list.

    I've been doing some digging and it turns out the usrloc module tracks
    most of the information I need. I can write custom commands to get the
    information in the format I need. Unfortunately, the current way the
    module stores the data is in an unsorted linked list. I've got a custom
    command that lists just the address of record (my index value, its a
    (usually) short value like 4161234567 (AT) some (DOT) domain.com), but not in
    sorted order. Looks like I'll have to extend my command. that note,
    I'm not sure I know what you meant by "sorted correctly." I'm happy to
    RTFM, if someone will point me at the FM. :-)

    I have the indexes in sorted order, is there anything I need to do
    to tell the cache that it's already sorted?

    They do have a command that allows you to get an individual entry, but
    it's not overly useful as it's missing just about everything we really
    need, so I'll be writing a custom command to make up for it.

    GMWhile the FAQ entries
    GMfor mib2c are helpful, and point me to the iterate or mfd config files
    GMto deal with tables that have external data, I was hoping someone could
    GMpoint out in advance whether or not the standard approaches will scale
    GMto the 10,000+ row case.

    Is your system severely memory limited? If so, caching all the data could be an
    issue and iterate is the way to go. But it will have *terrible* performance.
    If memory is not so limited, MFD will allow you to work with indexes only,
    until the rest of the data is needed.

    This is a server box, not an embedded device, so while memory isn't
    free, it's not nearly as scarce a resource as it might be. I'm going to
    go ahead and work with the MFD approach (populate the index before the
    data) for now. Performance is always a concern for us, so hopefully the
    memory trade off will be acceptable.

    Thanks,
    Glenn McAllister
    SMA Networks, Inc.

    This SF.net email is sponsored by: Splunk Inc. Do you grep through log files
    for problems? Stop! Download the new AJAX search engine that makes
    searching your log files as easy as surfing the web. DWNLAD SPLUNK!

    Net-snmp-coders mailing list
    Net-snmp-coders (AT) lists (DOT) sourceforge.net
  • No.3 | | 1873 bytes | |

    Thu, 22 Dec 2005 09:40:45 -0500 Glenn wrote:
    GMThe proposed communication mechanism with openSER is to use the official
    GMFIF interface, where essentially we shove some text into the FIF and
    GMwe get a text response back. At the moment, we've decided to not add
    GMAgentX support directly into openSER. So all of the data is going to
    GMlive in the openSER instance and we will be poking it via the FIF to
    GMexpose it in the SNMP agent. No problem so far. Now I need to manage
    GMthe sipRegUserTable, where I don't have the list of current
    GMregistrations in memory. Querying for that list (just the index
    GMinformation, not the entire table row) may be prohibitive if it's
    GMseveral thousand entries. I don't know at this time if the module that
    GMtracks reservations will be our own, or one of the stock modules from
    GMopenSER. If it's our own, we can likely keep the list of registrations
    GMin a sorted order; if it's not, we can't depend on the registrations
    GMbeing properly sorted.
    GM
    GMAny suggestions on what approach I should take?

    It really depends on whether or not your data is sorted, if it's sorted
    properly, and if the fifo allows access to individual entries or just the
    whole list.

    GMWhile the FAQ entries
    GMfor mib2c are helpful, and point me to the iterate or mfd config files
    GMto deal with tables that have external data, I was hoping someone could
    GMpoint out in advance whether or not the standard approaches will scale
    GMto the 10,000+ row case.

    Is your system severely memory limited? If so, caching all the data could be an
    issue and iterate is the way to go. But it will have *terrible* performance.
    If memory is not so limited, MFD will allow you to work with indexes only,
    until the rest of the data is needed.
  • No.4 | | 2562 bytes | |

    Robert Story wrote:
    Fri, 06 Jan 2006 14:01:29 -0500 Glenn wrote:
    GMI'm going to
    GMgo ahead and work with the MFD approach (populate the index before the
    GMdata) for now.

    , if you are going with MFD, then you don't need to worry about trying to
    get the list sorted, the container will keep itself sorted. This also means
    you don't need to worry about what 'sorted correctly' means either. ;-)

    Sweet. :-)

    Do you have any idea how long it takes to get all the indexes from the server?

    How long will almost certainly be a factor of how loaded the system is,
    and on the server environment it might be *very* loaded (there is
    another instance of SER that will run in the base station, but the
    load there will be in the hundreds, not thousands; the server will
    likely be aggregating services for all of the base stations).

    That being said, the agent is likely the only thing querying the SER
    server, so from a management perspective I should have the server all to
    myself. Additionally, the data I need to manage will be relatively
    static, as reservations have long durations (typically on the order of
    hours). The only exception to this rule is the packet-storm scenario
    when one or more sectors are restarted and all of the CPEs are trying to
    re register themselves.

    Since you do intended to be dealing with large amounts of data, if you can get
    incremental updates from the server module (eg record add/delete), then you
    wouldn't have to keep flushing/reloading the cache periodically.

    I considered that approach, but it requires a lot more work in the
    existing usrloc module. Currently it doesn't store any information
    about when users are registered or unregistered. In particular, I'd
    have to keep track of deleted records in a new list. It's not like any
    of this is undoable, or even hard for that matter, it's just that I'm
    running out of time. As always, the deadlines are shorter than the
    amount of time needed to do the job right the first time

    Thanks for the insight and input, it's appreciated.

    Glenn McAllister
    SMA Networks, Inc.

    This SF.net email is sponsored by: Splunk Inc. Do you grep through log files
    for problems? Stop! Download the new AJAX search engine that makes
    searching your log files as easy as surfing the web. DWNLAD SPLUNK!

    Net-snmp-coders mailing list
    Net-snmp-coders (AT) lists (DOT) sourceforge.net
  • No.5 | | 1376 bytes | |

    Fri, 06 Jan 2006 14:01:29 -0500 Glenn wrote:
    GMUnfortunately, the current way the
    GMmodule stores the data is in an unsorted linked list. I've got a custom
    GMcommand that lists just the address of record (my index value, its a
    GM(usually) short value like 4161234567 (AT) some (DOT) domain.com), but not in
    GMsorted order. Looks like I'll have to extend my command. that note,
    GMI'm not sure I know what you meant by "sorted correctly." I'm happy to
    GMRTFM, if someone will point me at the FM. :-)
    GM
    GMI have the indexes in sorted order, is there anything I need to do
    GMto tell the cache that it's already sorted?
    []
    GMI'm going to
    GMgo ahead and work with the MFD approach (populate the index before the
    GMdata) for now.

    , if you are going with MFD, then you don't need to worry about trying to
    get the list sorted, the container will keep itself sorted. This also means
    you don't need to worry about what 'sorted correctly' means either. ;-)

    Do you have any idea how long it takes to get all the indexes from the server?

    Since you do intended to be dealing with large amounts of data, if you can get
    incremental updates from the server module (eg record add/delete), then you
    wouldn't have to keep flushing/reloading the cache periodically.

Re: Advice on approach to coping with a table that potentially has thousandsof rows


max 4000 letters.
Your nickname that display:
In order to stop the spam: 9 + 9 =
QUESTION ON "Networking"

EMSDN.COM