Fottas commented on PR #36370:
URL: https://github.com/apache/shardingsphere/pull/36370#issuecomment-3243630955

   > Hi @Fottas, this PR looks very complicated. Could you please submit an 
issue first to describe your design?
   
   Hi @strongduanmu:
   Issue Description: IN Predicate Sharding Optimization
   
   Problem: Currently ShardingSphere sends all values in IN predicates to every 
shard, causing unnecessary data transfer and computation. For example, WHERE id 
IN (1,2,3,4) is sent as-is to all shards, even though based on sharding keys we 
can determine that values 1,3 belong to shard A while values 2,4 belong to 
shard B.
   Solution: Route-aware IN predicate splitting that distributes values only to 
their target shards based on sharding algorithms.
   
   Technical Design
   Implementation Principle: Parse each value in IN expressions, invoke 
existing sharding algorithms to calculate target shards, then rewrite IN 
clauses for each RouteUnit to contain only values belonging to that shard.
   
   Core Components:
   1. ShardingInPredicateValue - Encapsulates IN values with their target route 
information
   2. ShardingInPredicateToken - SQL token that rewrites IN clauses per route, 
filtering values and parameters
   3. ShardingInPredicateTokenGenerator - Analyzes IN expressions and 
calculates shard distribution using existing sharding 
   algorithms
   4.ParameterFilterable - Cross-module decoupling interface that enables 
parameter filtering capability between modules, since ShardingInPredicateToken 
is in the sharding module while RouteSQLRewriteEngine is in the infra module
   
   Key Features:
   - Supports both standard and complex sharding strategies
   - Handles parameter markers and literals
   - Optimizes single-value cases to equality comparisons
   - Achieves module decoupling through interface abstraction, allowing core 
engine to work without direct dependencies on - sharding token implementations


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: notifications-unsubscr...@shardingsphere.apache.org

For queries about this service, please contact Infrastructure at:
us...@infra.apache.org

Reply via email to