public ValueStoreHashAlgorithm getValueStoreHashAlgorithm() {
        return valueStoreHashAlgorithm;
    }
A database to hold reference data values using a generated unique surrogate key. The key
consists of the valueHashcode of the {@link RefDataValue} suffixed with a unique identifier. The
unique identifier is just a short value to distinguish different {@link RefDataValue} objects
that share the same valueHashcode. On creation of an entry, if an existing entry is found with the same
valueHashcode but a different value then the next id will be used.
The key structure is identical to the structure of the value in {@link KeyValueStoreDb} and {@link RangeStoreDb}
databases. The key structure is also identical to the key structure in the {@link ValueStoreMetaDb}
database. Each entry in this DB has a corresponding entry in the {@link ValueStoreMetaDb} which holds
the type information and reference counts.
For this to perform we need to use a hash with minimal clashes else we have to scan over multiple
values with the same hash each time.
<p>
The purpose of this table is to de-duplicate the storage of identical reference data values. E.g. if
multiple reference data keys are associated with the same reference data value then we only need
to store the value one in this table and each key then stores a pointer to it (the {@link ValueStoreKey}.)
<p>
<pre>
key        | value
(hash|id)  | (valueBytes)
---------------------------------------------
(1234|00)  | (363838)
(1234|01)  | (857489)
(4567|00)  | (263673)
(7890|00)  | (689390)
</pre>
<p>
As values are deleted it means there can be gaps in the ids for that hash code. These gaps will
be reused to ensure the ids are not exhausted.
stroom-pipeline/src/main/java/stroom/pipeline/refdata/store/offheapstore/databases/ValueStoreDb.java