nck-2 / test-rep

0 stars 0 forks source link

MySQL plugin to communicate with daemon #1336

Open githubmanticore opened 1 year ago

githubmanticore commented 1 year ago

it might worth to implement Query Rewrite Plugin at MySQL to replace either SphinxSE and Federated support and communicate directly with Manticore

githubmanticore commented 1 year ago

➤ Stan commented:

excerpt

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:

  1. 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.

  2. 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.

https://blogs.oracle.com/svetasmirnova/backup-server-command-for-mysql-with-query-rewrite-pre-parse-plugin

another excerpt

есть еще 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 версии сидят