Enabling communication between multiple databases having disparate indices

The system creates a central UUID index mapping multiple local identifiers of multiple records in multiple databases to an identifier unique across the multiple databases including a first database without a UUID index. The first database includes a record having a first identifier. A second database includes an equivalent record having a second identifier different from the first identifier. The universally unique identifier in the central UUID index represents the first and the second identifier. The system receives a request from the first database to obtain an equivalent record from the second database, where the request includes an identifier of a record in the first database. The system determines that the identifier is a local identifier unique to the first database, based on the central UUID index. The system then converts the local identifier to the universally unique identifier, and sends the universally unique identifier to the first database.

BACKGROUND

A disparate system, or a disparate data system, is a computer data processing system that is designed to operate independently of other computer data processing systems and to operate as a fundamentally distinct system. A problem arises when multiple disparate databases need to communicate with each other, but they do not know each other's record nomenclature.

DETAILED DESCRIPTION

The disclosed system enables communication between multiple databases. The system can create a central universally unique identifier index, where the central universally unique identifier index maps multiple local identifiers associated with multiple records in the multiple databases to a universally unique identifier. The universally unique identifier is unique across the multiple databases. The multiple databases include a first database without a universally unique identifier index. The first database among the multiple databases includes a record having a first identifier. A second database among the multiple databases includes an equivalent record having a second identifier, where the first identifier and the second identifier are different, and the equivalent record in the second database includes information about a same event as the record in the first database. The universally unique identifier in the central universally unique identifier index represents the first identifier and the second identifier.

The system can receive a request from a first database among the multiple databases to obtain an equivalent record from a second database among the multiple databases, where the request includes the first identifier associated with the record in the first database. The system can determine whether the identifier is a local identifier unique to the first database. Upon determining that the identifier is the local identifier unique to the first database, based on the central universally unique identifier index, the system converts the local identifier to a first unique identifier. The system can send the first unique identifier to the first database.

Enabling Communication Between Multiple Databases Having Disparate Indices

FIG.1shows a system providing a central universally unique identifier (UUID) index. The system100can include multiple databases110,120,130, and a server140providing central UUID index145.

The multiple databases110,120,130can store millions of records112,122,132, each of which has a unique local identifier (ID)113,123,133, even if the records112,122,132are equivalent to each other. The unique local IDs113,123,133are unique to their respective databases110,120,130, but may or may not be unique to the whole system including the multiple databases110,120,130. Equivalent records in different databases110,120,130do not store the same information, but they are related to each other because they contain different information related to the same event, such as a visit to a doctor's office. For example, the database110can store information about a doctor in the record112, the database120can store information about the patient in the record122, and the database130can store the invoices generated from the patient's visit to the doctor in the record132. Consequently, the databases110,120,130, even though they store equivalent information, cannot communicate with each other because databases120,130do not know the unique local identifier113associated with the record112stored in the database110.

To solve this problem, the system100generates a UUID index145that uniquely identifies each record112,122,132across all the databases110,120,130. The records112,122,132that are equivalent to each other can have the same UUID125. The UUID index145can include the unique local ID113,123,133for all records112,122,132in all databases110,120,130, and can map the unique local ID to the corresponding UUID125, which is unique across all the databases110,120,130. For example, as shown inFIG.1, the UUID index145can include the value of ID133, which can be T000000145322GTD, System A, UUI1, and can map the ID133to UUID125having the value of 12345, System C, UUID2.

Modern databases110,120can store the UUID index150,160of the records contained in the databases110,120directly in the database110,120, respectively. The modern databases110,120can include a Salesforce database, Redshift, Snowflake, MySQL, Postgres, etc. By storing the UUID index150,160directly in the database, the databases120,130can communicate directly with each other. For example, if the database120wants to retrieve the record132equivalent to the record122, the database120can obtain the UUID125of the record122from the UUID index150, and can query the database130for the record having the UUID125. Upon receiving the query, the database130can return the record having the UUID125, namely the record132.

