Hello everyone.
Over the last few months I’ve been working on larger Neos projects and experienced many performance issues. I will adress one of those in this RFC.
Eel queries give you the ability to filter nodes by property, just like this:
${q(site).find('[instanceof My.Site:Page][showInSitemap = true]')}
This feature is very helpful in a variety of cases – but due to the way it is currently implemented it is also very slow. This query would cause Neos to get all nodes of type My.Site:Page
from the database and then filter them by property in PHP.
There are other places where Neos needs to perform equal tasks, e.g. NodeSearchService
uses a LIKE
string search to filter nodes by property but that’s not much better.
The proposal
- Migrate the
properties
column of theneos_contentrepository_domain_model_nodedata
table to JSONB (PostgreSQL) and JSON (MySQL/MariaDB) - Make Neos use the DBMS advanced querying capabilities for those data types
Request for comments
Neos already requires very current versions of the supported DBMS and this step seems logical to me. In fact, I am wondering why it has not been done yet and suspect it might be a larger task. I will hopefully be able to attend the Neos sprint in Salzburg in November 2018 and would like to (try to) implement this while I’m there. Do you see problems with my proposal? Can this be done within a few days? What could go wrong?
Have a nice day,
Florian