High Availability CUBRID High Availability provides load-balanced, fault-tolerant and continuous service availability through its shared-nothing clustering, automated fail-over and manual fail-back mechanisms. CUBRID's 3-tier architecture allows native support for High-Availability with two-level auto failover: the broker failover and server failover.
Broker failover When connecting to a broker via a client
API, users can specify, in the connection
URL, a list of alternative hosts where brokers are listening for incoming requests. In case of a hardware, network,
operating system or software failure on one of the hosts, the underlying client API automatically fails over to the next host that a user has provided.
Server failover The High Availability environment can be built with 1:N master-slave server nodes. Each slave node communicates with the master via CUBRID Heartbeat protocol. When a master node is unresponsive, the first of the slave nodes will get promoted to a master role. Replication between nodes can be achieved in one of two modes: synchronous and asynchronous. Administrators can specify a list of server hosts each broker can connect to and, in the event of a failure of the master node, another will be used.
Scalability and Maintainability Backup CUBRID supports online, offline and incremental backup.
Performance API-level load balancing Because a connection broker can be configured in four different modes (read-write, read-only, slave-only, preferred host read only), the list of alternative hosts which a user has provided via the connection URL can be used as a method to balance the load. When
Load Balancing is used, the client API will randomly choose a host among those specified in the connection URL except the one which was used to connect to last time. If the chosen host is not available, the selection will continue until all the hosts are determined as unavailable. In such case, the driver will report an error.
Query plan caching A
query execution plan cache is implemented on the broker in order to skip most of the compilation steps on often used queries. Because the queries are
parametrized during parsing, two queries that differ only by the values of
literal constants share the same cache entry.
Storage Indexes CUBRID has support for
B+-tree indexes, both single-column and multi-column. The following types of indexes can be created: • Indexes and reversed indexes • Unique indexes and reverse unique indexes • Function-based indexes • Filtered indexes The
query optimizer can use indexes to produce faster execution plans using methods such as: • Identifying
covering indexes • Descending index scans • ORDER BY skip • GROUP BY skip • Multi-range limit optimizations • Index Loose Scan • Index Skip Scan
Table partitioning CUBRID supports
horizontal partitioning by range, hash and value lists, with a maximum of 1024 partitions per table. Partitions can be accessed independently and support most operations that are valid on a normal table. As of version 9.0, CUBRID implements execution-time partition
pruning.
SQL support CUBRID implements a large subset of the ANSI
SQL:1999 standard, extended with features from later SQL standards and custom features.
Window functions CUBRID provides support for
window functions as defined in the
SQL:2003 standard. The implemented functions are , , , , , , , , , , , , , and .
Hierarchical queries Hierarchical queries using the non-standard
Oracle syntax are supported in CUBRID. A number of specialized pseudocolumns and operators are provided for controlling the behavior of the query execution.
Built in click-counter CUBRID optimizes the common scenario in web applications where database fields need to be incremented on certain events (e.g. page views). In contrast to the usual approach of using a SELECT/UPDATE statement combination, CUBRID can increment fields from within the SELECT statement execution, bypassing some expensive compiling, execution and locking overhead associated with an UPDATE statement.
Java stored procedures The only
stored procedure language supported in CUBRID is
Java, requiring a
Java virtual machine to be installed on the system. The virtual machine is started and managed by the server and is used for code execution. Stored procedure code that requires database access must use the
JDBC driver, either using the parent transaction or issuing a new one.
Regular expression In addition to the LIKE operator, CUBRID provides the operator for
regular expression pattern matching. By default, the operator does a
case insensitive matching on the input string, but the modifier BINARY can be used for
case sensitive scenarios. An optional alias of is . In the prior version of CUBRID 11, CUBRID does not support on
Unicode strings. From the CUBRID 11, CUBRID adds the following regular expression functions and supports them on
Unicode strings. • , , , ,
Data types A variety of
data types are supported by CUBRID: • For numeric values: • integer numerics: (16 bit), (32 bit), (64 bit) •
floating point numerics: (32 bit), (64 bit) •
arbitrary precision numerics: • monetary values: (
double precision floating point) • For string values: • fixed-length character and bit strings: , • variable-length character and bit strings: , • For date and time values: • date values: • time values: • date and time values: , (internally stored as a
Unix timestamp) • For collections: , , • User-defined
enumerations: • For large objects: , • For JavaScript Object Notation: ==Supported platforms==