The CUBRID project started in South Korea in 2006, with NHN (later split into Naver Corporation and NHN Entertainment in 2013) as a major co-developer. In 2008, CUBRID version 1.1 (R1.1) was released as an open source project, later this version was re-named as 8.1.1. As of December 2018, CUBRID is ranked as the 65nd most popular relational DBMS by DB-Engines.
CUBRID supports foreign key constraint, i.e. a set of columns that references the primary key in other tables. Users can also specify what action is triggered by update or delete of the primary key referenced. Options include:
CASCADE
: deletes the foreign key when the associated the primary key got deleted.SET NULL
: updates the value of the foreign key to NULL
when the corresponding record is deleted or updated.RESTRICT
: guarantees the primary key associated with this foreign key remains constant. Any transaction attempting to update or delete this primary key will be roll back.Nested Loop Join Sort-Merge Join Index Nested Loop Join
CUBRID allows user to set optimization levels and get current query plan. Specifically for join methods, it supports nested loop join, sort merge join (turned off by default), and index nested loop join.
Multi-version Concurrency Control (MVCC)
Since v10.0, CUBRID moved from two phase locking protocol (2PL) to a Multiversion Concurrency Control (MVCC) protocol. The gain is mostly non-blocking reads for read intensive applications, typical in real-world use cases. This also grants point-in-time consistent view of the database, and reduction of performance costs compared to other concurrency protocols.
CUBRID allows one master process for each host. It offers CUBRID High Availability (HA) which supports uninterrupted services under a hardware, software or network failure. It ensures database synchronization among multiple servers, and is implemented under shared-nothing architecture. Synchronization between an active server and a standby server is achieved through transaction log multiplexing and reflection.
Custom API SQL Stored Procedures Command-line / Shell
CUBRID supports a wide range of SQL syntaxs. It also provides APIs in various languages with corresponding driver, e.g. JDBC Driver, PHP Driver, CCI Driver (C-based application), Perl Driver, Python Driver, etc. Additionally, user can also interact with CUBRID via its GUI-based program called CUBRID Manager.
CUBRID allows user to configure checkpoint through two options: 1. Configure checkpoint trigger by log page size. Checkpoint will be triggered every time the transaction log size has reaches the set value. 2. Configure checkpoint tigger by time interval. Checkpoint runs in a periodical fashion. The default is 6 minutes. 3. Configure a slow data flush from the buffer to disk.
As an object-relational database, CUBRID stores records as objects with an unique Object Identifier (OID). Insertions, deletions and modifications of records on pages are managed by the Slotted Page Manager, and large object which does not fit in a single page is placed on overflow pages managed by the Overflow File Manager.
CUBRID is a disk-oriented database, memory is used for caching purposes. User can configure several disk-related parameters for database volumes and files, such as database volumn size and log volume size (both default to 512M), or the percentage of disk space allocated in a heap page for updates.
CUBRID uses B-trees for indexes files. It supports the following types of indexes:
https://github.com/CUBRID/cubrid
https://www.cubrid.org/documentation/manuals
Naver Corporation
2008
C, Java, JavaScript, Perl, PHP, Python, Ruby