MySQL creator Monty Widenius released a new transactional storage engine for the open-source database system. The new storage engine, code-named Maria, has many enterprise-class features for data safety and performance.
Ever since Oracle acquired InnoDB, the company behind its namesake transactional storage engine, MySQL users have been wondering what new transactional storage engine the makers of the open-source database server would provide as a replacement.
Today, MySQL creator Monty Widenius released the 1.0 version of Maria, which, in Widenius' words, is:
A crash-safe alternative to MyISAM. That is, on crash, Maria will, on mysqld restart, recover all tables to the state at the start of a statement or at the start of a previous LOCK TABLES.
The significance of MySQL's modular architecture, and the various storage engines that make use of that modularity, are explained by Mike Peters in MySQL Storage Engines. Noting that:
A well designed MySQL-powered application will use different storage engines for different tables...
Peters explains that:
One of the greatest things about MySQL, other than being free, widely supported and fast, is the flexibility of choosing different storage engines for different tables...
Out of the box, MySQL comes with 7 storage engines, including an "example" stub storage engine that allows you to implement your own storage library. Every storage engine is completely different, designed to address a unique application need. Not being locked down to a single storage engine (like Oracle), means you can optimize and choose the best tool for the job...
The most popular storage engine is the default MyISAM, written by Widenius, that has no transaction support, and trades some reliability for higher performance in read-mostly applications. InnoDB is a transactional engine that provides locking at the row-level, but is now being developed by Oracle. NDB is another storage engine, designed by Ericsson, that provides replicated and clustered operations, but limited database sizes. Additional engines include an in-memory engine for temporary tables, and an archive engine for storing data without indexes.
Maria fills the role of a highly reliable, transactional, open-source storage engine. Widenius points out that Maria provides:
Concurrent selects (thanks to MVCC)
The goal of Maria, according to Widenius, is:
To create a new, ACID and multi-version concurrency Control (MVCC), transactional storage engine that can function as the default non-transactional and the default transactional storage engine for MySQL...
To be a MyISAM replacement. This is possible as Maria can also be run in non-transactional mode, supports all row formats as MyISAM and supports or will support all major features of MyISAM... Maria to be standard part of MySQL 6.X
To what extent do you take advantage of database-level features in your applications? And to what degree are you willing to trade application portability for higher performance?