Ingres is an open-source relational database management system (DBMS) designed for large-scale commercial and government applications. Actian Corporation currently oversees the development of the database while providing certified binaries and support. The latest version is Ingres 11, which is also known commercially as the Actian X Hybrid Database.
When two University of California, Berkeley professors, Michael Stonebraker and Eugene Wong, read the papers about System R at IBM in 1973, they became interested in applying the concepts in those papers on a research project of their own, and thus Ingres was born.
In the mid-1980s, Ingres competed against Oracle in the then-emerging relational DBMS market. These two systems were considered to have comparable functionalities and performance, and were the market leaders. However, from then on, Ingres slowly lost market share to Oracle presumably due to the latter's more aggressive marketing, and more importantly, the recognition of SQL as the go-to query language, which Ingres did not use at the time. It used a query language called QUEL and the transition to SQL took three years. Nevertheless, Ingres reincarnated as the underlying source code of many commercial databases, one of the most well-known being Relational Technology Inc, founded by the very same two professors who started Ingres as a research project. The company was later renamed Ingres Corporation in the late 1980s, and continued to provide commercial database products with Ingres lying underneath. Although Ingres never achieved the same market prominence as its once head-to-head contender Oracle, it endured over the years and was the inspiration for many other popular database management systems, such as Postgres.
In 2011, Ingres Corporation was renamed Actian Corporation and has continued its support on the classic DBMS since then. It is currently branded as the Actian X Hybrid Database.
Ingres supports two types of checkpointing: online and offline. Offline checkpointing requires all users to disconnect from the database. It acquires a global lock on the entire database and performs backup on all the data. Online checkpointing does not require users to disconnect and is the default checkpointing scheme. Therefore, it is faster than offline checkpointing as it results in less down-time. However, it is still blocking. Users cannot proceed until the Ingres creates a consistent point of the database. The DBMS records all changes in the database but does not support operations such as drop or create during online checkpointing.
Heaps Indexed Sequential Access Method (ISAM)
Heaps and ISAM are supported by Ingres.
Custom API SQL Stored Procedures Command-line / Shell QUEL
Ingres was originally built on UNIX, hence it supports a command-line interface. It also supports SQL and QUEL and stored procedures in these two query languages. In addition, applications can use OpenAPI, a set of APIs in the C programming language, to interact with Ingres.
Multi-version Concurrency Control (MVCC) Deterministic Concurrency Control Two-Phase Locking (Deadlock Detection)
Ingres uses the terms "logical lock" and "physical lock" to refer to transaction locks and latches, respectively. It supports multiversion concurrency control (MVCC). Its available lock levels are, from most to least granular, are Row, MVCC, Page, Table, Database.
It supports the following lock modes: NL(no lock), IS(intent to share), IX(intent to update), S(shared), SIX(shared with intent to update), and X(exclusive access). The locks in Ingres are managed by a lock manager. They are tracked using their unique lock IDs.
It supports deadlock detection and aborts one of the transactions that are deadlocked.
One can create an index on an existing table in Ingres using the CREATE INDEX command. An index cannot contain more than 32 columns, but one can create as many indexes as needed on a table. Ingres chooses ISAM (Index Sequential Access Method) as the index data structure by default, but also supports B+ Tree, Hash Table, and R-Tree for this purpose. It can also create secondary indexes. In addition, it can create an index in parallel to reduce the time needed.
Read Uncommitted Read Committed Serializable Repeatable Read
Ingres supports four isolation levels, from favoring consistency to maximizing concurrency: Serializable, Repeatable Read, Read Committed. and Read Uncommitted, Serializable is the default isolation level because it provides the strongest consistency guarantee.
Ingress's compression of tables only work on character and text columns. Trailing nulls and blanks are compressed. Non-nullable types such as Integer, floating point, and date are not compressed. It is not mentioned in the documentation that Ingres supports other types of compression schemes. Compression is applied to each page independently. It is shown in both the documentation and the original paper that compression in Ingres is useful in storing variable length domains. For example, if there is a column storing customer's reviews on a local business, then each review is padding at the end with nulls if it is shorter than the maximum allowed length to maintain homogeneity across the column. By applying compression on this column, these trailing nulls are compressed and the reviews take much less disk space because most of them are expected to be shorter than the maximum allowed length. However, the documentation suggests that compression should be used situationally, as decompression consumes CPU resources. It is up to the application to weight the trade-off between CPU utilization and disk space.
Nested Loop Join Hash Join Sort-Merge Join
Ingres supports hash join, sort-merge join, and nested loop join algorithms.
http://www.actian.com/products/ingres
http://docs.actian.com/ingres/11.0/index.html
Actian
1974
Actian
Academic, Commercial, Open Source