Developers

Tree-structured database


What is a tree-structured database?

The Paglo Crawler collects information about your network assets and sends it to the Search Index, which stores the data in a semi-structured tree format. The data is visually represented in an inverted tree structure with the root at the top, and each data element as a node on the tree.

In the tree structure, information is organized below the root along major branches, which can further separate into branches or sub-trees, leaves, and so on. Any individual node on the tree that has nodes below it can be thought of as a root of its own sub-branches, or as a sub-tree, or as a leaf or branch of a higher-level root.

The tree-structured database is useful because it provides the flexibility to scale and the ability to group related information and display the relationships.

The nodes in a tree-structured database are similar to records and columns in the table of a relational database. For example:

In this tree, Node A might be a device with two sub-nodes of the same type, such as interfaces; each with two sub-node children (ip_address and name). In the table, each sub-node of the same type is equivalent to a record, and each sub-node child is equivalent to a column.


Characteristics of a tree structure

The tree structure gives us the ability to provide quantitative answers to IT questions. The Paglo Crawler gathers information that is structured. For example, if you search your network for 'tetris', a full-text search algorithm finds every instance of Tetris or tetris (since Paglo is case-insensitive), and includes both computers, software, or users, if any, named Tetris.

But we wanted a smart search tool that knows the difference. And the Paglo Crawler can distinguish between a computer named Tetris and software named Tetris — and it can see the relationships between the computer and the software, such as the network that the Tetris computer belongs to, the identity of the computer with the Tetris software installed, and so on.

Some other characteristics of tree-structured databases include:

  • Leaf nodes contain values. Non-leaf nodes do not contain values.
  • Each value represents data stored in the tree-structured database.
  • Each tree node has a unique path. You can describe the node by its path, such as: /network/device/interface/mac_address
  • You can get data by querying the tree-structured database.
  • To maintain historical information, each node in the tree has the ability to keep a historical record of the previous values in that node.
  • You can add data manually by using INSERT or MERGE.
  • You can update data by using UPDATE or MERGE.
  • The root node is represented by a / slash mark at the start of the path.

Comparing trees to tables

A tree node with multiple sub-nodes of the same name — such as devices that all have an interface named 'eth0' — is equivalent to a table in a relational database. For example, a database with two devices can be represented as follows in a tree-structured database, and by a couple of tables in a relational database:

In the tree-structured database, tables are replaced by tree nodes, and columns are replaced by sub-trees. In SQL, the projection operation (the SELECT clause) generates a tuple of scalar values (a row of values). In PQL, the SELECT clause generates a tree.

In the following tree, for a table at the /device node, the columns in the table are /device/name, /device/interface, and /device/cpu_utilization:


Sub-branches

Where there is more than one sub-branch of the same type in an instance tree, the specific sub-branch is identified with an ID number. In instance trees, the leaves of the tree have values associated with them. Only leaves can have a value. The values are the information stored in the tree-structured database. The value associated with a leaf node is a complex type consisting of a scalar value and a time-series. The scalar value holds the most recent data collected for the node. The time-series contains the previous values of the node along with the time at which the value changed.


How can I find out more?