A unique aspect of the system100is that it can enable modern databases110,120to communicate with legacy databases130. The database130can be a legacy database, such as a mainframe database including DB2, IMS, CA Datacom, CA IDMS, SQL/DS and Adabas, that cannot store the UUID index equivalent to UUID indices150,160. Consequently, the database130cannot retrieve equivalent records122,132by interacting with the databases110,120. Instead, the database130can send a request170to the server140storing the central UUID index145. The request170can include the ID133of the record132. The ID133can have the value of T000000145322GTD, System A, UUI1.

The server140can respond to the request170by sending the response180, including the UUID125of the ID133to the database130. The records112,122,132can have the same UUID125because the records are equivalent. The UUID125can have the value of 12345, System C, UUID2. Upon receiving the new UUID125of the equivalent records112,122, the database130can then directly interact with the databases110,120based on the UUID125. Alternatively, the database130can interact with the databases110,120through the server140. For example, the database130can request the ID in the database110,120of a record having the UUID125.

Databases110,120,130can interact with each other through the server140. For example, the database120can send a request190to create a record in the database110,130based on the UUID125. Similarly, the databases120,130can interact with the other databases110,120,130using the server140by supplying the local ID123,133and asking for the corresponding UUID125.

In the disclosed system100, the databases110,120may or may not store the UUID indices150,160locally. If the UUID indices150,160are not stored locally, the databases110,120can query the server140for the UUID of a local ID113,123. The system100can have a single central UUID index145, or a limited number of UUID indices, namely, one central UUID index145and one UUID index150,160for each database110,120. By contrast, other systems in addition to the UUID indices145,150,160can have multiple UUID indices for each database. For example, in other systems the database110can have a UUID index for records contained in the database110, a second UUID index for records contained in the database120, and a third UUID index for records contained in the database130. If there are20mutually communicating databases, each database in the system can have20UUID indices, for a total of 400 indices. By contrast, the disclosed system100would have one or at most21UUID indices. The significantly lower number of UUID indices uses less memory, makes updating the UUID indices145,150,160computationally cheaper, and is less prone to error.

Further, if a database110wants to regenerate local IDs113with the current system, updating needs to occur only for the central UUID index145and/or the UUID index150, if the database110has a local UUID index150. By contrast, in other systems, if the database110regenerates the local IDs113, all the UUID indices in the databases120,130need to be regenerated in addition to updating the local IDs113. If there are20mutually communicating databases, the current system needs to perform either one or at most two updates to two UUID indices145,150. By contrast, other systems would need to perform21UUID index updates. Consequently, the disclosed system reduces computation time and is less prone to error.

FIG.2shows two databases200,210communicating with each other, where each database has a local UUID index. The database200may want to request a record having the UUID220from the database210. Prior to initiating communication with the database210, the database200can send a message250to the server140querying whether the database210has a local UUID index230. Since the database210has the local UUID index230, the server140can send a confirmation240to the database200to communicate with the database210using the UUID220. Upon receiving the confirmation240, the database200can request the record having the UUID220from the database210.

FIG.3shows two databases300,310communicating with each other, where the database receiving the request does not have a local UUID index. The database300may want to request a record having the UUID320from the database310. Prior to initiating communication with the database310, the database300can send a message330to the server140querying whether the database310has a local UUID index including the UUID320.

The server140can confirm that the database310does not have a local UUID index, and can use the central UUID index145to determine the local ID350corresponding to the UUID320. The server140can send a response340including an indication that the database310does not have a local UUID index, and also including the ID350unique and local to the database310and corresponding to the UUID320. Upon receiving the response340, the database300can send a request360including the ID350to the database310. The database310can then respond with the contents of the record having the local ID350.

FIG.4shows two databases400,410communicating with each other, where the database initiating the request does not have a local UUID index. The database400may want to request a record from the database410equivalent to a record having a local ID420. However, the database410does not recognize the local ID420. Consequently, the database400sends a request430to the server140. The request430includes the local ID420of the record in the database400.

The server140can use the central UUID index145to determine the UUID450corresponding to the local ID420. The server140can send a response440including an indication that the database410has a local UUID index460, and also including the UUID450corresponding to the equivalent record in the database410. Upon receiving the response440, the database400can send a request470including the UUID450to the database410. The database410can respond with the contents of the record having the UUID450.

