As database footprints continue to explode, many companies are looking for ways to deal with such rapid growth. One approach is to refactor traditional relational databases to fit into a NoSQL engine, where horizontal scalability is easier. However, in many cases, this is in no way a trivial undertaking.
Another approach that has been gaining interest is the use of MyRocks as an alternative storage engine to the traditional InnoDB. While not for everyone, in certain use cases it could be a potential solution. As with so many things open source, the next standard questions are: which version should I use? Any differences with the engine if I use MyRocks with MySQL 5.7 vs 8.0?
In this post, I wanted to touch on this and give some high-level thoughts on MyRocks when it comes to the version of MySQL.
At a high level, RocksDB is an embedded key-value database with data stored in a log-structured merge tree (LSM). MyRocks is an abstraction layer that allows RocksDB to serve as a MySQL storage engine. With RocksDB as the underlying storage layer, there are numerous advantages including faster replication, better compression, and faster data loading.
In contrast, InnoDB is B-Tree based structure. MySQL was designed using a plugin architecture that separates the storage engine logic from the main server functionality. This allows users to choose which storage engine they want based on their use case. Historically, this was the MyISAM storage engine. In recent years, InnoDB replaced MyISAM as the defacto standard and later the default engine.
Which Engine is Better?
Choosing which engine to use is very use case-specific. Even at Facebook, where MyRocks was first developed, it was not meant to be a universal replacement for InnoDB. Features like gap locks remain absent from MyRocks. If a workload is dependent on gap locking, it will be a non-starter with the MyRocks engine.
Also, data access patterns should dictate the engine choice. If the workload is write-intensive with limited range scans, it may be a good fit for MyRocks. If you have a traditional OLTP workload with several reporting access patterns, InnoDB would remain a better option. As mentioned in MyRocks Engine: Things to Know Before You Start:
“MyRocks is not an enhanced InnoDB, nor a one-size-fits-all replacement for InnoDB. It has its own pros/cons just like InnoDB. You need to decide which engine to use based on your application’s data access patterns.”
Which Version of MySQL Should I Use?
Assuming you have done your research and found MyRocks would be a good fit, the next choice is which version to use. Facebook runs MyRocks on a heavily patched, internal version of MySQL 5.6. Percona Server for MySQL includes MyRocks in both 5.7 and 8.0. So what are the differences?
At a high level, the MyRocks/RocksDB code is essentially the same in all three versions. Percona Server for MySQL uses the upstream version of RocksDB and only changes the linked version when Facebook MySQL updates the version. This is due to the fact that it inherits the integration testing between RocksDB and MyRocks from Facebook.
As such, the biggest differences are based solely on the server version and not the server version and MyRocks combination. If your infrastructure is already running with MySQL 5.7 in production and not ready to finalize a move to 8.0, there would be no discernible difference running the MyRocks engine with your current version. MyRocks running on Percona Server for MySQL 5.7 is stable and shouldn’t be discarded as an option. You should still plan to upgrade to 8.0, but there shouldn’t be any unique challenges in the process compared to using InnoDB. It would just require the standard upgrade process and significant testing.
Moving forward (as 5.7 approaches EOL in 2023), you can expect to see fewer enhancements with MyRocks on Percona Server for MySQL 5.7. Most new active development will be done against 8.0 while 5.7 will remain primarily in extended support, which includes critical bug fixes and security fixes only.
With all the version combinations and options, it can be overwhelming to pick the best option for your organization. For a new deployment, I would recommend starting with MyRocks on MySQL 8.0. With an existing MySQL 5.7 deployment (while you should be actively working towards an upgrade to 8.0), MyRocks is a viable and stable option as well. The biggest driver for MyRocks should be space concerns combined with the workload. As nice as it would be to say MyRocks is the silver bullet that works for everything, that just isn’t the case. You can always reach out to the Professional Services team at Percona and let us help you determine if MyRocks would be a good fit for your team!