[ 
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)

Reply via email to