The Nuxeo Platform supports MySQL as a backend database. If you choose MySQL for your Nuxeo project, you should know that in the past, we have encountered some limitations that could impact your user experience.
Limitations that impact functionality
- MySQL has no datetime data type with a precision less than 1 second (reference). This means that events occurring in the same second cannot be properly ordered, which means that document versioning could be inaccurate if a document is changed more than once in a single second.
- Configuration of MySQL's fulltext features requires external plugins to change things like stop words or stemming rules (reference).
- It is not possible to get proper relevance ranking for boolean fulltext results, or to normalize the relevance between 0 and 1. This can lead to imprecise fulltext results..
- MySQL has a 64 KB row size limit, which means that it is not possible to put more than a few long VARCHAR() columns in a table or a schema. This means any custom schemas created for Nuxeo have to be carefully defined to not contain too many string fields. (Note: MySQL is not alone in having row size limitations, and since Nuxeo 5.3 it's possible to use a
CLOBcolumn to work around the size limit by specifying the field as
<field type="largetext">; see NXP-3993.)
- In MySQL, equality tests for strings are case-insensitive. This means that some custom application queries may confuse uppercase and lowercase.
Limitations that impact performance
- The lack of array datatypes in the stored procedures language leads to poor ACL checking performance. This means that large data sets will have problems doing security checks efficiently.
- Triggers are not activated by cascaded foreign key actions (reference).
- Foreign key on delete cascade operations are limited to 15 levels deep, which means that recursive deletion of folders that deep cannot be done by the database alone (reference).
- Fulltext operations have concurrent behavior problems when there are writes due to MyISAM locking issues. This means that concurrent updates to different documents may end up causing user-visible errors.
- MySQL loses connections unexpectedly, which requires configuring
;autoReconnect=trueas a workaround, which could cause transaction problems. (It's better to configure MySQL with an near-infinite wait_timeout).
- The fulltext support is not transactional as fulltext requires MyISAM tables (reference).
See also the limitations of other databases.
Page:Configuring MS SQL Server (Nuxeo Installation and Administration)Page:Configuring Oracle (Nuxeo Installation and Administration)Page:Configuring PostgreSQL (Nuxeo Installation and Administration)Page:Connecting Nuxeo to the Database (Nuxeo Installation and Administration)Page:Database limitations (Nuxeo Technical Knowledge Base (FAQ))Page:H2 limitations (Nuxeo Technical Knowledge Base (FAQ))Page:How to Estimate Disk and Database Usage (Nuxeo Installation and Administration)Page:MySQL limitations (Nuxeo Technical Knowledge Base (FAQ))Page:Oracle limitations (Nuxeo Technical Knowledge Base (FAQ))Page:PostgreSQL limitations (Nuxeo Technical Knowledge Base (FAQ))Page:SQL Server limitations (Nuxeo Technical Knowledge Base (FAQ))