private UID getOrCreateUid(final MapDefinition mapDefinition) {
        // get the UID for this mapDefinition, and as we should only have a handful of mapDefinitions
        // per loader it makes sense to cache the MapDefinition=>UID mappings on heap for quicker access.
        final UID uid = mapDefinitionToUIDMap.computeIfAbsent(mapDefinition, mapDef -> {
            LOGGER.trace("MapDefinition not found in local cache so getting it from the store, {}", mapDefinition);

            final PooledByteBuffer cachedUidPooledBuffer = mapDefinitionUIDStore.getUidPooledByteBuffer();
            // Add it to the list, so it will be released on close
            pooledByteBuffers.add(cachedUidPooledBuffer);

            final UID uidFromStore = mapDefinitionUIDStore.getOrCreateUid(mapDef, cachedUidPooledBuffer);

            // Add the reverse mapping
            uidToMapDefinitionMap.put(uidFromStore, mapDef);
            return uidFromStore;
        });

        LOGGER.trace("Using mapUid {} for {}", uid, mapDefinition);
        return uid;
    }
Loop over all entries in the range/value store. There may be multiple values for the same range.
Looping is done in key order, NOT in the oder they were originally put.
REMEMBER, the entries contain buffers used by LMDB so if you want to do anything with the entries
outside of the consumer you need to copy!
stroom-pipeline/src/main/java/stroom/pipeline/refdata/store/offheapstore/OffHeapStagingStore.java