Database engine
A database engine (or storage engine) is the underlying software component that a
The term "database engine" is frequently used interchangeably with "database server" or "database management system". A "database instance" refers to the processes and memory structures of the running database engine.
Storage engines
Many of the modern DBMS support multiple storage engines within the same database. For example, MySQL supports InnoDB as well as MyISAM.
Some storage engines are transactional.
Name | License | Transactional | Compatibility | Notes |
---|---|---|---|---|
Aria | GPL |
No | MariaDB and MySQL | |
Falcon | GPL | Yes | MySQL | Discontinued |
InnoDB | GPL | Yes | MySQL and MariaDB | The default for MySQL and MariaDB |
Memory | GPL | No | MySQL and MariaDB | |
MyISAM | GPL | No | MySQL | Was the default for MySQL |
InfiniDB | GPL | No | ||
TokuDB | GPL | Yes | MySQL and MariaDB | Uses fractal tree index |
WiredTiger | GPL | Yes | MongoDB | Default for MongoDB | |
XtraDB | GPL | Yes | MariaDB and Percona Server for MySQL | |
RocksDB / MyRocks | GPL v2 or Apache 2.0 | Yes | ArangoDB, Cassandra, MariaDB, MongoDB, MySQL, SurrealDB |
Additional engine types include:
- Embedded database engines
- In-memory database engines
Design considerations
Information in a database is stored as bits laid out as
In principle the database storage can be viewed as a
Database storage hierarchy
A database, while in operation, resides simultaneously in several types of storage, forming a
Typically a correlation exists currently between storage speed and price, while the faster storage is typically volatile.
Data structures
A data structure is an abstract construct that embeds data in a well defined manner. An efficient data structure allows manipulation of the data in efficient ways. The data manipulation may include data insertion, deletion, updating and retrieval in various modes. A certain data structure type may be very effective in certain operations, and very ineffective in others. A data structure type is selected upon DBMS development to best meet the operations needed for the types of data it contains. Type of data structure selected for a certain task typically also takes into consideration the type of storage it resides in (e.g., speed of access, minimal size of storage chunk accessed, etc.). In some DBMSs database administrators have the flexibility to select among options of data structures to contain user data for performance reasons. Sometimes the data structures have selectable parameters to tune the database performance.
Databases may store data in many data structure types.[1] Common examples are the following:
- ordered/unordered flat files
- hash tables
- B+ trees
- ISAM
- heaps
Data orientation and clustering
In contrast to conventional row-orientation, relational databases can also be column-oriented or correlational in the way they store data in any particular structure.
In general, substantial performance improvement is gained if different types of database objects that are usually utilized together are laid in storage in proximity, being "clustered". This usually allows to retrieve needed related objects from storage in minimum number of input operations (each sometimes substantially time-consuming). Even for in-memory databases clustering provides performance advantage due to common utilization of large caches for input-output operations in memory, with similar resulting behavior.
For example, it may be beneficial to cluster a record of an "item" in stock with all its respective "order" records. The decision of whether to cluster certain objects or not depends on the objects' utilization statistics, object sizes, caches sizes, storage types, etc.
Database indexing
Indexing is a technique some storage engines use for improving database performance. The many types of indexes share the common property that they reduce the need to examine every entry when running a query. In large databases, this can reduce query time/cost by orders of magnitude. The simplest form of index is a sorted list of values that can be searched using a
Indexes affect performance, but not results. Database designers can add or remove indexes without changing application logic, reducing maintenance costs as the database grows and database usage evolves. Indexes can speed up data access, but they consume space in the database, and must be updated each time the data is altered. Indexes therefore can speed data access but slow data maintenance. These two properties determine whether a given index is worth the cost.
References
- ISBN 978-0-12-369389-1.