[
https://issues.apache.org/jira/browse/CALCITE-4551?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17308382#comment-17308382
]
James Starr commented on CALCITE-4551:
--------------------------------------
{code:java}
implements MetadataCache {
public final Map<RelNode, Map<Object, Object>> map = new HashMap<>();
/**
* Removes cached metadata values for specified RelNode.
*
* @param rel RelNode whose cached metadata should be removed
* @return true if cache for the provided RelNode was not empty
*/
@Override public boolean clear(RelNode rel) {
return map.remove(rel) != null;
}
@Override public @Nullable Object remove(RelNode relNode, Object args) {
Map<Object, Object> argMap = map.get(relNode);
if (argMap == null) {
return null;
}
Object result = argMap.remove(args);
if (argMap.isEmpty()) {
map.remove(relNode);
}
return result;
}
@Override public @Nullable Object get(RelNode relNode, Object args) {
Map<Object, Object> argMap = map.get(relNode);
if (argMap == null) {
return null;
}
return argMap.get(args);
}
@Override public @Nullable Object put(RelNode relNode, Object args, Object
value) {
return map.computeIfAbsent(relNode, rel -> new HashMap<>())
.put(args, value);
}
}{code}
|Average|51.6969697|
|Standard Deviation|1.656493379|
HashBasedTable is internally create an object to do a get.
> Fly Weight for MD Cache Keys
> ----------------------------
>
> Key: CALCITE-4551
> URL: https://issues.apache.org/jira/browse/CALCITE-4551
> Project: Calcite
> Issue Type: Improvement
> Reporter: James Starr
> Priority: Major
>
> Create cache keys for metadata calls generates a fair bit of object turn in
> trivial cases, more expensive than the actual metadata call. Many metadata
> calls could reuse their cache keys since the are functionally identical.
--
This message was sent by Atlassian Jira
(v8.3.4#803005)