Open githubmanticore opened 1 year ago
➤ Stan commented:
Seems that Query Rewrite Plugin is the option that should be considered as it has access to source query and could produce new query. I also see examples that plugin could produce result set.
There is an example plugin called rewriter
at source codes of MySQL and percona-server that we could study and try to recreate features we need.
There is options:
implement plugin that cook MySQL source query for SphinxSE plugin, ie makes additional column - query
with all filters, select list expressions and sorting then query will passed further to SphinxSE byMySQL and via API protocol to searchd daemon. This way we adopt regular MySQL query to SphinxSE syntax.
implement plugin that will either proxy raw MySQL into daemon or transform query into SphinxQL format and pass such query to daemon.
From rewriter plugin I see no examples that Query Rewrite Plugin itself might behave as Storage Engine, ie produce result set and prevent query from further processing. However I saw some usage examples of Query Rewrite Plugin that behave this way.
We might investigate and made one of points - 2nd point to replace SphinxSE completely or 1st point - made rewriter that cook MySQL query for SphinxSE.
есть еще MySQL Query Rewrite Plugins https://dev.mysql.com/doc/refman/5.7/en/rewriter-query-rewrite-plugin.html
те тут может кешировать запрос в proxy \ Storage Engine \ Federated fork в самом Storage Engine отправлять в демон закешированый запрос и отдавать result-set в таблицу
https://dev.mysql.com/doc/refman/5.7/en/plugin-types.html#protocol-trace-plugin-type
или вот Protocol Trace Plugins тоже трейсит общение
https://dev.mysql.com/doc/refman/5.7/en/writing-protocol-trace-plugins.html
правда работает начиная с MySQL572
есть еще Full-Text Parser Plugins
MySQL supports server-side full-text parser plugins with MyISAM and InnoDB
https://dev.mysql.com/doc/refman/5.7/en/writing-full-text-plugins.html
ну или кстати можно сделать только Query Rewrite Plugins
+ SphinxSE
1ый будет переписывать запрос чтобы сформировать WHERE query = '...'
такое с которым SphinxSE будет уже работать
тогда и SphinxSE можно\нужно-ли? оставить и сделать ManticoReWriter
query plugin который продвигать
percona кстати на этой теме плотно сидит - что именно их плагин делает - хз
но у них конечно есть блог-посты:
1) что перф ухудшился если юзать плагин
https://www.percona.com/blog/2016/05/10/query-rewrite-plugin-can-harm-performance/
2) что версия 5.7.14 исправила просадку с перфом
https://www.percona.com/blog/2016/08/22/query-rewrite-plugin-performance-fix/
блин там в коментах к блогу написал что можно вообще вместо SE обойтись
A good use would be for Shard-Query. The server intercepts the SQL, passes it to the rewrite layer, the rewrite layer rewrites the SQL as a CALL shard_query.sq_helper(…) call, and that returns a resultset to the client. This is basically functionally equivalent to the MySQL proxy LUA script.
те достаточно Query Rewrite Plugins написать
вот тут еще про эту тему примеры http://mysqlserverteam.com/the-query-rewrite-plugins/
минус в том что оно только начиная с MySQL 5.7.6 я хз это большой минус или так себе? а то все форки MySQL до сих пор на 5.6 версии сидят
it might worth to implement Query Rewrite Plugin at MySQL to replace either SphinxSE and Federated support and communicate directly with Manticore