Abstract:
A database access method includes receiving a data request at a switcher system from another computer, selecting a connection to a database system from among a collection of connections, and communicating with the database system across the selected connection to fulfill the data request. A computer program residing on a computer readable medium includes instructions for causing a computer to receive a data request from another computer, select a connection to a database system from among a number of connections to the database system, and communicate with the database system across the selected connection to fulfill the data request. A network of interconnected computing devices may include network elements configured by the computer program to implement the invention.

Description:
BACKGROUND 
     A computer application can store and access data by sending queries to, and receiving replies from, a database system. As an application&#39;s storage or query processing requirements increase, a single database system may be unable to adequately support the application. In such a case, the application may use multiple database systems. Each database system can store a portion of the data needed by the application. An application may then distribute its queries among the multiple database systems, thus enabling a larger volume of queries to be processed. 
     To support multiple databases, an application may need to be programmed with knowledge of the various database systems and the distribution of its data among those systems. Such programming may complicate application development and may complicate reconfiguration of the database systems. Consequently, improvements in the use of multiple database systems are desired. 
     SUMMARY 
     In general, in one aspect, the invention features a database access method. The method includes receiving a data request at a switcher system from another computer, selecting a connection to a database system from among a collection of connections, and communicating with the database system across the selected connection to fulfill the data request. 
     Implementations may include one or more of the following features. Communicating with the database system may include sending a database query and receiving a reply to the query. The database query can be generated by processing the data request message at a message processing library that is selected based on an identity value in the data request. The switcher may be configured to process messages by attaching a message process library corresponding to different data request identifier values. The switcher may receive data requests from multiple computers and service the data requests on different connections to the database system. The order in which various data requests are received, and in which they are fulfilled, may differ. 
     In general, in another aspect, the invention features a computer program residing on a computer readable medium. The program includes instructions for causing a computer to receive a data request from another computer, select a connection to a database system from among a number of connections to the database system, and communicate with the database system across the selected connection to fulfill the data request. 
     Implementations may include one or more of the following features. The program may include instructions to send a database query and instructions to receive a reply to the database query on the selected connection. The program may also include instructions to send the data request to a request message processing library based on an identity value in the received data request and instructions to process the data request using the selected message processing library to generate the database query. 
     Implementations may provide advantages including increased total data storage volume, improved transaction processing response time, simplified database access, and increased service availability. 
     The details of one or more embodiments of the invention are set forth in the accompanying drawings and the description below. Other features, objects, and advantages of the invention will be apparent from the description and drawings, and from the claims. 
    
    
     DESCRIPTION OF DRAWINGS 
     FIG. 1 is computer network. 
     FIG. 2 is a host system. 
     FIG. 3 shows details of a host system. 
     FIGS. 4A,  4 B, and  4 C are flowcharts depicting host system processes. 
    
    
     DETAILED DESCRIPTION 
     FIG. 1 shows a network configuration  100  in which a host computer system  110  communicates with client computers  131 - 133  over a network  120 . The host system  110  may include multiple computers  111 - 113  and database systems  114 - 115  that work together to provide information services and/or data to client computers  131 - 133  at various physical locations. The network  120  may be a private network, such as a local area network, a public network, such as the Internet, or may include a combination of public and private network facilities. Components  111 - 115  of the host system  110  can be located at one or more physical locations and connected by the network  120  or by other communications links. Each database system  114  and  115  will typically include both transaction processing and data storage sub-systems. 
     A host system can include both logic and data needed to implement an information service and to provide that service to users at client computers. For example, America Online, Inc. (AOL), operates a host system that includes “buddy list” application servers. An AOL buddy list application server is a computer system executing software procedures to implement a notification service. The buddy list notification service alerts AOL users when other AOL members on their user-specified lists of member are simultaneously accessing the AOL host system. 
     Application servers may store, access, and manipulate data in local or remote database systems. For example, data needed by buddy list application servers can be stored at remote database systems accessible over a TCP/IP network, such as the Internet or a private TCP/IP network. Data needed by a particular application server may also be stored, accessed, and manipulated by other application servers. Thus, an AOL buddy list application server may periodically access a list of on-line members stored at a remote database by other types of application servers executing at other application server computers. 
     Application servers may generate a large number of database transactions and may need to access large volumes of stored data. Data storage and/or transaction processing requirements of an application server may exceed the capabilities of a single database system. Consequently, multiple database systems may be required to store data needed by a single application server. Other transaction processing considerations, such as fault tolerance and transaction processing speeds, may also favor the use of multiple database systems to store data needed by a single application server. 
     Shown in FIG. 2 is a host system  200  that includes multiple database systems  231 - 234 . Each database system  231 - 234  can be implemented using custom or commercially available computer hardware and software. For example, each database  231 - 234  can include a single, clustered, or multi-processor UNIX®, Linux, or Microsoft Windows NT®-based computer executing a Sybase, Informix, or Oracle relational database. Host system  200  also includes application servers  201  and  202  and asynchronous database switcher servers (“ADB switchers”)  211 - 213 . Each application server  201 - 202  implements information service logic. ADB switchers  211 - 213  enable indirect data exchanges between the application servers  201 - 202  and the database systems  231 - 234 . 
     Data needed by an application server  201 - 202  may be partitioned over, and/or replicated on, multiple database systems  231 - 234 . For example, if application server  201 &#39;s data storage and transaction requirements exceed the storage capacity or transaction processing capabilities of a single database system  231 , then application server  201 &#39;s data may be partitioned over multiple database systems  231  and  232 . Those partitions may be further replicated at additional database systems  233  and  234 . 
     Asynchronous database switcher servers (“ADB switchers”)  211 - 213  can provide an interface for indirect data exchanges between the application servers  201 - 202  and the database systems  231 - 234 . The indirect interface provided by the ADB switchers  211 - 213  lo enables the partitioning, replication, and transaction processing details performed by the database systems  231 - 234  to be hidden from the application servers  201 - 202 . Thus, if the data created and accessed by application server  201  is partitioned over databases  231 - 232 , the application server  201  need not be aware of that partitioning. Instead, application server  201  may store, retrieve, and/or manipulate data by sending a data request to the database interface implemented by ADB switcher  211 . Thus, from the perspective of application server  201 , ADB switcher  211  is the host system  200  element at which data is stored or from which data is retrieved. ADB switcher  211  can, in turn, process a data request from an application server, select a destination database system  231 - 232  based on that data request processing, send a database query to, and receive a query reply from, the selected database system, format a data response based on the query reply, and return the data response to the application server  201 . 
     FIG. 3 shows additional details of ADB switcher  211 . ADB switcher  211  includes request queuing and forwarding logic  311 . An ADB switcher may also include one or more application server-specific message processing libraries. For example, the ADB switcher  211  is shown having two message processing libraries  331  and  332 . Each library  331  and  332  can include dynamically loaded program code that implements functions used to process data requests from particular application servers, interact with database systems  231 - 234 , and generate replies to particular application servers  201  or  202 . Functions implemented by libraries  331  and  332  may include queuing request messages from application servers  201 - 202 , generating database system  231 - 234  queries based on received request messages, and determining particular database systems  231 - 234  to receive queries. Libraries  331 - 332  may also receive query responses from the database systems  231 - 234 , format responses to the application servers  201 - 202  based on the query responses, and send the responses to the application servers  201 - 202 . 
     Message processing libraries  331 - 332  may be implemented in dynamically linked shared program code files. In a UNIX®-based implementation, ADB switcher logic  311  can call UNIX operating system functions to attach the shared program code files containing the libraries  331  or  332 . For example, in UNIX-based Solaris®, Irix®, and Linux® operating systems, operating system function calls “dlopen” and “dlsym” can be used to attach the shared library files. In other implementations, message processing libraries  331 - 332  may be implemented as statically linked program code or by an interpreted scripting language, such as JavaScript®, Toolkit Command Language (TCL), or the BASIC programming language. Message processing libraries  331 - 332  may also be implemented as separately executing application operatively linked to ADB switcher logic  311  using inter-process communications functions. Still other function library attachment implementations may be used. 
     Data exchanged between an application server  201  and an ADB switcher  211 , and between ADB switcher  211  and database systems  231 - 234  may differ in format and protocol. For example, a data request from application server  201  may be formatted as a message containing the message fields shown in Table 1, and a data reply from ADB switcher  211  to application server  201  may be formatted as a message containing the fields shown in Table 2. As further described below, request messages having the format shown in Table 1 may be received from an application server by ADB logic  311 , sent to a message processing library  331  or  332  wherein structure query language (SQL) query messages corresponding to the request are produced, and the SQL query messages may then be sent to selected database systems  231 - 234 . Correspondingly, SQL responses from the database systems  231 - 234  may be processed by a message processing library  331  or  332  to produce result messages having the format shown in Table 2. 
     
       
         
               
             
               
               
               
             
               
               
               
             
               
               
               
             
           
               
                 TABLE 1 
               
             
             
               
                   
               
               
                 Request Message Format. 
               
             
          
           
               
                   
                 Field: 
                 Function 
               
               
                   
                   
               
               
                   
                 &lt;ID&gt; 
                 The &lt;ID&gt; field includes a numeric identifier that 
               
               
                   
                   
                 is used by an ADB switcher to identify associations 
               
               
                   
                   
                 between application servers, message processing 
               
               
                   
                   
                 libraries, and database systems. An application may 
               
               
                   
                   
                 have different &lt;ID&gt; values that are associated 
               
               
                   
                   
                 with different aspects of application server function- 
               
               
                   
                   
                 ality. In general, each &lt;ID&gt; value is uniquely 
               
               
                   
                   
                 associated with an application server within a host 
               
               
                   
                   
                 system. 
               
               
                   
                 &lt;method&gt; 
                 The &lt;method&gt; field contains a numeric identifier 
               
               
                   
                   
                 indicating a database operation to be performed. For 
               
               
                   
                   
                 example, an application server may use the follow- 
               
               
                   
                   
                 ing identifiers to indicate operations to be perfor- 
               
               
                   
                   
                 med: 
               
             
          
           
               
                   
                 &lt;method&gt; value 
                 Operation indicated 
               
               
                   
                 0 
                 Delete database values 
               
               
                   
                 2 
                 Query database values, 
               
               
                   
                 4 
                 Update database values. 
               
             
          
           
               
                   
                 &lt;correlation 
                 The &lt;correlation ID&gt; field contains a value used to 
               
               
                   
                 ID&gt; 
                 correlate request and In general, each outstanding 
               
               
                   
                   
                 request associated with a particular &lt;ID&gt; value 
               
               
                   
                   
                 will have a unique &lt;correlation ID&gt; value associated 
               
               
                   
                   
                 with it. A &lt;correlation ID&gt; may be in any form 
               
               
                   
                   
                 selected by an application server designer. 
               
               
                   
                 &lt;variable&gt; 
                 The &lt;variable&gt; field contains additional data that 
               
               
                   
                   
                 may be used by an ADB switcher to form a query to 
               
               
                   
                   
                 implement the database function identified by the 
               
               
                   
                   
                 &lt;method&gt; field. The &lt;variable&gt; field is 
               
               
                   
                   
                 application server specific. It may contain additional 
               
               
                   
                   
                 sub-fields and may be a fixed or variable length, 
               
               
                   
                   
                 The &lt;variable&gt; field may contain any data that an 
               
               
                   
                   
                 application server designer wishes to provide to 
               
               
                   
                   
                 a message processing library. 
               
               
                   
                   
               
             
          
         
       
     
     
       
         
               
             
               
               
               
             
               
               
               
             
               
               
               
             
           
               
                 TABLE 1 
               
             
             
               
                   
               
               
                 Request Message Format. 
               
             
          
           
               
                   
                 Field: 
                 Function 
               
               
                   
                   
               
               
                   
                 &lt;ID&gt; 
                 The &lt;ID&gt; field includes a numeric identifier that 
               
               
                   
                   
                 is used by an ADB switcher to identify associations 
               
               
                   
                   
                 between application servers, message processing 
               
               
                   
                   
                 libraries, and database systems. An application may 
               
               
                   
                   
                 have different &lt;ID&gt; values that are associated 
               
               
                   
                   
                 with different aspects of application server function- 
               
               
                   
                   
                 ality. In general, each &lt;ID&gt; value is uniquely 
               
               
                   
                   
                 associated with an application server within a host 
               
               
                   
                   
                 system. 
               
               
                   
                 &lt;method&gt; 
                 The &lt;method&gt; field contains a numeric identifier 
               
               
                   
                   
                 indicating a database operation to be performed. For 
               
               
                   
                   
                 example, an application server may use the follow- 
               
               
                   
                   
                 ing identifiers to indicate operations to be perfor- 
               
               
                   
                   
                 med: 
               
             
          
           
               
                   
                 &lt;method&gt; value 
                 Operation indicated 
               
               
                   
                 0 
                 Delete database values 
               
               
                   
                 2 
                 Query database values, 
               
               
                   
                 4 
                 Update database values. 
               
             
          
           
               
                   
                 &lt;correlation 
                 The &lt;correlation ID&gt; field contains a value used to 
               
               
                   
                 ID&gt; 
                 correlate request and In general, each outstanding 
               
               
                   
                   
                 request associated with a particular &lt;ID&gt; value 
               
               
                   
                   
                 will have a unique &lt;correlation ID&gt; value associated 
               
               
                   
                   
                 with it. A &lt;correlation ID&gt; may be in any form 
               
               
                   
                   
                 selected by an application server designer. 
               
               
                   
                 &lt;variable&gt; 
                 The &lt;variable&gt; field contains additional data that 
               
               
                   
                   
                 may be used by an ADB switcher to form a query to 
               
               
                   
                   
                 implement the database function identified by the 
               
               
                   
                   
                 &lt;method&gt; field. The &lt;variable&gt; field is 
               
               
                   
                   
                 application server specific. It may contain additional 
               
               
                   
                   
                 sub-fields and may be a fixed or variable length, 
               
               
                   
                   
                 The &lt;variable&gt; field may contain any data that an 
               
               
                   
                   
                 application server designer wishes to provide to 
               
               
                   
                   
                 a message processing library. 
               
               
                   
                   
               
             
          
         
       
     
     The operation of an ADB switcher  211  and the processing of exemplary request and result messages is further described with reference to FIGS. 3, and  4 A- 4 C. FIG. 4A shows an ADB Switcher configuration routine. Configuration data accessed by ADB Switcher logic  311  can include a series of “attach” directives. Each “attach” directive instructs the logic  311  to attach a message procesing libraries (step  421 ). Multiple “attach” directives, or “attach” directives with extended parameter sets, may be used to attach multiple message processing libraries. The format of configuration data may be implementation-defined. In an exemplary implementation, the following format can be used for an “attach” directive: 
     Attach &lt;library name&gt; &lt;ID&gt; &lt;functions&gt; 
     where &lt;library name&gt; &lt;ID&gt; and &lt;functions&gt; are parameters of the attach directive. These prameters may be defined as follows: 
     &lt;library name&gt; 
     The &lt;library name&gt; parameter identifies a message processing library file. 
     &lt;ID&gt; 
     The &lt;ID&gt; parameter contains a numeric identifier used to correlate messages from application servers with particular message processing library files. Logic  311  may store data defining relationships between &lt;ID&gt; values and message processing libraries (step  422 ). For example, for each “attach” directive processed, an &lt;ID&gt; value and a &lt;library name&gt; value may be stored as a record in a database table maintained at the ADB switcher  211 . When a message is received from an application server, logic  311  can retrieve the stored relationship data to identify which message processing library is to process the received message. 
     &lt;functions&gt; 
     The &lt;functions&gt; parameter further defines the interface between the ADB switcher logic  311  and the message processing library  331 . The &lt;functions&gt; parameter may identify software procedures within the library  331  that perform particular functions required by ADB switcher logic  311 . For example, the logic  311  may need to access the following functions in every message processing library: 1) an “open” function to establish connections to database systems, 2) a “close” function to close previously opened database connections, 3) a “format” function to format database queries and to compatibly exchange data between application servers and database systems. Implementations may also require additional interface functions to be defined. For example, an implementation may require a “schedule” interface functions to control request and database query scheduling, and a “close” interface function to close previously opened database connections. 
     Each message processing library attached by a host system may use unique names for such “open,” “close”, and “format” functions. Unique names may be required to prevent name conflicts when multiple message processing libraries  331  and  332  are attached and integrated with the switcher logic  311 . For example, “open,” “close”, and “format” functions in library  331  may have software procedure names “app201open,” “app201close,” and “app201format”, respectively, while corresponding functions in library  332  may have software procedure names “app202open,” “app202close,” and “app202format.” 
     ADB switcher configuration data may also be used to determine the number of database connections between an ADB switcher and each database system. Each connection may correspond to an independently operating database system “login.” For example, the ADB switcher  211  may have two connections  221 - 222  to database system  231  and two connection  223 - 224  to database system  232 . Each connection  221 - 224  may support a single outstanding database query. Therefore, the database system  231  must reply to a query received on connection  221  before another query can be received on that connection. However, other queries may be simultaneously outstanding on other database connections. Thus, a database system  231  having two connections  221 - 222  can support two simultaneous queries. 
     Data needed by an application server  201  may be partitioned over multiple database systems  231  and  232 . ADB switcher  211  may have different connections used to access data in different partitions or at different database systems. For example, connections  221  and  222  may be used to access a first data partition at database system  231  and connections  223  and  224  may be used to access a second data partition at database system  232 . 
     Configuration data used to configure logic  311  and message processing libraries  331 - 332  can include a series of “db_open” directives that specify connections to be opened between an ADB switcher system  211  and various database systems (step  423 ). Each “db_open” directive may also include data to specify the location and contents of particular data partitions. In an exemplary implementation, the following format can be used for “db_open” directives: 
     db_open &lt;ID&gt; &lt;database name&gt; &lt;connections&gt; &lt;filter&gt; 
     where &lt;ID&gt; &lt;database name&gt; &lt;connections&gt; and &lt;filter&gt; are parameters of the “db_open” directive. These parameters may be defined as follows: 
     &lt;ID&gt; 
     The &lt;ID&gt; parameter can be used to identify a previously attached message processing library. The identified message processing library may assist in the processing of the “db_open” directive. For example, logic  311  may maintain a database storing relationships between &lt;ID&gt; values and message processing libraries (as defined during step  422 ). To process “db_open” directives, logic  311  may identify a message processing library using the database of stored &lt;ID&gt;-to-library relationships and forward the “db_open” directive and/or its parameters to the identified library. As further described below, the library receiving the “db 13  open” directive and/or “db_open” parameters may then open a specified number of database connections to a specified database system. 
     &lt;database name&gt; 
     The &lt;database name&gt; parameter identifies a database system and/or particular data stored at a database system. The &lt;database name&gt; parameter may include multiple sub-parameters. For example, &lt;database name&gt;may include a system  231 - 234  identification sub-parameter and parameters identifying particular tables or data structures within the identified database system  231 - 234 . 
     &lt;connections&gt; 
     The &lt;connections&gt; parameter specifies a number of database connections to be established between by the ADB switcher and a database system identified by the &lt;database name&gt; parameter. The connections may be established under control of a message processing library or logic  311 . Implementations may allow specialized connection types, such as read-only and update-only connections to be individually specified. 
     &lt;filter&gt; 
     The &lt;filter&gt; parameter may be used by a message processing library to determine the query handling capabilities of connections being opened to the data or database system specified by the &lt;database name&gt; parameter. 
     The use of “attach” and “db_open” directives is further described with respect to the exemplary sequence of directives shown in Table 3. 
     
       
         
               
             
               
             
           
               
                 TABLE 3 
               
               
                   
               
               
                 Exemplary EDB Switcher Configuration Data 
               
               
                   
               
             
             
               
                   
               
             
          
           
               
                 attach library331.d11 201 app201open app201close app201format 
               
               
                 db_open 201 database231 2 “A-M” 
               
               
                 db_open 201 database232 2 “N-Z” 
               
               
                   
               
             
          
         
       
     
     The “attach” and “db_open” directives shown in Table 3 attach a message processing library  331  to the ADB switcher logic  311  and configure the library  331  and logic  311  to process messages to and from application server  201 . More particularly, the “attach” directive instructs logic  311  to attach a message processing library file named “library331.dll” (step  421 ) and to use that library to process messages having an &lt;ID&gt; parameter value of 201 (step  422 ). The “attach” directive also identifies three functions “app201open” “app201close” and “app201format”) that implement an interface between logic  311  and library  331 . The identified functions may correspond to the “open,” “close,” and “format,” interface functions previously described. 
     Each “db_open” directive includes an &lt;ID&gt; parameter to identify an associated message processing library. For example, since each “db_open” directive in Table 3 specifies an &lt;ID&gt; value of ‘201,’ and the message processing library “library331.dll” was attached using an &lt;ID&gt; value of 201, each “db_open” directive is associated with the message processing library  331 . The “db_open” parameters &lt;ID&gt; &lt;database name&gt; &lt;connections&gt; and Filter&gt; may be sent from logic  311  to library  331  (“library311.dll”) using the “app201open” function implemented by the library  331 . The “app201open” function may open a number of connections specified by the &lt;connections&gt; parameter to the database identified by the &lt;database name&gt; parameter (step  423 ). 
     A “db_open” directive can specify a &lt;filter&gt; parameter to identify queries that can be made on the connections opened by that “db_open” directive (step  424 ). For example, the first “db_open” directive in Table 3 may cause two database connections  221  and  222  to be opened to database system  231  and can specify the filter condition “A-M” for those conditions. The “A-M” filter condition may indicate that an “A-M” data partition is accessible via connections  221  and  222 . Similarly, the second “db_open” directive may cause two database connections  223  and  224  to be opened to database system  232  and can specify the filter condition “N-Z” for those conditions. The “N-Z” filter condition may indicate that an “N-Z” data partition is accessible via connections  223  and  224 . The meaning of particular specified &lt;filter&gt; parameter information is determined by the implementation of the receiving message processing library. 
     After the ADB switcher has been configured, an application server data request may be processed using the attached shared library (step  425 ). FIG. 4B outlines an exemplary request message processing procedure. When a request message is received at the logic  311  from an application server  201  (step  431 ), the &lt;ID&gt; value in the request message is used to determine a message processing library that can process the request message (step  432 ). The determination may be made using &lt;ID&gt; and &lt;library name&gt; relationship data stored during switcher configuration (step  422  of FIG.  4 A). The request message may then be forwarded from the logic  311  to the message processing library (step  433 ). The message processing library may use application server-specific algorithms to form a database system query based on parameters of the request message. The formed query may be returned to the logic  311  where it is queued for sending to a database system (step  434 ). 
     Logic  311  may maintain a number of separate query queues. Each queue may be associated with a different database system  231 - 234 , with different connections to those database systems, with particular groups of connections to those database systems, or with different database operations. The queue in which a particular query is place may be identified by the library  331  based on implementation-specific filter conditions identified by a “db_open” directive &lt;filter&gt; parameter. For example, a query needing to access data in database system  231  may be placed into a first queue coupled to connections  221  and  222  while a query needing to access data in database system  232  may be placed into a second queue coupled to connections  223  and  224 . When the query is queued, the &lt;ID&gt; value associated with the message processing library, and the &lt;correlation ID&gt;from the application server&#39;s original message is associated with the queued data. Queuing algorithms in the logic  311  monitor the status of each queue. When a connection  221 - 224  serving that queue is available (step  435 ), the logic  311  associates the query&#39;s &lt;ID&gt; value and &lt;correlation ID&gt; with that connection and sends the query on that connection to a database system. The query&#39;s &lt;ID&gt; and &lt;correlation ID&gt; values can be used to correlate subsequently received query replies with request messages. 
     Referring to FIG. 4C, after sending a query to a database systems, an ADB switcher  211  will receive a query response from the database systems (step  441 ). The logic  311  may send the query response, as well as the &lt;ID&gt; and &lt;correlation ID&gt; associated with the received query&#39;s connection, to a message processing library for processing into a response message (see Table 2) (step  444 ). 
     An application server may have multiple outstanding request messages. Various ADB switcher  211  processing factors, such as queue use and the speed of different database systems  231 - 234 , may alter request message and response message orders. An application server can correlate particular response messages with their corresponding requests messages using &lt;ID&gt; and &lt;correlation ID&gt;. In general, a response message will return the same or a determinable variant of the &lt;ID&gt; and &lt;correlation ID&gt; values sent in a corresponding request message. The format and use of &lt;correlation ID&gt; values is application-server specific. An ADB switcher may pass &lt;ID&gt; and &lt;correlation ID&gt; values between ADB switcher functions such that &lt;ID&gt; and &lt;correlation ID&gt; values in request and response messages will be the same or will be variants determinable by an application server. 
     Implementations of the invention may also use replicated databases to process request messages from an application server. For example, each of database systems  231  and  232  may store a full copy of a particular database. The application server  211  may open connections to each database system  231  and  232  and divide queries among the systems  231  and  232  to increase the total number of transactions that can be handled. Implementations may also combine partitioned and replicated databases. 
     Multiple ADB switchers may be used to process request from a single application server. For example, if the number of data requests generated by an application server sexeeds the processing capability of a single ADB switcher, the application server may be programmed to “round-robin” or otherwise distribute data requests among multiple ADB switchers. Different &lt;ID&gt; values may be associated with each of the multiple different ADB switchers. Additionally, the multiple ADB switchers may each attach a copy of a common message processing library to process messages from the application server. An application server may also send requests associated with different types of data to different ADB switchers or to a common ADB switcher using different &lt;ID&gt; values for each of the different types of data. 
     Application server to ADB switcher request and response messages need not use the format shown herein. Other implementation-defined formats may be used. 
     An ADB switcher may access configuration data in a locally stored data file, in a remote database, by commands entered at a local or remote configuration terminal, or by other means. 
     Implementations may also include client computers configured to send data requests directly to ADB switchers and to receive response messages directly from ADB switchers. 
     The invention may be implemented in digital electronic circuitry, or in computer hardware, firmware, software, or in combinations of them. Apparatus of the invention may be implemented in a computer program product tangibly embodied in a machine-readable storage device for execution by a programmable processor; and method steps of the invention may be performed by a programmable processor executing a program of instructions to perform functions of the invention by operating on input data and generating output. The invention may advantageously be implemented in one or more computer programs that are executable on a programmable system including at least one programmable processor coupled to receive data and instructions from, and to transmit data and instructions to, a data storage system, at least one input device, and at least one output device. Each computer program may be implemented in a high-level procedural or object-oriented programming language, or in assembly or machine language if desired; and in any case, the language may be a compiled or interpreted language. Suitable processors include, by way of example, both general and special purpose microprocessors. Generally, a processor will receive instructions and data from a read-only memory and/or a random access memory. Storage devices suitable for tangibly embodying computer program instructions and data include all forms of non-volatile memory, including by way of example semiconductor memory devices, such as EPROM, EEPROM, and flash memory devices; magnetic disks such as internal hard disks and removable disks; magneto-optical disks; and CD-ROM disks. Any of the foregoing may be supplemented by, or incorporated in, specially-designed ASICs (application-specific integrated circuits). 
     A number of embodiments of the present invention have been described. Nevertheless, it will be understood that various modifications may be made without departing from the spirit and scope of the invention. Accordingly, other implementations are within the scope of the following claims.