If you haven’t heard of MemSQL yet, this post won’t really matter to you…
MemSQL is claiming to be “wire-compatible” with MySQL (bottom paragraph on http://memsql.com/). I have no idea what MemSQL means by that, but as I understand their demo / getting started pages to be written, it seems that they are saying that you can drop in MemSQL, load up your schemas, load up your data and point your MySQL client to connect to MemSQL and no one will be the wiser.
Having a number of applications at work that I’m supporting and developing that use MySQL and MySQL connectors, this seemed like a holy grail.
I was extremely skeptical but I decided to spin up an Ubuntu 12.04 LTS install with 8Gb of memory. I installed mysql-client and mysql-server. I loaded up the MySQL sample Sakila schema and then loaded the data. Great, mysql is ready to roll.
I downloaded and setup memsql and attempted to load up Sakila and got this issue:
memsql> source ./sakila-schema.sql;
Query OK, 0 rows affected, 1 warning (0.00 sec)
Query OK, 0 rows affected, 1 warning (0.00 sec)
Query OK, 0 rows affected (0.00 sec)
Query OK (0.00 sec)
Query OK, 0 rows affected (0.07 sec)
Database changed
ERROR 1286 (42000): Unknown storage engine 'InnoDB'
ERROR 1706 (HY000): Feature 'REFERENTIAL ACTIONS' is not supported by MemSQL.
ERROR 1286 (42000): Unknown storage engine 'InnoDB'
ERROR 1706 (HY000): Feature 'REFERENTIAL ACTIONS' is not supported by MemSQL.
ERROR 1286 (42000): Unknown storage engine 'InnoDB'
ERROR 1706 (HY000): Feature 'REFERENTIAL ACTIONS' is not supported by MemSQL.
ERROR 1706 (HY000): Feature 'REFERENTIAL ACTIONS' is not supported by MemSQL.
ERROR 1706 (HY000): Feature 'REFERENTIAL ACTIONS' is not supported by MemSQL.
ERROR 1706 (HY000): Feature 'REFERENTIAL ACTIONS' is not supported by MemSQL.
ERROR 1706 (HY000): Feature 'Fulltext indexes' is not supported by MemSQL.
ERROR 1706 (HY000): Feature 'CREATE TRIGGER' is not supported by MemSQL.
ERROR 1706 (HY000): Feature 'CREATE TRIGGER' is not supported by MemSQL.
ERROR 1706 (HY000): Feature 'CREATE TRIGGER' is not supported by MemSQL.
ERROR 1706 (HY000): Feature 'REFERENTIAL ACTIONS' is not supported by MemSQL.
ERROR 1286 (42000): Unknown storage engine 'InnoDB'
ERROR 1706 (HY000): Feature 'REFERENTIAL ACTIONS' is not supported by MemSQL.
ERROR 1706 (HY000): Feature 'REFERENTIAL ACTIONS' is not supported by MemSQL.
ERROR 1706 (HY000): Feature 'REFERENTIAL ACTIONS' is not supported by MemSQL.
ERROR 1706 (HY000): Feature 'REFERENTIAL ACTIONS' is not supported by MemSQL.
ERROR 1706 (HY000): Feature 'CREATE VIEW' is not supported by MemSQL.
ERROR 1706 (HY000): Feature 'CREATE VIEW' is not supported by MemSQL.
ERROR 1706 (HY000): Feature 'CREATE VIEW' is not supported by MemSQL.
ERROR 1706 (HY000): Feature 'CREATE VIEW' is not supported by MemSQL.
ERROR 1706 (HY000): Feature 'CREATE VIEW' is not supported by MemSQL.
ERROR 1706 (HY000): Feature 'CREATE VIEW' is not supported by MemSQL.
ERROR 1706 (HY000): Feature 'CREATE VIEW' is not supported by MemSQL.
ERROR 1706 (HY000): Feature 'TEMPORARY tables' is not supported by MemSQL.
ERROR 1706 (HY000): Feature 'CREATE PROCEDURE' is not supported by MemSQL.
ERROR 1706 (HY000): Feature 'CREATE PROCEDURE' is not supported by MemSQL.
ERROR 1706 (HY000): Feature 'CREATE PROCEDURE' is not supported by MemSQL.
ERROR 1706 (HY000): Feature 'CREATE PROCEDURE' is not supported by MemSQL.
ERROR 1706 (HY000): Feature 'CREATE PROCEDURE' is not supported by MemSQL.
Query OK, 0 rows affected (0.00 sec)
Query OK, 0 rows affected, 1 warning (0.00 sec)
Query OK, 0 rows affected, 1 warning (0.00 sec)
Apparently, the MemSQL team and I have completely different understandings of what “wire-compatibility” means. Here’s the list of things that aren’t supported:
- Views
- Prepared Queries
- Stored procedures
- User Defined Functions
- Triggers
- Foreign keys
- Charsets other than utf8
One would think that the MemSQL team would disclose that they didn’t support InnoDB tables. Doing a search on their developer site for the term “InnoDB” doesn’t reveal any such information.
Also, it is clear that they believe that MemSQL will be a drop-in replacement for MySQL, as the MemSQL developer guide says to transition over to MemSQL is as simple as this:
To transition your application, simply change the connection credentials to point to MemSQL.
Unless I’m missing something huge, “shenanigans”, I say. The MemSQL team should publicly clarify what they mean by “wire-compatible”.