We sometimes receive challenging requests… this is a story about
one of those times.
The customer has implemented a sharding solution and would like
us to review alternatives or improvements. We analyzed the
possibility of using ProxySQL as it looked to be a simple
implementation. However, as we had 200 shards we had to implement
200 rules — the first shard didn’t have much overload, but the
latest one had to go through 200 rules and took longer.
My first idea was to use FLAGIN and FLAGOUT creating a B-Tree,
but the performance was the same. Reviewing the code, I realized
that the rules were implemented as a list, which means that, in
the end, all the rules were going to be processed until hit with
the right one and FLAGIN is used just to filter out.
At that point, I asked, what could I do? Is it possible to
implement it differently? What is the performance impact?
One Problem, Two Solutions
I …
[Read more]