An interface for users to gain access and manipulate unstructured data is provided. In response to receiving a user query associated with a first database format, a system can request unstructured data associated with a second database format from a second database. The unstructured data can include a set of data groups where each data group has a set of values. Each value can be associated with a different tag. To generate a structured database, some embodiments can determine the number of data groups and the number of unique tags across the data groups and populate the table with data from the unstructured data. Subsequently, the system can apply the user query to the table to obtain a query result and transmit the query result to the user device.
|
8. A non-transitory computer readable storage medium encoded with program instructions that, when executed, are configurable to cause one or more processors to:
receive a user query formatted according to a relational database query language utilized for a first database of a first database format, wherein the user query is utilized against unstructured data and structured data in the first database, wherein the unstructured data is stored in a second database of distributed, non-relational, semi-structured database format and utilizes a different query language than the first database and the user query;
request, in response to the user query, the structured data from the first database;
receive, from the first database and in response to the request, the structured data from the first database;
request, in response to the user query, the unstructured data from the second database using a unstructured data request created from the user query, wherein the unstructured data request is formatted according to the different query language;
receive, from the second database, in response to the requesting, the unstructured data including at least a set of data groups, each data group having a set of one or more values, each value of a respective data group being associated with a different tag;
determine, in response to receiving the unstructured data, a first number of data groups in the unstructured data;
determine, in response to receiving the unstructured data, a second number of unique tags across the data groups of the unstructured data;
create a table in the first database format, wherein the number of columns of the table is based on the second number of unique tags, and the number of rows of the table corresponds to the first number of data groups;
generate a populate table by populate each row of the table with the unstructured data of a respective data group by adding each value to the column corresponding to the associated tag;
create a joined table comprising data of the populated table and the structured data from the first database;
apply the user query to the joined table to obtain a query result; and
transmit the query result to the user device.
13. A system comprising:
one or more processors; and
a memory device including instructions that, when executed by the one or more processors, are configurable to cause the system to:
receive a user query formatted according to a relational database query language utilized for a first database of a first database format, wherein the user query is utilized against unstructured data and structured data in the first database, wherein the unstructured data is stored in a second database of distributed, non-relational, semi-structured database format and utilizes a different query language than the first database and the user query;
request, in response to the user query, the structured data from the first database;
receive, from the first database and in response to the request, the structured data from the first database;
request, in response to the user query, the unstructured data from the second database using a unstructured data request created from the user query, wherein the unstructured data request is formatted according to the second database;
receive, from the second database, in response to the requesting, the unstructured data including at least a set of data groups, each data group having a set of one or more values, each value of a respective data group being associated with a different tag;
determine, in response to receiving the unstructured data, a first number of data groups in the unstructured data;
determine, in response to receiving the unstructured data, a second number of unique tags across the data groups of the unstructured data;
create a table in the first database format, wherein the number of columns of the table is based on the second number of unique tags, and the number of rows of the table corresponds to the first number of data groups;
generate a populated table by populate each row of the table with the unstructured data of a respective data group by adding each value to the column corresponding to the associated tag;
create a joined table comprising data of the populated table and the structured data from the first database;
apply the user query to the joined table to obtain a query result; and
transmit the query result to the user device.
1. A method for accessing data, the method comprising:
receiving, with a server having one or more processors, a user query formatted according to a relational database query language utilized for a first database of a first database format, wherein the user query is utilized against unstructured data and structured data in the first database, wherein the unstructured data is stored in a second database of distributed, non-relational, semi-structured database format and utilizes a different query language than the first database and the user query;
requesting, with the one or more processors and in response to the user query, the structured data from the first database;
receiving, from the first database and with the one or more processors, in response to the requesting, the structured data from the first database;
requesting, with the one or more processors and in response to the user query, the unstructured data from the second database using a unstructured data request created from the user query, wherein the unstructured data request is formatted according to the different query language;
receiving, from the second database, with the one or more processors, in response to the requesting, the unstructured data including at least a set of data groups, each data group having a set of one or more values, each value of a respective data group being associated with a different tag;
determining, in response to receiving the unstructured data, with the one or more processors, a first number of data groups in the unstructured data;
determining, in response to receiving the unstructured data, with the one or more processors, a second number of unique tags across the data groups of the unstructured data;
creating, with the one or more processors, a table in the first database format, wherein the number of columns of the table is based on the second number of unique tags, and the number of rows of the table corresponds to the first number of data groups;
generate a populated table by populating, with the one or more processors, each row of the table with the unstructured data of a respective data group by adding each value to the column corresponding to the associated tag;
creating, with the one or more processors, a joined table comprising data of the populated table and the structured data from the first database;
applying, with the one or more processors, the user query to the joined table to obtain a query result; and
transmitting, with the one or more processors, the query result to the user device.
2. The method of
3. The method of
4. The method of
7. The method of
determining a data type for each data in the set of data group; and
verifying that the data type for each data in each column of the table.
9. The non-transitory computer readable storage medium of
10. The non-transitory computer readable storage medium of
11. The non-transitory computer readable storage medium of
12. The non-transitory computer readable storage medium of
14. The system of
15. The system of
|
This application is a non-provisional application of U.S. provisional patent application No. 61/527,238, filed Aug. 25, 2011, which is incorporated by reference herein in its entirety.
The present disclosure relates generally to, among other things, the accessing of data in an electronic environment, and in particular to dynamically transforming unstructured data into structured data based on a user query.
As the number of computing users increase, machine data generated by applications, systems, and information technology infrastructure that run a business increases. Specialized search engines (e.g., Splunk®) can sort through vast amounts of unstructured and dynamic machine data (also referred to as unstructured data) such as event logs, performance information, file system information, etc. and provide the compiled data to users. However, the complexity of the unstructured data presented to users prevents many users from freely comprehending, accessing, and manipulating the data. Additionally, unstructured data such as event logs is constantly generated by the bulk, constantly changing and is fairly unpredictable. This adds to the difficulty in using such unstructured data. It is therefore desirable to provide new methods and system for accessing unstructured data.
Certain embodiments of the invention relate to transformation of data from an unstructured data format (e.g., machine data stored in a distributed, non-relational, semi-structured database) to a structured data format (e.g., data in a relational database). After the transformation, users can conveniently access and manipulate the structured data. In some embodiments, a transformation module can receive a user query and retrieve and transform unstructured data in response to receiving the user query. The transformation module in some embodiments can perform one or more operations on the transformed data based on the user query. The transformation module can then present the query results to the user upon performing the one or more operations specified by the user query. Without having to dive into complex unstructured data and without having to learn unstructured data formats, users can conveniently access and manipulate data transformed from unstructured data.
Certain aspects of the invention relate to systems and methods for accessing data. A computer system can receive a user query for unstructured data from a user device. The user query can be associated with a first database format. In response to receiving the user query, the computer system can request the unstructured data from a second database that stores the unstructured data. The computer system can receive the unstructured data from the second database. The unstructured data can include a set of data groups where each data group has a set of one or more values, each value of a respective data group being associated with a different tag. The unstructured data can be associated with a second database format. In some embodiments, the computer system can determine a first number of data groups in the unstructured data. The computer system can then determine a second number of unique tags across the data groups of the unstructured data. The computer system can create a table in the first database format, where the number of columns of the table is based on the second number of unique tags, and where the number of rows of the table corresponds to the first number of data groups. The computer system can populate each row of the table with the unstructured data of a respective data group by adding each value to the column corresponding to the associated tag. The computer system can apply the user query to the table to obtain a query result and transmit the query result to the user device.
It is advantageous to secure a finite amount of unstructured data, convert the secured unstructured data to a format compatible with a structured format, and allow users to perform user queries on the converted data. The transformation of unstructured data into a format users are familiar with permits users to freely access, analyze, and manipulate the data in the desired format.
The following detailed description together with the accompanying drawings will provide a better understanding of the nature and advantages of the present invention.
Various embodiments in accordance with the present disclosure will be described with reference to the drawings, in which:
In the following description, numerous details, examples and embodiments are set forth for purpose of explanation. However, one of ordinary skill in the art will realize that the invention is not limited to the embodiments set forth and that the invention may be practiced without some of the specific details and examples discussed. In other instances, well-known structures and devices are shown in block diagram form in order not to obscure the description of the invention with unnecessary detail.
Certain embodiments of the invention provide a user interface that enables a user to specify, using a structured data format, a query to perform an operation on unstructured data associated with an unstructured data format. In some embodiments, a server can transform unstructured data associated with an unstructured data format (e.g., machine data stored in a distributed, non-relational, semi-structured database) to structured data in a structured data format (e.g., data in a relational database table). After the transformation, users can conveniently access and manipulate the structured data using the structured data format.
In some embodiments, a transformation module can receive a user query and retrieve and transform unstructured data in response to receiving the user query. The transformation module in some embodiments can perform one or more operations on the transformed data based on the user query. The transformation module can then present the query results to the user upon performing the one or more operations specified by the user query. Without having to dive into the complexities of unstructured data, users can conveniently access and manipulate data transformed from unstructured data.
Unstructured and dynamic machine data collected at various data centers can provide a definitive record of transactions, customer activity and/or behavior, security threats, system health, fraudulent activity, etc. In some embodiments, unstructured, dynamic machine data can include data generated in real-time from various applications, servers, network devices, or security devices including logs (e.g., app logs, web access logs, web proxy logs, audit logs, syslogs), config files, messages, alerts, scripts, etc. Specialized search engines can capture and analyze real-time and historical machine data in order to improve service, identify trends, mitigate risks, improve operational visibility, etc. In some embodiments, the unstructured data can be time-series based and thereby allow retrieval of unstructured data generated within a specified time interval. However, as mentioned, the complex format of the unstructured data prevents many users from freely accessing, analyzing, and manipulating the vast amounts of gathered data. Some embodiments can transform unstructured and dynamic machine data into structured data such that users can conveniently access and specify various operations to be performed on the transformed, structured data.
Structured data in some embodiments can be compatible with a format or a programming language (e.g., Structured Query Language (SQL)) with which many users are familiar and that is extensively developed. Structured data can include data residing in relational databases, which can often be characterized by tables of rows and columns. Data stored within relational databases can be easily located, accessed, and manipulated according to a user's needs. For example, the data within relational databases can be analyzed using a variety of tools including Excel, Crystal Reports, etc. In order to make use of the properties of relational databases (e.g., to be able to manipulate data easily), row and column specifications need to be designed up front and the data to be inserted needs to fit into the specification for relational databases.
As search engines can collect, index, monitor, and analyze vast amounts of unstructured data, some embodiments can facilitate user manipulation of the data by transforming the unstructured data into a format with which users are more familiar and performing the user query on the transformed data. Transforming unstructured data into structured data can enable a wide variety of functions available in the format to be performed on the transformed data.
I. Client-Server Interaction
In some embodiments, in order to process a user query involving unstructured data, the user query is sent to the server side where much of the processing is done. For example, computer system 104 can retrieve unstructured data and perform the data transformation from unstructured to structured when a user query is received from user device 102. While computer system 104 can perform much of the data transformation and processing on the server side, in some embodiments, user device 102 can be part of computer system 104 where the data transformation and processing performed on the client side.
In this example, a user query can be received from user device 102 at step 110 where the user query is associated with a structured database format. In some embodiments, computer system 104 can send a request to a database 106 that stores the unstructured data at step 112 in response to receiving the use query. In various embodiments, system 104 can rearrange, transform, use only some of the fields of the user request, or add additional fields to the user request received in step 110 to create the request sent at step 112. The request to database 106 can be associated with an unstructured database format. In some embodiments, the requested unstructured data can be specified by a set of parameters. For instance, the user query can indicate the set of parameters for the unstructured data, such as an index or a bucket in which data is dumped, a time interval, etc. Computer system 104 can receive the unstructured data from database 106 based on the set of parameters at 114.
In some embodiments, the unstructured data received from database 106 can include a set of data groups where each data group includes a set of field values. Computer system 104 can transform the unstructured data into structured data in a structured relational database at step 116. At step 116, computer system 104 can perform the transformation by determining the dimensions of the structured database, creating a structured database with the dimensions, and populating the structured database with unstructured data. In some embodiments, computer system 104 transforms the data by determining the number of rows and columns for a relational database table. The number of rows can correspond to the number of data groups in the unstructured data.
Each field value across the set of data groups can be associated with an identifier. In some embodiments, one or more field values in a data group can have an overlapping identifier with one or more field values in a separate data group. The number of columns can be identified by determining a number of unique identifiers across the set of data groups. Thus, computer system 104 can create a table using the determined number of rows and columns or the determined transformation configuration. Computer system 104 can populate each row with the unstructured data. The entries in the relational database can be populated by the appropriate unstructured data. As described, in some embodiments, unstructured data can be mapped to its corresponding entry based on its associated tag.
Computer system 104 can apply the user query to the relational database table at step 118 to obtain a query result. Computer system 104 can then transmit the query result to user device 102 at 120. While computer system 104 on the server side can dynamically perform the data transformation and processing in response to receiving the user query from user device 102, computer system 104 in some embodiments periodically (e.g., every 30 seconds, every 5 minutes, every 12 hours) retrieves unstructured data from database 106, performs a transformation and/or additional operations on the unstructured data.
II. Performance of a User Query on Transformed Data
As mentioned above, a transformation module in some embodiments can perform a user query on data transformed from unstructured data. In some embodiments, the transformation module can determine a transformation configuration for unstructured data in response to a user query. The transformation module can then transform then unstructured data into structured data. In some embodiments, the transformation module can perform a set of operations on the transformed structured data based on the user query. As such, the user is able to access and manipulate data transformed from unstructured data by specifying one or more operations in a user query.
Process 200 can request (at 204) unstructured data based on the user query. In some embodiments, a transformation module can request a set of unstructured data from an unstructured database. The user query can identify a set of parameters including a basket, an index, a particular time interval, etc. that the user may be interested in retrieving the unstructured data. In some embodiments, the transformation module can receive an argument in an SQL module for a search for unstructured data. The argument can specify an index or basket of information that includes the desired unstructured data (e.g., by using a search term). In some embodiments, the argument can further specify other criteria such as a time-interval. In response to receiving user specification of a set of arguments, the transformation module specifies a search in unstructured data format and requests for the corresponding unstructured data. Process 200 then receives (at 206) the unstructured data.
Process 200 can determine (at 208) a transformation configuration for the unstructured data. In some embodiments, the transformation configuration specifies a table with a set of table entries (i.e., a number of rows and columns) that can be populated with the unstructured data. Transforming the unstructured data into data compatible with the structured format enables users to perform various function calls and operations to manipulate the data using a format compatible with the structured data.
Process 200 can transform (at 210) the unstructured data into structured data. The transformation module can convert the unstructured data into structured data using the transformation configuration. In some embodiments, the transformation configuration specifies a table, a list, or any other data store that is compatible with a structured format. The transformation module can create a table in a structured database format based on a transformation configured determined at 208. The transformation module can populate the table with unstructured data corresponding to the entries in the table.
Process 200 can apply (at 212) the user query to the transformed structured data. While a transformation module part of the server can apply the user query to the transformed structured data, some embodiments enable a user device to receive the transformed structured data and apply the user query locally. Process 200 can then provide (at 214) the query results to the user.
III. Determination of a Transformation Configuration
As mentioned above, a transformation module in some embodiments can determine a transformation configuration in order to transform unstructured data into structured data. In some embodiments, the transformation configuration defines the structure of a data store (e.g., dimensions of a structured database or table). The transformation configuration can also specify a mapping of the unstructured data into the structured database. To transform unstructured data into structured data, the transformation module can identify the structure, create the structure, and map data in the unstructured data to the corresponding table entries. With a relational database table compatible with a structured format, the user can specify one or more operations in the structured format to be performed on the structured data.
Process 300 can determine (at 304) a second number of unique tags across the data groups. In some embodiments, the second number of unique tags across the data groups corresponds to the number of columns for the table to be created. As each field value is associated with a tag, the transformation module can sweep through each field value across the data groups to identify the unique tags. That is, as the transformation module encounters a field value associated with a tag that has not been encountered during the sweep, a counter increases. The second number of unique tags can be identified by the total number of the counter after the transformation module sweeps through all the unstructured data across the data groups.
Process 300 can create (at 306) a table in a structured format based on the first and second numbers. As the first and second numbers represent the number of rows and columns of a table, the transformation module can create the table in a structured format using the first and second numbers. Process 300 can then populate (at 308) each entry within the table with unstructured data. The transformation module can insert null values into table entries that do not have a value corresponding to any unstructured data. When each entry within the database table is populated, the transformation is complete. The server can perform further operations on the populated table based upon the user query or further user requests.
Different embodiments may determine the transformation configuration for transforming the data differently. Instead of determining the number of columns in a table by identifying a number of unique identifiers in the unstructured data, some embodiments may determine the number of columns by identifying a number of data types in the set of unstructured data.
IV. Data Transformation for a Direct Search
In some embodiments, a user can perform a direct search for unstructured data using a user query specifying a set of parameters. Upon receiving the user query, a transformation module on the server side can retrieve a set of unstructured data and convert the unstructured data from an unstructured format into a structured format. For instance, the transformation module can retrieve a set of group data and reorganize the data such that the data is presented within a structured database table.
As described, a server may receive the user query and retrieve the corresponding unstructured data in response thereto. In some embodiments, the server can transform the unstructured data from an unstructured database format into a structured data in a structured database format. The user can specify the type of structured database and/or the structured database format into which the user would like the server to transform the unstructured data in some embodiments. As such, the server can transform the data accordingly.
V. Data Transformation for a Joined Search
In some embodiments, a user can use a single SQL statement to call the transformation function twice from the statement. After receiving the query results including two sets of structured data, the two sets of structured data can be joined to form a single set of structured data in a structured database. Some embodiments may request two sets of unstructured data from two separate searches, transform the data, and join the structured data in a structured database.
In
VI. Joining Unstructured and Structured Data
In some embodiments, a user can join query data from two or more tables where at least one of the tables includes data transformed from unstructured data.
The user can specify additional user queries that can perform additional operations on the transformed data, such as a join operation, as shown in this example. Upon specifying a join operation using structured data language, data from the table that includes the transformed data and from another table can be joined to form another structured database table with the desired data.
In some embodiments, each piece of data in the table can be associated with a data type, such as a character string, a data and time, a binary string, a numeric, etc. After unstructured data is transformed into structured data, a security module can sweep through the structured data and identify the data type for each piece of data. As such, the security module can determine whether the data types for entries in a column correspond to each other. In some embodiments, when the security module determines that there are values in a column that have different data types, the security module may flag the transformed data. A user can then verify whether the unstructured data was transformed into structured data appropriately. This ensures that the user queries performed on the transformed structured data would likely be accurate.
VII. System Overview
In certain embodiments, the methods and systems are implemented in a multi-tenant database system or service. As used herein, the term multi-tenant database system refers to those systems in which various elements of hardware and software of the database system may be shared by one or more customers. For example, a given application server (e g running an application process) may simultaneously process requests for a great number of customers, and a given database table may store rows for a potentially much greater number of customers. As used herein, the terms query or query plan refer to a set of steps used to access information in a database system.
Environment 700 is an environment in which an on-demand database service exists. User system 705 may be any machine or system that is used by a user to access a database user system. For example, any of user systems 705 can be a handheld computing device, a mobile phone, a laptop computer, a work station, and/or a network of computing devices. As illustrated in
An on-demand database service, such as system 715, is a database system that is made available to outside users that do not need to necessarily be concerned with building and/or maintaining the database system, but instead may be available for their use when the users need the database system (e.g., on the demand of the users). Some on-demand database services may store information from one or more tenants stored into tables of a common database image to form a multi-tenant database system (MTS). Accordingly, “on-demand database service 715” and “system 715” will be used interchangeably herein. A database image may include one or more database objects. A relational database management system (RDBMS) or the equivalent may execute storage and retrieval of information against the database object(s). Application platform 725 may be a framework that allows the applications of system 715 to run, such as the hardware and/or software, e.g., the operating system. In an embodiment, on-demand database service 715 may include an application platform 725 that enables creation, managing and executing one or more applications developed by the provider of the on-demand database service, users accessing the on-demand database service via user systems 705, or third party application developers accessing the on-demand database service via user systems 705.
The users of user systems 705 may differ in their respective capacities, and the capacity of a particular user system 705 might be entirely determined by permissions (permission levels) for the current user. For example, where a salesperson is using a particular user system 705 to interact with system 715, that user system has the capacities allotted to that salesperson. However, while an administrator is using that user system to interact with system 715, that user system has the capacities allotted to that administrator. In systems with a hierarchical role model, users at one permission level (profile type) may have access to applications, data, and database information accessible by a lower permission level user, but may not have access to certain applications, database information, and data accessible by a user at a higher permission level. Thus, different users will have different capabilities with regard to accessing and modifying application and database information, depending on a user's security or permission level, also called authorization.
Network 710 is any network or combination of networks of devices that communicate with one another. For example, network 710 can be any one or any combination of a LAN (local area network), WAN (wide area network), telephone network, wireless network, point-to-point network, star network, token ring network, hub network, or other appropriate configuration. As the most common type of computer network in current use is a TCP/IP (Transfer Control Protocol and Internet Protocol) network, such as the global internetwork of networks often referred to as the “Internet” with a capital “I,” that network will be used in many of the examples herein. However, it may be understood that the networks that the present invention might use are not so limited, although TCP/IP is a frequently implemented protocol.
User systems 705 might communicate with system 715 using TCP/IP and, at a higher network level, use other common Internet protocols to communicate, such as HTTP, FTP, AFS, WAP, etc. In an example where HTTP is used, user system 705 might include an HTTP client commonly referred to as a “browser” for sending and receiving HTTP messages to and from an HTTP server at system 715. Such an HTTP server might be implemented as the sole network interface between system 715 and network 710, but other techniques might be used as well or instead. In some implementations, the interface between system 715 and network 710 includes load sharing functionality, such as round-robin HTTP request distributors to balance loads and distribute incoming HTTP requests evenly over a plurality of servers. At least as for the users that are accessing that server, each of the plurality of servers has access to the MTS' data; however, other alternative configurations may be used instead.
In one embodiment, system 715, shown in
One arrangement for elements of system 715 is shown in
Several elements in the system shown in
According to one embodiment, each user system 705 and all of its components are operator configurable using applications, such as a browser, including computer code run using a central processing unit such as an Intel Pentium® processor or the like. Similarly, system 715 (and additional instances of an MTS, where more than one is present) and all of their components might be operator configurable using application(s) including computer code to run using a central processing unit such as processor system 720, which may include an Intel Pentium® processor or the like, and/or multiple processor units. A computer program product embodiment includes a machine-readable storage medium (media) having instructions stored thereon/in which can be used to program a computer to perform any of the processes of the embodiments described herein. Computer code for operating and configuring system 16 to intercommunicate and to process webpages, applications and other data and media content as described herein are preferably downloaded and stored on a hard disk, but the entire program code, or portions thereof, may also be stored in any other volatile or non-volatile memory medium or device as is well known, such as a ROM or RAM, or provided on any media capable of storing program code, such as any type of rotating media including floppy disks, optical discs, digital versatile disk (DVD), compact disk (CD), microdrive, and magneto-optical disks, and magnetic or optical cards, nanosystems (including molecular memory ICs), or any type of media or device suitable for storing instructions and/or data. Additionally, the entire program code, or portions thereof, may be transmitted and downloaded from a software source over a transmission medium, e.g., over the Internet, or from another server, as is well known, or transmitted over any other conventional network connection as is well known (e.g., extranet, VPN, LAN, etc.) using any communication medium and protocols (e.g., TCP/IP, HTTP, HTTPS, Ethernet, etc.) as are well known. It will also be appreciated that computer code for implementing embodiments of the present invention can be implemented in any programming language that can be executed on a client system and/or server or server system such as, for example, C, C++, HTML, any other markup language, Java™, JavaScript, ActiveX, any other scripting language, such as VBScript, and many other programming languages as are well known may be used. (Java™ is a trademark of Sun Microsystems, Inc.).
According to one embodiment, each system 715 is configured to provide webpages, forms, applications, data and media content to user (client) systems 705 to support the access by user systems 705 as tenants of system 715. As such, system 715 provides security mechanisms to keep each tenant's data separate unless the data is shared. If more than one MTS is used, they may be located in close proximity to one another (e.g., in a server farm located in a single building or campus), or they may be distributed at locations remote from one another (e.g., one or more servers located in city A and one or more servers located in city B). As used herein, each MTS could include one or more logically and/or physically connected servers distributed locally or across one or more geographic locations. Additionally, the term “server” is meant to include a computer system, including processing hardware and process space(s), and an associated storage system and database application (e.g., OODBMS or RDBMS) as is well known in the art. It may also be understood that “server system” and “server” are often used interchangeably herein. Similarly, the database object described herein can be implemented as single databases, a distributed database, a collection of distributed databases, a database with redundant online or offline backups or other redundancies, etc., and might include a distributed database or storage network and associated processing intelligence.
User system 805, network 810, system 815, tenant data storage 835, and system data storage 840 were discussed above in
Application platform 825 includes an application setup mechanism 875 that supports application developers' creation and management of applications, which may be saved as metadata into tenant data storage 835 by save routines 870 for execution by subscribers as one or more tenant process spaces 890 managed by tenant management process 895 for example. Invocations to such applications may be coded using PL/SOQL 865 that provides a programming language style interface extension to API 860. A detailed description of some PL/SOQL language embodiments is discussed in commonly owned U.S. Pat. No. 7,730,478, entitled “METHOD AND SYSTEM FOR ALLOWING ACCESS TO DEVELOPED APPLICATIONS VIA A MULTI-TENANT ON-DEMAND DATABASE SERVICE,” issued Jun. 1, 2010 to Craig Weissman, and hereby incorporated in its entirety herein for all purposes. Invocations to applications may be detected by one or more system processes, which manages retrieving application metadata 884 for the subscriber making the invocation and executing the metadata as an application in a virtual machine.
Each application server 880 may be communicably coupled to database systems, e.g., having access to system data 842 and tenant data 837, via a different network connection. For example, one application server 8801 might be coupled via the network 810 (e.g., the Internet), another application server 880N-1 might be coupled via a direct network link, and another application server 880N might be coupled by yet a different network connection. Transfer Control Protocol and Internet Protocol (TCP/IP) are typical protocols for communicating between application servers 880 and the database system. However, it will be apparent to one skilled in the art that other transport protocols may be used to optimize the system depending on the network interconnect used.
In certain embodiments, each application server 880 is configured to handle requests for any user associated with any organization that is a tenant. Because it is desirable to be able to add and remove application servers from the server pool at any time for any reason, there is preferably no server affinity for a user and/or organization to a specific application server 880. In one embodiment, therefore, an interface system implementing a load balancing function (e.g., an F5 Big-IP load balancer) is communicably coupled between the application servers 880 and the user systems 805 to distribute requests to the application servers 880. In one embodiment, the load balancer uses a least connections algorithm to route user requests to the application servers 880. Other examples of load balancing algorithms, such as round robin and observed response time, also can be used. For example, in certain embodiments, three consecutive requests from the same user could hit three different application servers 880, and three requests from different users could hit the same application server 880. In this manner, system 815 is multi-tenant, wherein system 815 handles storage of, and access to, different objects, data and applications across disparate users and organizations.
As an example of storage, one tenant might be a company that employs a sales force where each salesperson uses system 815 to manage their sales process. Thus, a user might maintain contact data, leads data, customer follow-up data, performance data, goals and progress data, etc., all applicable to that user's personal sales process (e.g., in tenant data storage 835). In an example of a MTS arrangement, since all of the data and the applications to access, view, modify, report, transmit, calculate, etc., can be maintained and accessed by a user system having nothing more than network access, the user can manage his or her sales efforts and cycles from any of many different user systems. For example, if a salesperson is visiting a customer and the customer has Internet access in their lobby, the salesperson can obtain critical updates as to that customer while waiting for the customer to arrive in the lobby.
While each user's data might be separate from other users' data regardless of the employers of each user, some data might be organization-wide data shared or accessible by a plurality of users or all of the users for a given organization that is a tenant. Thus, there might be some data structures managed by system 815 that are allocated at the tenant level while other data structures might be managed at the user level. Because an MTS might support multiple tenants including possible competitors, the MTS may have security protocols that keep data, applications, and application use separate. Also, because many tenants may opt for access to an MTS rather than maintain their own system, redundancy, up-time, and backup are additional functions that may be implemented in the MTS. In addition to user-specific data and tenant-specific data, system 815 might also maintain system level data usable by multiple tenants or other data. Such system level data might include industry reports, news, postings, and the like that are sharable among tenants.
In certain embodiments, user systems 805 (which may be client systems) communicate with application servers 880 to request and update system-level and tenant-level data from system 815 that may require sending one or more queries to tenant data storage 835 and/or system data storage 840. System 815 (e.g., an application server 880 in system 815) automatically generates one or more SQL statements (e.g., one or more SQL queries) that are designed to access the desired information. System data storage 840 may generate query plans to access the requested data from the database.
Each database can generally be viewed as a collection of objects, such as a set of logical tables, containing data fitted into predefined categories. A “table” is one representation of a data object, and may be used herein to simplify the conceptual description of objects and custom objects according to the present invention. It may be understood that “table” and “object type” may be used interchangeably herein. Each table generally contains one or more data categories logically arranged as columns or fields in a viewable schema. Each row or record of a table contains an instance of data for each category (type) defined by the fields. For example, a CRM database may include a table that describes a customer with fields for basic contact information such as name, address, phone number, fax number, etc. Another table might describe a purchase order, including fields for information such as customer, product, sale price, date, etc. In some multi-tenant database systems, standard entity tables might be provided for use by all tenants. For CRM database applications, such standard entities might include tables for Account, Contact, Lead, Opportunity data, and other object types, each containing predefined fields. It may be understood that the word “entity” may also be used interchangeably herein with “object” and “table”, when entity or object is referring to a collection of objects or entities of a particular type.
In some multi-tenant database systems, tenants may be allowed to create and store custom objects, or they may be allowed to customize standard entities or objects, for example by creating custom fields for standard objects, including custom index fields. U.S. Pat. No. 7,779,039, entitled “CUSTOM ENTITIES AND FIELDS IN A MULTI-TENANT DATABASE SYSTEM,” issued Aug. 17, 2010 to Craig Weissman, and hereby incorporated herein by reference, includes discussion on systems and methods for creating custom objects as well as customizing standard objects in a multi-tenant database system. In certain embodiments, for example, all custom entity data rows are stored in a single multi-tenant physical table, which may contain multiple logical tables per organization. It is transparent to customers that their multiple “tables” are in fact stored in one large table or that their data may be stored in the same table as the data of other customers.
While the invention has been described by way of example and in terms of the specific embodiments, it is to be understood that the invention is not limited to the disclosed embodiments. To the contrary, it is intended to cover various modifications and similar arrangements as would be apparent to those skilled in the art. Therefore, the scope of the appended claims should be accorded the broadest interpretation so as to encompass all such modifications and similar arrangements.
Patent | Priority | Assignee | Title |
10331720, | Sep 07 2012 | SPLUNK Inc. | Graphical display of field values extracted from machine data |
10977286, | Sep 07 2012 | SPLUNK Inc. | Graphical controls for selecting criteria based on fields present in event data |
11153281, | Dec 06 2018 | Bank of America Corporation | Deploying and utilizing a dynamic data stenciling system with a smart linking engine |
11321311, | Sep 07 2012 | SPLUNK Inc. | Data model selection and application based on data sources |
11386133, | Sep 07 2012 | SPLUNK Inc. | Graphical display of field values extracted from machine data |
11637814, | Dec 06 2018 | Bank of America Corporation | Deploying and utilizing a dynamic data stenciling system with a smart linking engine |
11741093, | Jul 21 2021 | T-Mobile USA, Inc | Intermediate communication layer to translate a request between a user of a database and the database |
11755634, | Sep 07 2012 | SPLUNK Inc. | Generating reports from unstructured data |
11893010, | Sep 07 2012 | SPLUNK Inc. | Data model selection and application based on data sources |
12056255, | Nov 28 2023 | MONDAY COM LTD | Digital processing systems and methods for facilitating the development and implementation of applications in conjunction with a serverless environment |
12105948, | Oct 29 2021 | MONDAY COM LTD | Digital processing systems and methods for display navigation mini maps |
12118401, | Nov 28 2023 | MONDAY COM LTD | Digital processing systems and methods for facilitating the development and implementation of applications in conjunction with a serverless environment |
12120095, | Dec 06 2018 | Bank of America Corporation | Deploying and utilizing a dynamic data stenciling system with a smart linking engine |
12130807, | Jul 21 2021 | T-Mobile USA, Inc. | Intermediate communication layer to translate a request between a user of a database and the database |
12141722, | Nov 18 2019 | MONDAY.COM | Digital processing systems and methods for mechanisms for sharing responsibility in collaborative work systems |
12169802, | Nov 28 2023 | MONDAY COM LTD | Digital processing systems and methods for managing workflows |
12175240, | Nov 28 2023 | MONDAY COM LTD | Digital processing systems and methods for facilitating the development and implementation of applications in conjunction with a serverless environment |
9910890, | Jun 15 2015 | International Business Machines Corporation | Synthetic events to chain queries against structured data |
Patent | Priority | Assignee | Title |
5577188, | May 31 1994 | Cisco Technology, Inc | Method to provide for virtual screen overlay |
5608872, | Mar 19 1993 | RPX Corporation | System for allowing all remote computers to perform annotation on an image and replicating the annotated image on the respective displays of other comuters |
5649104, | Mar 19 1993 | RPX Corporation | System for allowing user of any computer to draw image over that generated by the host computer and replicating the drawn image to other computers |
5715450, | Sep 27 1995 | Oracle America, Inc | Method of selecting and presenting data from a database using a query language to a user of a computer system |
5761419, | Mar 19 1993 | RPX Corporation | Remote collaboration system including first program means translating user inputs into annotations and running on all computers while second program means runs on one computer |
5819038, | Jun 07 1995 | RPX Corporation | Collaboration system for producing copies of image generated by first program on first computer on other computers and annotating the image by second program |
5821937, | Feb 23 1996 | Visionael Corporation | Computer method for updating a network design |
5831610, | Feb 23 1996 | Visionael Corporation | Designing networks |
5873096, | Oct 08 1997 | Oracle America, Inc | Method of maintaining a network of partially replicated database system |
5918159, | Aug 04 1997 | Enovsys LLC | Location reporting satellite paging system with optional blocking of location reporting |
5963953, | Mar 30 1998 | Oracle America, Inc | Method, and system for product configuration |
6092083, | Feb 26 1997 | Oracle America, Inc | Database management system which synchronizes an enterprise server and a workgroup user client using a docking agent |
6169534, | Jun 26 1997 | Oracle America, Inc | Graphical user interface for customer information management |
6178425, | Feb 26 1997 | Oracle America, Inc | Method of determining the visibility to a remote database client of a plurality of database transactions using simplified visibility rules |
6189011, | Mar 19 1996 | Siebel Systems, Inc. | Method of maintaining a network of partially replicated database system |
6216135, | Feb 26 1997 | Oracle America, Inc | Method of determining visibility to a remote database client of a plurality of database transactions having variable visibility strengths |
6233617, | Feb 26 1997 | Oracle America, Inc | Determining the visibility to a remote database client |
6266669, | Feb 27 1997 | Oracle America, Inc | Partially replicated distributed database with multiple levels of remote clients |
6295530, | May 15 1995 | Ablaise Limited | Internet service of differently formatted viewable data signals including commands for browser execution |
6324568, | Nov 30 1999 | Oracle America, Inc | Method and system for distributing objects over a network |
6324693, | Feb 27 1997 | Oracle America, Inc | Method of synchronizing independently distributed software and database schema |
6336137, | Mar 31 2000 | Oracle America, Inc | Web client-server system and method for incompatible page markup and presentation languages |
6367077, | Feb 27 1997 | Oracle America, Inc | Method of upgrading a software application in the presence of user modifications |
6393605, | Nov 18 1998 | Oracle America, Inc | Apparatus and system for efficient delivery and deployment of an application |
6405220, | Feb 27 1997 | Oracle America, Inc | Partially replicated distributed database with multiple levels of remote clients |
6434550, | Apr 14 2000 | Oracle OTC Subsidiary LLC | Temporal updates of relevancy rating of retrieved information in an information search system |
6446089, | Feb 26 1997 | Oracle America, Inc | Method of using a cache to determine the visibility to a remote database client of a plurality of database transactions |
6535909, | Nov 18 1999 | Red Hat, Inc | System and method for record and playback of collaborative Web browsing session |
6549908, | Nov 18 1998 | Oracle America, Inc | Methods and apparatus for interpreting user selections in the context of a relation distributed as a set of orthogonalized sub-relations |
6553563, | Nov 30 1998 | Oracle America, Inc | Development tool, method, and system for client server applications |
6560461, | Aug 04 1997 | Enovsys LLC | Authorized location reporting paging system |
6574635, | Mar 03 1999 | Oracle America, Inc | Application instantiation based upon attributes and values stored in a meta data repository, including tiering of application layers objects and components |
6577726, | Mar 31 2000 | Oracle America, Inc | Computer telephony integration hotelling method and system |
6601087, | Nov 18 1998 | Cisco Technology, Inc | Instant document sharing |
6604117, | Mar 19 1996 | Siebel Systems, Inc. | Method of maintaining a network of partially replicated database system |
6604128, | Nov 30 1999 | Oracle America, Inc | Method and system for distributing objects over a network |
6609150, | Mar 31 2000 | Siebel Systems, Inc. | Web client-server system and method for incompatible page markup and presentation languages |
6621834, | Nov 05 1999 | Open Invention Network, LLC | System and method for voice transmission over network protocols |
6654032, | Dec 23 1999 | Cisco Technology, Inc | Instant sharing of documents on a remote server |
6665648, | Nov 30 1998 | Oracle America, Inc | State models for monitoring process |
6665655, | Apr 14 2000 | Oracle OTC Subsidiary LLC | Implicit rating of retrieved information in an information search system |
6684438, | Feb 26 1997 | Siebel Systems, Inc. | Method of using cache to determine the visibility to a remote database client of a plurality of database transactions |
6711565, | Jun 18 2001 | Oracle America, Inc | Method, apparatus, and system for previewing search results |
6724399, | Sep 28 2001 | Oracle America, Inc | Methods and apparatus for enabling keyboard accelerators in applications implemented via a browser |
6728702, | Jun 18 2001 | Oracle America, Inc | System and method to implement an integrated search center supporting a full-text search and query on a database |
6728960, | Nov 18 1998 | Oracle America, Inc | Techniques for managing multiple threads in a browser environment |
6732095, | Apr 13 2001 | Oracle America, Inc | Method and apparatus for mapping between XML and relational representations |
6732100, | Mar 31 2000 | Oracle America, Inc | Database access method and system for user role defined access |
6732111, | Mar 03 1998 | Siebel Systems, Inc. | Method, apparatus, system, and program product for attaching files and other objects to a partially replicated database |
6754681, | Feb 27 1997 | Siebel Systems, Inc. | Partially replicated distributed database with multiple levels of remote clients |
6763351, | Jun 18 2001 | Oracle America, Inc | Method, apparatus, and system for attaching search results |
6763501, | Jun 09 2000 | Cisco Technology, Inc | Remote document serving |
6768904, | Oct 11 2000 | Siebel Systems, Inc | Data communication method using mobile terminal |
6782383, | Jun 18 2001 | Oracle America, Inc | System and method to implement a persistent and dismissible search center frame |
6804330, | Jan 04 2002 | Oracle America, Inc | Method and system for accessing CRM data via voice |
6826565, | May 15 1995 | Ablaise Limited | Method and apparatus for serving files to browsing clients |
6826582, | Sep 28 2001 | EMC IP HOLDING COMPANY LLC | Method and system for using file systems for content management |
6826745, | Nov 30 1998 | Oracle America, Inc | System and method for smart scripting call centers and configuration thereof |
6829655, | Mar 28 2001 | Siebel Systems, Inc. | Method and system for server synchronization with a computing device via a companion device |
6842748, | Apr 14 2000 | Oracle OTC Subsidiary LLC | Usage based strength between related information in an information retrieval system |
6850895, | Nov 30 1998 | Oracle America, Inc | Assignment manager |
6850949, | Jun 03 2002 | Oracle OTC Subsidiary LLC | System and method for generating a dynamic interface via a communications network |
7031981, | Dec 21 2001 | GOOGLE LLC | Tool supporting system log file reporting |
7340411, | Feb 26 1998 | CXT SYSTEMS, INC | System and method for generating, capturing, and managing customer lead information over a computer network |
7620655, | May 06 2004 | DEMANDBASE INC | Method, device and computer program product for identifying visitors of websites |
7904363, | Sep 24 2008 | MORGAN STANLEY SERVICES GROUP INC | Database for financial market data storage and retrieval |
20010044791, | |||
20020022986, | |||
20020029161, | |||
20020029376, | |||
20020035577, | |||
20020042264, | |||
20020042843, | |||
20020072951, | |||
20020082892, | |||
20020129352, | |||
20020140731, | |||
20020143997, | |||
20020152102, | |||
20020161734, | |||
20020162090, | |||
20020165742, | |||
20030004971, | |||
20030018705, | |||
20030018830, | |||
20030037037, | |||
20030066031, | |||
20030066032, | |||
20030069936, | |||
20030070000, | |||
20030070004, | |||
20030070005, | |||
20030074418, | |||
20030088545, | |||
20030120675, | |||
20030151633, | |||
20030159136, | |||
20030187921, | |||
20030189600, | |||
20030191743, | |||
20030204427, | |||
20030206192, | |||
20030225730, | |||
20040001092, | |||
20040010489, | |||
20040015981, | |||
20040027388, | |||
20040128001, | |||
20040186826, | |||
20040186860, | |||
20040193510, | |||
20040199489, | |||
20040199536, | |||
20040199543, | |||
20040249854, | |||
20040260534, | |||
20040260659, | |||
20040268299, | |||
20050050555, | |||
20050091098, | |||
20070203893, | |||
20080082502, | |||
20100211609, | |||
20100241646, | |||
20110191394, | |||
20110258179, | |||
20120254241, | |||
20130173664, | |||
D454139, | Feb 20 2001 | Oracle OTC Subsidiary LLC | Display screen for a computer |
Executed on | Assignor | Assignee | Conveyance | Frame | Reel | Doc |
Jul 26 2012 | Salesforce.com, Inc. | (assignment on the face of the patent) | / | |||
Jul 26 2012 | MORIN, RAYMOND | SALESFORCE COM, INC | ASSIGNMENT OF ASSIGNORS INTEREST SEE DOCUMENT FOR DETAILS | 028650 | /0829 | |
Mar 25 2022 | SALESFORCE COM, INC | SALESFORCE, INC | CHANGE OF NAME SEE DOCUMENT FOR DETAILS | 069268 | /0001 |
Date | Maintenance Fee Events |
Jan 13 2017 | ASPN: Payor Number Assigned. |
Jul 29 2020 | M1551: Payment of Maintenance Fee, 4th Year, Large Entity. |
Aug 05 2024 | M1552: Payment of Maintenance Fee, 8th Year, Large Entity. |
Date | Maintenance Schedule |
Feb 14 2020 | 4 years fee payment window open |
Aug 14 2020 | 6 months grace period start (w surcharge) |
Feb 14 2021 | patent expiry (for year 4) |
Feb 14 2023 | 2 years to revive unintentionally abandoned end. (for year 4) |
Feb 14 2024 | 8 years fee payment window open |
Aug 14 2024 | 6 months grace period start (w surcharge) |
Feb 14 2025 | patent expiry (for year 8) |
Feb 14 2027 | 2 years to revive unintentionally abandoned end. (for year 8) |
Feb 14 2028 | 12 years fee payment window open |
Aug 14 2028 | 6 months grace period start (w surcharge) |
Feb 14 2029 | patent expiry (for year 12) |
Feb 14 2031 | 2 years to revive unintentionally abandoned end. (for year 12) |