-
Notifications
You must be signed in to change notification settings - Fork 781
feat: Add Operator Cache for databend #18196
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
Conversation
Signed-off-by: Xuanwo <[email protected]>
Signed-off-by: Xuanwo <[email protected]>
let cache_key = self.compute_cache_key(params); | ||
|
||
// Check if we have a cached operator | ||
{ | ||
let mut cache = self.cache.lock().unwrap(); | ||
if let Some(operator) = cache.get(&cache_key) { | ||
debug!("Operator cache hit for key: {}", cache_key); | ||
CACHE_HIT_COUNT.inc(); | ||
return Ok(operator.clone()); | ||
} | ||
} | ||
|
||
// Cache miss, create new operator | ||
debug!("Operator cache miss for key: {}", cache_key); | ||
CACHE_MISS_COUNT.inc(); | ||
|
||
let operator = init_operator_uncached(params)?; | ||
|
||
// Insert into cache | ||
{ | ||
let mut cache = self.cache.lock().unwrap(); | ||
cache.put(cache_key, operator.clone()); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
How about using StorageParams
as cache key? it already implemented (in this PR) Hash
and Eq
, in this way we don't need to worry about collisions that could occur with the compute_cache_key: StorageParams -> u64
function.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Makes sense, let me give it a try.
I hereby agree to the terms of the CLA available at: https://docs.databend.com/dev/policies/cla/
Summary
Add Operator Cache for databend.
Databend uses OpenDAL to access object storage. When accessing through an IAM role, OpenDAL internally uses reqsign to call AWS's API and obtain a temporary token. However, this API has a ratelimit. If users are frequently creating external tables, this can often cause query failures.
This PR address this by introduce an operator cache which can resuse the same operator if inputs are the same.
Tests
Type of change
This change is