FIG.5shows two databases500,510, neither of which has a local UUID index. The database500may want to request a record from the database510equivalent to a record having a local ID520. However, the database510does not recognize the local ID520. Consequently, the database500can send a request530to the server140. The request530can include the local ID520of the record in the database500.

The server140, based on the local ID520, can determine the UUID540associated with the local ID520. The server140can also determine that the database510does not have the local UUID index and can determine, using the central UUID index145, the local ID550of the equivalent record in the database510.

The server140can send a response560including an indication that the database510does not have a local UUID index, and also including the local ID550of the equivalent record in the database510. Upon receiving the response560, the database500can send a request570including the local ID550to the database510. The database510can respond with the record having the local ID550.

FIG.6is a flowchart to enable communication between multiple databases having disparate indices. In step600, a hardware or software processor executing instructions described in this application can create a central universally unique identifier index mapping multiple local identifiers associated with multiple records in the multiple databases to a universally unique identifier, which is unique across the multiple databases. The multiple databases can include a first database including a record having a first identifier, and a second database including an equivalent record having a second identifier. The equivalent record in the second database includes information about a same event as the record in the first database. The first database may not include a first universally unique identifier index. For example, the first database may be a legacy database. The first identifier and the second identifier can be different. The universally unique identifier in the central universally unique identifier index can relate the first identifier and the second identifier by mapping the first identifier to the second identifier, and vice versa.

In step610, the processor can receive a request from the first database among the multiple databases to obtain the equivalent record from the second database among the multiple databases. The request can include the first identifier associated with the record in the first database. The identifier can be a universally, that is globally, unique identifier, or can be a local identifier new to the first database.

In step620, the processor can determine whether the identifier is a local identifier unique to the first database. To make the determination, the processor can compare the identifier to the central universally unique identifier index, and determine whether the identifier is globally unique, or specific to the first database.

In step630, upon determining that the identifier is the local identifier unique to the first database, based on the central universally unique identifier index, the processor can convert the local identifier to a first unique identifier. In step640, the processor can send the first unique identifier to the first database.

The processor can reduce a memory footprint of the UUID indices by creating at most the central universally unique identifier index and multiple universally unique identifier indices, where one, e.g., a first, universally unique identifier index among the multiple universally unique identifier indices corresponds to one, e.g., a first, database among the multiple databases. In other words, the number of universally unique identifier indices is the same as the number of multiple databases. Each universally unique identifier index can map a multiplicity of local identifiers associated with a first multiplicity of records in the first database to a first multiplicity of universally unique identifiers. The first multiplicity of universally unique identifiers are unique across the multiple databases. The first multiplicity of universally unique identifiers can be stored at the first database. The processor can receive an indication that the first multiplicity of local identifiers changed. The processor can reduce processor cycles needed to propagate the change by updating at most the central universally unique identifier index. In other words, in the current system, the processor can update only one universally unique identifier index, namely, the central universally unique identifier index. By contrast, in other database systems having N databases, each database stores N universally unique identifier indices, one for each database in the system. In that case, to update the local indices in one database requires at least N updates to N other indices.

The processor can receive a message from the second database querying whether the first database includes a first universally unique identifier index mapping a first multiplicity of local identifiers associated with a first multiplicity of records in the first database to a first multiplicity of universally unique identifiers. The second database can include a second universally unique identifier index mapping a second multiplicity of local identifiers associated with the second multiplicity of records in the second database to a second multiplicity of universally unique identifiers. The second multiplicity of universally unique identifiers are unique across the multiple databases. The processor can determine whether the first database includes the first multiplicity of universally unique identifiers. Upon determining that the first database includes the first multiplicity of universally unique identifiers, the processor can send a confirmation to the second database that the first database includes the first multiplicity of universally unique identifiers.

The processor can receive a message from the second database querying whether the first database includes a first universally unique identifier index mapping a first multiplicity of local identifiers associated with a first multiplicity of records in the first database to a first multiplicity of universally unique identifiers. The second database can include a second universally unique identifier index mapping a second multiplicity of local identifiers associated with the second multiplicity of records in the second database to a second multiplicity of universally unique identifiers. The second multiplicity of universally unique identifiers are unique across the multiple databases. The message can include a second universally unique identifier among the second multiplicity of universally unique identifiers. The second universally unique identifier identifies a second record among the second multiplicity of records and a first equivalent record associated with the first database. The second universally unique identifier is unique across the multiple databases. The processor can determine whether the first database includes the first multiplicity of universally unique identifiers. Upon determining that the first database does not include the first multiplicity of universally unique identifiers, based on the second universally unique identifier, the processor can retrieve from the central universally unique identifier index a first local identifier of the first equivalent record associated with the first database. The processor can send to the second database a message including the first local identifier and an indication that the first database does not include the first multiplicity of universally unique identifiers.

