Hi Dmitri,

Thanks for raising this.

You are right that even on a cache hit, resolve still talks to JDBC. That
is by design: InMemoryEntityCache is not a "skip the database" cache. For
JDBC it is a "skip the expensive load" cache, with a version check as the
invalidation path.
I traced Resolver.resolveAll() with JDBC and compared a warmed
InMemoryEntityCache against cache == null on the same catalog. The workload
was a loadTable-like resolve (principal P1 with PRINCIPAL_ROLE:ALL, catalog
"test", path N1/N2/T2).

On a warm cache, that resolve issued 1 SELECT:

SELECT id, catalog_id, entity_version, grant_records_version
FROM ENTITIES
WHERE (catalog_id, id) IN ((?, ?), ... ) AND realm_id = ?

Without the cache, the same resolve issued 23 SELECTs: 9 full entity rows
(including properties / internal_properties) and 14 grant-record lookups.
Scenario Cache SELECTs Payload
N1/N2/T2 (small properties) no-cache 23 947 B
N1/N2/T2 cold-cache 23 947 B
N1/N2/T2 warm-cache 1 144 B
N1/N2/T1 (64KiB properties) no-cache 23 66 KB
N1/N2/T1 warm-cache 1 144 B
deep path (6 segments) no-cache 29 959 B
deep path (6 segments) warm-cache 1 192 B

So the version check is real, but it replaces the full entity JSON and the
grant-record queries. Cold cache looks the same as no cache; the gain is on
subsequent resolves of the same entities.

I have not measured a full REST request or a stale-cache / high-churn path,
so I do not want to claim an end-to-end speedup from this :)
For the resolve path itself, the query shape is clear.

WDYT?

Thanks,
Prithvi

On Fri, Sep 4, 2026 at 6:50 AM Dmitri Bourlatchkov <[email protected]> wrote:

> Hi All,
>
> InMemoryEntityCache is currently used in Apache Polaris with JDBC
> Persistence.
>
> However, as far as I can tell, even for cached entities, the resolve will
> still issue a JDBC query to confirm that the latest version was returned
> from the cache.
>
> So, the question is: does this cache provide any considerable efficiency
> gain?
>
> Has anyone measured the performance difference with and without this cache?
>
> Would anyone be willing to carry out such a test?
>
> WDYT?
>
> Thanks,
> Dmitri.
>

Reply via email to