The present disclosure is related to data lineage management and, in particular, to systems and methods for graph-based query analysis for fine-grained data lineage management.
Data lineage is the gene of data, which describes what happens to data as it goes through diverse processes and data manipulations. More specifically, data lineage provides visibility into the analytics pipeline and simplifies tracing errors back to their sources. Enterprises nowadays can use data lineage analysis for finding possible causality when an anomaly is detected in final data reports, or for evaluating the impact due to the modification of a data table. Such data management and analysis tasks can be crucial for maintaining the normal operation of a business.
In a “big data” environment, there can be many data sources for an enterprise that may need to be merged, joined, filtered, etc., to generate data reports periodically, which results in increased complexity when maintaining the data lineage. Therefore, tools for representing, managing, and evaluating data lineage can be essential for a company.
Various examples are now described to introduce a selection of concepts in a simplified form that are further described below in the detailed description. The Summary is not intended to identify key or essential features of the claimed subject matter, nor is it intended to be used to limit the scope of the claimed subject matter.
According to a first aspect of the present disclosure, there is provided a computer-implemented method of determining data lineage based on database queries. A received database query is parsed to identify a plurality of data entities associated with a plurality of data flows. A query graph is generated based on the received database query. The query graph includes a plurality of nodes connected via edges. The plurality nodes correspond to the plurality of data entities, and the edges correspond to the plurality of data flows. A data lineage query is retrieved from memory. The data lineage query includes one or more of the plurality of data entities associated with the plurality of nodes within the generated query graph. A representation of the generated query graph is output based on the data lineage query.
In a first implementation form of the method according to the first aspect as such, at least a second query graph is retrieved, where the second query graph includes at least one node that is common with the generated query graph.
In a second implementation form of the method according to the first aspect as such or any preceding implementation form of the first aspect, the at least one node that is common with the generated query graph includes at least one of the following: a data table, a table column, a data view, a query result set, and a user-defined function. In this regard, by modeling the user-defined tables, columns, and data transformation (including user-defined functions) in connections with generating the query graph, fine-grained operations can be noticed in the graph, allowing for fine-grained data analysis associated with data lineage.
In a third implementation form of the method according to the first aspect as such or any preceding implementation form of the first aspect, a combined property graph is generated based on the query graph and the second query graph. The combined property graph traces data lineage of data from a starting node within the query graph through the at least one common node and terminating at a node that outputs a final representation of the data. In this regard, query graphs can be aggregated by merging the vertices/nodes referring to the same entities (e.g. data tables, UDF, etc.), which can be beneficial to generate an aggregated property graph, so that all impact paths are naturally presented in a lineage graph with high-performance access optimization. Furthermore, an added benefit is that data lineage analysis can be performed on the aggregated lineage graph, resulting in a more detailed data lineage report that can be generated based on a data lineage query performed in connection with the aggregated property graph.
In a fourth implementation form of the method according to the first aspect as such or any preceding implementation form of the first aspect, a graph visualization or JavaScript Object Notation (JSON) is output using the combined property graph and based on the data lineage query. The graph visualization is based on at least one portion of the combined property graph that includes nodes corresponding to the plurality of data entities referenced in the query.
In a fifth implementation form of the method according to the first aspect as such or any preceding implementation form of the first aspect, the data lineage query is translated into one or more graph query languages compatible with the generated query graph.
In a sixth implementation form of the method according to the first aspect as such or any preceding implementation form of the first aspect, a plurality of attributes for the plurality of data entities are detected. The plurality of nodes corresponding to the plurality of data entities is appended with the plurality of attributes.
In a seventh implementation form of the method according to the first aspect as such or any preceding implementation form of the first aspect, the received database query is validated before the parsing. The validated query is executed to generate a query report.
In an eighth implementation form of the method according to the first aspect as such or any preceding implementation form of the first aspect, the validated query is executed concurrently with generating the query graph.
In a ninth implementation form of the method according to the first aspect as such or any preceding implementation form of the first aspect, one or more of the plurality of data flows are detected as associated with data operations that manipulate data without affecting the query report.
In a tenth implementation form of the method according to the first aspect as such or any preceding implementation form of the first aspect, the one or more of the plurality of data flows are excluded from the query graph.
In an eleventh implementation form of the method according to the first aspect as such or any preceding implementation form of the first aspect, the database query includes a nested query, and one of the plurality of nodes within the query graph is associated with a structured query language (SQL) operation of the nested query.
According to a second aspect of the present disclosure, there is provided a device including a memory storage with instructions, and one or more processors in communication with the memory storage. The one or more processors execute the instructions to perform operations including parsing a received database query to identify a plurality of data entities associated with a plurality of data flows. A query graph is generated based on the received database query, the query graph including a plurality of nodes connected via edges. The plurality nodes correspond to the plurality of data entities and the edges correspond to the plurality of data flows. A data lineage query is retrieved from memory, where the data lineage query includes one or more of the plurality of data entities associated with the plurality of nodes within the generated query graph. A representation of the generated query graph is output based on the data lineage query.
In a first implementation form of the device according to the second aspect as such, the one or more processors execute the instructions to perform operations further including retrieving at least a second query graph. The second query graph includes at least one node that is common with the generated query graph.
In a second implementation form of the device according to the second aspect as such or any preceding implementation form of the second aspect, the one or more processors execute the instructions to perform operations further including generating a combined property graph based on the query graph and the second query graph.
In a third implementation form of the device according to the second aspect as such or any preceding implementation form of the second aspect, the one or more processors execute the instructions to perform operations further including outputting a graph visualization or JavaScript Object Notation (JSON) using the combined property graph and based on the data lineage query.
In a fourth implementation form of the device according to the second aspect as such or any preceding implementation form of the second aspect, the one or more processors execute the instructions to perform operations further including detecting a plurality of attributes for the plurality of data entities.
In a fifth implementation form of the device according to the second aspect as such or any preceding implementation form of the second aspect, the one or more processors execute the instructions to perform operations further including appending the plurality of nodes corresponding to the plurality of data entities with the plurality of attributes.
In a sixth implementation form of the device according to the second aspect as such or any preceding implementation form of the second aspect, the one or more processors execute the instructions to perform operations further including detecting one or more of the plurality of data flows are associated with data operations that manipulate data without affecting a query report resulting from executing the database query.
In a seventh implementation form of the device according to the second aspect as such or any preceding implementation form of the second aspect, the one or more processors execute the instructions to perform operations further including excluding the one or more of the plurality of data flows from the query graph.
According to a third aspect of the present disclosure, there is provided a non-transitory computer-readable medium storing instructions for determining data lineage based on database queries, that when executed by one or more processors, cause the one or more processors to perform operations. The operations include parsing a received database query to identify a plurality of data entities associated with a plurality of data flows. A query graph is generated based on the received database query, the query graph including a plurality of nodes connected via edges. The plurality nodes correspond to the plurality of data entities and the edges correspond to the plurality of data flows. A data lineage query is retrieved from memory. The data lineage query includes one or more of the plurality of data entities associated with the plurality of nodes within the generated query graph. A representation of the generated query graph is output based on the data lineage query.
In a first implementation form of the non-transitory computer-readable medium according to the third aspect as such, the instructions further cause the one or more processors to perform operations including detecting a plurality of attributes for the plurality of data entities; and
In a second implementation form of the non-transitory computer-readable medium according to the third aspect as such or any preceding implementation form of the third aspect, the instructions further cause the one or more processors to perform operations including appending the plurality of nodes corresponding to the plurality of data entities with the plurality of attributes.
Any one of the foregoing examples may be combined with any one or more of the other foregoing examples to create a new embodiment within the scope of the present disclosure.
In the drawings, which are not necessarily drawn to scale, like numerals may describe similar components in different views. The drawings illustrate generally, by way of example, but not by way of limitation, various embodiments discussed in the present document.
It should be understood at the outset that although an illustrative implementation of one or more embodiments is provided below, the disclosed systems and methods described for
In the following description, reference is made to the accompanying drawings that form a part hereof, and in which are shown, by way of illustration, specific embodiments which may be practiced. These embodiments are described in sufficient detail to enable those skilled in the art to practice the inventive subject matter, and it is to be understood that other embodiments may be utilized, and that structural, logical, and electrical changes may be made without departing from the scope of the present disclosure. The following description of example embodiments is, therefore, not to be taken in a limiting sense, and the scope of the present disclosure is defined by the appended claims.
The functions or algorithms described herein may be implemented in software, in one embodiment. The software may consist of computer-executable instructions stored on computer-readable media or a computer-readable storage device such as one or more non-transitory memories or other types of hardware-based storage devices, either local or networked. The software may be executed on a digital signal processor, application-specific integrated circuit (ASIC), programmable data plane chip, field-programmable gate array (FPGA), microprocessor, or another type of processor operating on a computer system, such as a switch, server, or another computer system, turning such a computer system into a specifically programmed machine.
As used herein, the term “data lineage” indicates a representation of what happens to data as it undergoes various processes, such as data manipulations, aggregations, and so forth. In an aspect, data lineage can be represented on a graph (e.g.,
As used herein, the term “coarse-grained analysis” indicates data analysis techniques that can be used to analyze data lineage up to the level of a database table. As used herein, the term “fine-grained analysis” indicates data analysis techniques that can be used to analyze data lineages beyond a database table, such as table sub-components including table columns and fields. As used herein, the terms “node” and “vertex” are interchangeable and indicate a stateful entity within a graph (i.e., a data-related entity that can be characterized by a specific state, properties, and/or attributes). As used herein, the terms “edge” or “arc” are interchangeable and indicate a connection between two nodes, signifying a specific data transformation or other data manipulation taking place between the nodes.
There are challenges in managing data lineage in current enterprises. For example, existing data lineage tools are typically coarse-grained analysis tools provided by a particular data management system, resulting in limited capabilities. More specifically, data lineage analysis can be difficult with conventional data lineage tools in aspects when two or more different database systems are used (in reality, a business platform usually consists of several database systems). Additionally, currently-used coarse-grained data lineage management and analysis tools lead to a high rate of false alarms due to the presence and impact of wide tables within the analyzed databases. Therefore, a cross-system data lineage management with high usability and fine-grained data analysis is needed.
Techniques disclosed herein can be used to provide fine-grained data lineage analysis based on query graph representation and aggregation. More specifically, techniques for graph-based query analysis can include three components. Firstly, a fine-grained query graph is generated from a database query. A query is parsed and decomposed to identify stateful entities—e.g., any objects that can be created by users in a data management system, including tables (external, internal and temporal), columns, view, stored procedures, query result sets, user-defined functions (UDFs), and so forth. Each of the stateful entities can be assigned a graph node. An edge in the graph can be a connection between two nodes and can represent data flow between the nodes or a data transformation. Additional properties can be assigned to each node, where the properties can include attributes and descriptions. By modeling the user-defined tables, columns, and data transformation (including user-defined functions), fine-grained operations can be noticed in the graph, allowing for fine-grained data analysis associated with data lineage. Secondly, query graphs can be aggregated by merging the vertices/nodes referring to the same entities (e.g. data tables, UDF, etc.) to generate an aggregated property graph, so that all impact paths are naturally presented in a lineage graph with high-performance access optimization. Thirdly, data lineage analysis can be performed on the aggregated lineage graph, and a data lineage report can be generated based on a data lineage query performed in connection with the aggregated property graph.
Existing data lineage tools are specific to a certain database management system, and a business platform can consist of multiple and different database systems. Existing data lineage analysis tools perform only coarse-grained data analysis (e.g., based on a database table being the smallest analysis component), which introduces many false alarms when data lineage trace is performed. By using techniques disclosed herein, fine-grained lineage analysis can be performed by generating a lineage graph based on database queries where user-defined components (including table sub-components, such as columns and fields) are represented by individual nodes, allowing for fine-grained and efficient data lineage analysis.
In some aspects, the validated query 225 is also used for query graph generation 255, resulting in a query graph 260. In an example embodiment, the query graph generation 255 can take place concurrently with the query execution 230. At operation 265, the query graph 260 can be aggregated with one or more previously generated query graphs stored within the property graph storage 275 of the graph database module 270 to generate one or more property graphs (details of the graph database module 270 are illustrated in greater detail in
The graph fusion module 310 includes suitable interfaces, circuitry, and/or code configured to aggregate query graphs to generate a property graph. More specifically, the graph fusion module 310 retrieves one or more stored graphs 315 (e.g., based on the detected/identified nodes and edges within the query graph 260) and performs graph aggregation with the query graph 260 to generate a property graph 320. The property graph 320 is then stored back in the property graph storage 275.
The data lineage query 280 is received by the query translation module 325. The query translation module 325 includes suitable interfaces, circuitry, and/or code configured to perform translation of the lineage query 280 from a data query language to a graph query language (e.g., Gremlin or Cypher) using graph query algorithms 330. The translated data lineage query is executed to generate lineage query execution results 335. The lineage query execution results 335 can be further reformatted to generate final results 290 that are communicated to the inspector 205B. For example, the lineage query execution results 335 can be reformatted by the graph visualization module 340, which can be configured to reformat the results 335 into a JavaScript Object Notation (JSON) or another type of visualization for presentation to the inspector 205B.
As seen in
Both tables HIGH_SAL_EMP and EMPLOYEE have their columns/fields. More specifically, table EMPLOYEE can include columns/fields called EMP_ID, NAME, and so forth. The table HIGH_SAL_EMP is derived from the table EMPLOYEE (i.e., the contents of HIGH_SAL_EMP are derived from EMPLOYEE via the INSERT-with-SELECT statement within the SQL query 640. The table EMPLOYEE columns/fields can be represented as nodes 610 and 615, and the corresponding columns/fields in table HIGH_SAL_EMP, which are derived from table EMPLOYEE, are represented as nodes 630 and 635.
Additionally, one or more of the nodes in the query graph 600 can be annotated with node properties, such as attributes and descriptions. For example, node 620 is annotated with the label “SQL Statement” and subclass “Insert_Select” which describe the SQL operation associated with query 640. Nodes 605 and 625 are annotated with label “Table” to indicate that these are data tables, as well as a “Name” annotation to indicate the table name as used within the query 640. The table columns/fields nodes (e.g., 610, 615, 630, and 635) are annotated with properties such as “Label”, “Name”, and “Type”.
The data transitions and transformations represented by each edge of the query graph 600 can also be annotated with edge properties. For example, the dotted line edges between nodes 610-630 and 615-635 are annotated with label “Derived” to indicate that data is derived from one table into the other.
In some aspects, dashed boxes (or another type of graphical designation) can be placed within the query graph to represent a table or a view. For example and as illustrated in
The operation of determining a count of the customer ID column that is greater than five is represented by function nodes 740 and 745. For example, node 745 represents the “HAVING . . . >5” filtering operation, with operator ID 14 corresponding to comparison function “>”, and parameter “5” indicating “>5”. An output the result representation 750 is generated as a result of executing the query 705. Since the result representation 750 is a view (i.e., temporal data) and is not stored in a table, the output arrow from node 725 associated with the result representation 750 is illustrated with a dashed arrow within query graph 700.
In some aspects, one or more of the node connections within a query graph can be omitted to simplify the graph. For example, the “OrderBy” and “GroupBy” dotted line connections between nodes 740-725 and 730-725 can be omitted from the graph since these connections signify data rearrangement functions that do not ultimately change the query result. A simplified query graph omitting data rearrangement functions is illustrated in
A separate node 935 is created for the SQL statement of the nested query 975 (i.e., the SELECT function). Data referral nodes 940 and 950 can be generated, using data from nodes 925 and 930 respectively. The WHERE function within the nested query 975 is associated with node 945 using input from node 920. An outline box 910 can be created within query graph 900 to represent the nested query 975 and its associated data processing and manipulation functions.
A separate node 955 is created for the SQL statement of the main query 905 (i.e., the SELECT function). A data referral node 960 is generated, using referred data from node 925. The AVG function within the query 905 is associated with node 965 using data from node 930. An outline box 980 can be created within query graph 900 to represent the main query 905 and its associated data processing and manipulation functions. The output from node 955 is the result representation 970 from execution of the query 905.
In an example aspect, individual query graphs can be aggregated to generate an aggregate property graph by locating a common node within the individual query graphs and aggregating the individual graphs around the common node. Individual query graphs can also be aggregated if the output from one query graph is an input to another query graph. Multiple property graphs can also be aggregated based on one or more common nodes.
For example, since the output from node 1010K of query graph 1005 is input to node 1020A of query graph 1015, query graphs 1005 and 1015 can be aggregated. In another aspect, node 1010K can be the same as node 1020A and query graphs 1005 and 1015 can be aggregated based on the common node.
As illustrated in
One example computing device in the form of a computer 1100 (also referred to as computing device 1100 and computer system 1100) may include a processor 1105, memory storage 1110, removable storage 1115, non-removable storage 1120, input interface 1125, the output interface 1130, and communication interface 1135, all connected by a bus 1140. Although the example computing device is illustrated and described as the computer 1100, the computing device may be in different forms in different embodiments.
The memory storage 1110 may include volatile memory 1145 and non-volatile memory 1150 and may store a program 1155. The computer 1100 may include—or have access to a computing environment that includes—a variety of computer-readable media, such as the volatile memory 1145, the non-volatile memory 1150, the removable storage 1115, and the non-removable storage 1120. Computer storage includes random-access memory (RAM), read-only memory (ROM), erasable programmable read-only memory (EPROM) and electrically erasable programmable read-only memory (EEPROM), flash memory or other memory technologies, compact disc read-only memory (CD ROM), digital versatile disks (DVD) or other optical disk storage, magnetic cassettes, magnetic tape, magnetic disk storage or other magnetic storage devices, or any other medium capable of storing computer-readable instructions.
Computer-readable instructions stored on a computer-readable medium (e.g., the program 1155 stored in the memory 1110) are executable by the processor 1105 of the computer 1100. A hard drive, CD-ROM, and RAM are some examples of articles including a non-transitory computer-readable medium such as a storage device. The terms “computer-readable medium” and “storage device” do not include carrier waves to the extent that carrier waves are deemed too transitory. “Computer-readable non-transitory media” includes all types of computer-readable media, including magnetic storage media, optical storage media, flash media, and solid-state storage media. It should be understood that software can be installed in and sold with a computer. Alternatively, the software can be obtained and loaded into the computer, including obtaining the software through a physical medium or distribution system, including, for example, from a server owned by the software creator or from a server not owned but used by the software creator. The software can be stored on a server for distribution over the Internet, for example. As used herein, the terms “computer-readable medium” and “machine-readable medium” are interchangeable.
The program 1155 may utilize a customer preference structure using modules such as a query parsing module 1160, a query validation module 1165, a property graph generation module 1170, and a lineage query processing module 1175. Any one or more of the modules described herein may be implemented using hardware (e.g., a processor of a machine, an application-specific integrated circuit (ASIC), field-programmable gate array (FPGA), or any suitable combination thereof). Moreover, any two or more of these modules may be combined into a single module, and the functions described herein for a single module may be subdivided among multiple modules. Furthermore, according to various example embodiments, modules described herein as being implemented within a single machine, database, or device may be distributed across multiple machines, databases, or devices.
The query parsing module 1160 includes suitable circuitry, logic, interfaces, and/or code, and is configured to parse database queries to detect (e.g., identify) data-related entities within the query. Such entities can include a user-created object with a specific state within a data processing system, such as a table (e.g., external, internal, and temporal), a table column, a data view, a table row, a stored procedure, a query result set, a user-defined function (UDF), and so forth. The data-related entity can be further characterized by properties, which can include attributes and descriptions. The query parsing module 1160 is also configured to detect data flows and transformations associated with the database query.
The query validation module 1165 includes suitable circuitry, logic, interfaces, and/or code, and is configured to perform query validation of a received query (e.g., as performed at query validation operation to 20 in
The property graph generation module 1170 includes suitable circuitry, logic, interfaces, and/or code, and is configured to generate one or more query graphs as well as perform aggregation of query graphs to generate one or more property graphs. More specifically, the property graph generation module 1170 is configured to generate a query graph based on the nodes, edges, and properties obtained by the query parsing module 1160. The property graph generation module 1170 can perform the same functions as query graph generation 255 in
The lineage query processing module 1175 includes suitable circuitry, logic, interfaces, and/or code, and is configured to process data lineage queries and generate lineage query execution results using one or more property graphs. More specifically, the lineage query processing module 1175 can perform the same functions as the query translation module 325 and the graph visualization module 340, as described in connection with
In some aspects, one or more of the modules 1160-1175 can be integrated as a single module, performing the corresponding functions of the integrated modules.
At operation 1205, a received database query is parsed to detect (e.g., identify) a plurality of data entities associated with a plurality of data flows. For example, the query parsing module 1160 can receive and parse query 805 to detect the data-related entities, data flows, transformations, and properties associated with the query 805.
At operation 1210, a query graph associated with the received database query is generated. For example, the property graph generation module 1170 can generate query graph 800 based on the data-related entities, data flows, transformations, and properties detected by the query parsing module 1160. The query graph 800 includes a plurality of nodes (e.g., 810, 815, 820, 825, and 830) connected via edges, where the plurality nodes correspond to the plurality of data entities and the edges correspond to the plurality of data flows.
At operation 1215, a data lineage query is retrieved from memory. The data lineage query includes one or more of the plurality of data entities associated with the plurality of nodes within the generated query graph. For example, the lineage query processing module 1175 retrieves (e.g., from volatile memory 1145 or non-volatile memory 1150) a lineage query 280 originating from a user (e.g., a data inspector) 205B. The lineage query processing module 1175 translates the query into a query graph language (e.g., using graph query algorithms 330).
In aspects when the data lineage query does not include data entities associated with the generated query graph, the lineage query processing module 1175 can retrieve another query graph (or a property graph based on multiple aggregated query graphs) from property graph storage 275, with the retrieved query graph including the data entities within the data lineage query.
At operation 1220, the lineage query processing module 1175 outputs a representation of the generated query graph based on the data lineage query. For example, the lineage query processing module 1175 executes the translated data lineage query by using one or more property graphs stored within storage 275 to generate lineage query execution results 335. The lineage query processing module 1175 uses the graph visualization module 340 to generate final results 290 that can be returned to user 205B.
Although a few embodiments have been described in detail above, other modifications are possible. For example, the logic flows depicted in the figures do not require the particular order shown, or sequential order, to achieve desirable results. Other steps may be provided, or steps may be eliminated, from the described flows, and other components may be added to, or removed from, the described systems. Other embodiments may be within the scope of the following claims.
It should be further understood that software including one or more computer-executable instructions that facilitate processing and operations as described above regarding any one or all of the steps of the disclosure can be installed in and sold with one or more computing devices consistent with the disclosure. Alternatively, the software can be obtained and loaded into one or more computing devices, including obtaining the software through physical medium or distribution system, including, for example, from a server owned by the software creator or from a server not owned but used by the software creator. The software can be stored on a server for distribution over the Internet, for example.
Also, it will be understood by one skilled in the art that this disclosure is not limited in its application to the details of construction and the arrangement of components outlined in the description or illustrated in the drawings. The embodiments herein are capable of other embodiments and capable of being practiced or carried out in various ways. Also, it will be understood that the phraseology and terminology used herein is for description and should not be regarded as limiting. The use of “including,” “comprising,” or “having” and variations thereof herein is meant to encompass the items listed thereafter and equivalents thereof as well as additional items. Unless limited otherwise, the terms “connected,” “coupled,” and “mounted,” and variations thereof herein are used broadly and encompass direct and indirect connections, couplings, and mountings. Also, the terms “connected” and “coupled” and variations thereof are not restricted to physical or mechanical connections or couplings. Further, terms such as up, down, bottom, and top are relative, and are employed to aid illustration, but are not limiting.
The components of the illustrative devices, systems, and methods employed by the illustrated embodiments can be implemented, at least in part, in digital electronic circuitry, analog electronic circuitry, or computer hardware, firmware, software, or in combinations of them. These components can be implemented, for example, as a computer program product such as a computer program, program code or computer instructions tangibly embodied in an information carrier, or a machine-readable storage device, for execution by, or to control the operation of, data processing apparatus such as a programmable processor, a computer, or multiple computers.
A computer program can be written in any form of programming language, including compiled or interpreted languages, and it can be deployed in any form, including as a stand-alone program or as a module, component, subroutine, or another unit suitable for use in a computing environment. A computer program can be deployed to be executed on one computer or multiple computers at one site or distributed across multiple sites and interconnected by a communication network. Also, functional programs, codes, and code segments for accomplishing the techniques described herein can be easily construed as within the scope of the claims by programmers skilled in the art to which the techniques described herein pertain. Method steps associated with the illustrative embodiments can be performed by one or more programmable processors executing a computer program, code, or instructions to perform functions (e.g., by operating on input data and/or generating an output). Method steps can also be performed by, and apparatus for performing the methods can be implemented as, special purpose logic circuitry, e.g., an FPGA (field-programmable gate array) or an ASIC (application-specific integrated circuit), for example.
The various illustrative logical blocks, modules, and circuits described in connection with the embodiments disclosed herein may be implemented or performed with a general-purpose processor, a digital signal processor (DSP), an ASIC, an FPGA or other programmable logic device, discrete gate or transistor logic, discrete hardware components, or any combination thereof designed to perform the functions described herein. A general-purpose processor may be a microprocessor, but in the alternative, the processor may be any conventional processor, controller, microcontroller, or state machine. A processor may also be implemented as a combination of computing devices, e.g., a combination of a DSP and a microprocessor, a plurality of microprocessors, one or more microprocessors in conjunction with a DSP core, or any other such configuration.
Processors suitable for the execution of a computer program include, by way of example, both general and special purpose microprocessors, and any one or more processors of any kind of digital computer. Generally, a processor will receive instructions and data from a read-only memory or a random-access memory or both. The required elements of a computer are a processor for executing instructions and one or more memory devices for storing instructions and data. Generally, a computer will also include, or be operatively coupled to receive data from or transfer data to, or both, one or more mass storage devices for storing data, e.g., magnetic, magneto-optical disks, or optical disks. Information carriers suitable for embodying computer program instructions and data include all forms of non-volatile memory, including by way of example, semiconductor memory devices, e.g., electrically programmable read-only memory or ROM (EPROM), electrically erasable programmable ROM (EEPROM), flash memory devices, and data storage disks (e.g., magnetic disks, internal hard disks, or removable disks, magneto-optical disks, and CD-ROM and DVD-ROM disks). The processor and the memory can be supplemented by, or incorporated in special purpose logic circuitry.
Those of skill in the art understand that information and signals may be represented using any of a variety of different technologies and techniques. For example, data, instructions, commands, information, signals, bits, symbols, and chips that may be referenced throughout the above description may be represented by voltages, currents, electromagnetic waves, magnetic fields or particles, optical fields or particles, or any combination thereof.
As used herein, “machine-readable medium” (or “computer-readable medium”) means a device able to store instructions and data temporarily or permanently and may include, but is not limited to, random-access memory (RAM), read-only memory (ROM), buffer memory, flash memory, optical media, magnetic media, cache memory, other types of storage (e.g., Erasable Programmable Read-Only Memory (EEPROM)), and/or any suitable combination thereof. The term “machine-readable medium” should be taken to include a single medium or multiple media (e.g., a centralized or distributed database, or associated caches and servers) able to store processor instructions. The term “machine-readable medium” shall also be taken to include any medium, or combination of multiple media, that is capable of storing instructions for execution by one or more processors (e.g., processor 1105 in
In addition, techniques, systems, subsystems, and methods described and illustrated in the various embodiments as discrete or separate may be combined or integrated with other systems, modules, techniques, or methods without departing from the scope of the present disclosure. Other items shown or discussed as coupled or directly coupled or communicating with each other may be indirectly coupled or communicating through some interface, device, or intermediate component whether electrically, mechanically, or otherwise. Other examples of changes, substitutions, and alterations are ascertainable by one skilled in the art and could be made without departing from the spirit and scope disclosed herein.
Although the present disclosure has been described concerning specific features and embodiments thereof, it is evident that various modifications and combinations can be made thereto without departing from the scope of the disclosure. For example, other components may be added to, or removed from, the described systems. The specification and drawings are, accordingly, to be regarded simply as an illustration of the disclosure as defined by the appended claims, and are contemplated to cover any modifications, variations, combinations or equivalents that fall within the scope of the present disclosure. Other aspects may be within the scope of the following claims.
This application is a continuation application of International Application No. PCT/CN2019/106563, filed Sep. 19, 2019, which claims priority to the U.S. Provisional Patent Application Ser. No. 62/733,998, filed Sep. 20, 2018, the contents of both of which are incorporated herein by reference in their entirety.
Number | Date | Country | |
---|---|---|---|
62733998 | Sep 2018 | US |
Number | Date | Country | |
---|---|---|---|
Parent | PCT/CN2019/106563 | Sep 2019 | US |
Child | 16947288 | US |