The processor can receive a message from the first database querying whether the second database includes a second universally unique identifier index mapping a second multiplicity of local identifiers associated with a second multiplicity of records in the second database to a second multiplicity of universally unique identifiers. The message can include the first identifier associated with the record in the first database. The multiple databases include a first database without a first universally unique identifier index. In other words, the first database can include an index of local identifiers associated with local records. The processor can determine whether the second database includes the second universally unique identifier index. Upon determining that the second database includes the second universally unique identifier index, based on the central universally unique identifier index, the processor can retrieve from the central universally unique identifier index a second universally unique identifier associated with the identifier. The processor can send to the first database a message including the second universally unique identifier and an indication that the second database includes the second universally unique identifier index.

The processor can receive a message from the first database querying whether the second database includes a second universally unique identifier index mapping a second multiplicity of local identifiers associated with a second multiplicity of records in the second database to a second multiplicity of universally unique identifiers. The message can include the first identifier associated with the record in the first database. The first database can contain only local indices, and can be without a first universally unique identifier index. The first identifier associated with the record in the first database can be a local identifier. The processor can determine whether the second database includes the second universally unique identifier index. Upon determining that the second database does not include the second universally unique identifier index, based on the central universally unique identifier index, the processor can retrieve from the central universally unique identifier index a second local identifier associated with the identifier, where the second local identifier uniquely identifies the equivalent record in the second database. The processor can send to the first database a message including the second local identifier and an indication that the second database does not include the second universally unique identifier index.

Computer System

FIG.7is a block diagram that illustrates an example of a computer system700in which at least some operations described herein can be implemented. As shown, the computer system700can include: one or more processors702, main memory706, non-volatile memory710, a network interface device712, a video display device718, an input/output device720, a control device722(e.g., keyboard and pointing device), a drive unit724that includes a storage medium726, and a signal generation device730that are communicatively connected to a bus716. The bus716represents one or more physical buses and/or point-to-point connections that are connected by appropriate bridges, adapters, or controllers. Various common components (e.g., cache memory) are omitted fromFIG.7for brevity. Instead, the computer system700is intended to illustrate a hardware device on which components illustrated or described relative to the examples of the figures and any other components described in this specification can be implemented.

The network interface device712enables the computer system700to mediate data in a network714with an entity that is external to the computer system700through any communication protocol supported by the computer system700and the external entity. Examples of the network interface device712include a network adapter card, a wireless network interface card, a router, an access point, a wireless router, a switch, a multilayer switch, a protocol converter, a gateway, a bridge, a bridge router, a hub, a digital media receiver, and/or a repeater, as well as all wireless elements noted herein.

The memory (e.g., main memory706, non-volatile memory710, machine-readable medium726) can be local, remote, or distributed. Although shown as a single medium, the machine-readable medium726can include multiple media (e.g., a centralized/distributed database and/or associated caches and servers) that store one or more sets of instructions728. The machine-readable (storage) medium726can include any medium that is capable of storing, encoding, or carrying a set of instructions for execution by the computer system700. The machine-readable medium726can be non-transitory or comprise a non-transitory device. In this context, a non-transitory storage medium can include a device that is tangible, meaning that the device has a concrete physical form, although the device can change its physical state. Thus, for example, non-transitory refers to a device remaining tangible despite this change in state.

In general, the routines executed to implement examples herein can be implemented as part of an operating system or a specific application, component, program, object, module, or sequence of instructions (collectively referred to as “computer programs”). The computer programs typically comprise one or more instructions (e.g., instructions704,708,728) set at various times in various memory and storage devices in computing device(s). When read and executed by the processor702, the instruction(s) cause the computer system700to perform operations to execute elements involving the various aspects of the disclosure.

Remarks