in src/main/java/com/spotify/sparkey/IndexHash.java [120:156]
static void createNew(
File indexFile, File logFile, HashType hashType, double sparsity,
boolean fsync, final int hashSeed, final long maxMemory,
final SparkeyWriter.ConstructionMethod wantedMethod) throws IOException {
if (sparsity < 1.3) {
sparsity = 1.3;
}
LogHeader logHeader = LogHeader.read(logFile);
int addressSize = calcAddressSize(logHeader) ? 4 : 8;
if (hashType == null) {
hashType = logHeader.getNumPuts() < (1 << 23) ? HashType.HASH_32_BITS : HashType.HASH_64_BITS;
}
long capacity = 1L | (long) (logHeader.getNumPuts() * sparsity);
IndexHeader header = new IndexHeader(logHeader.getFileIdentifier(), logHeader.getDataEnd(),
logHeader.getMaxKeyLen(), logHeader.getMaxValueLen(), addressSize, hashType.size(), capacity, logHeader.getNumPuts(),
hashSeed,
calcEntryBlockBits(logHeader.getMaxEntriesPerBlock()));
long hashLength = header.getHashLength();
final boolean inMemory;
if (wantedMethod == SparkeyWriter.ConstructionMethod.AUTO) {
inMemory = hashLength <= maxMemory;
} else {
inMemory = wantedMethod == SparkeyWriter.ConstructionMethod.IN_MEMORY;
}
if (inMemory) {
writeIndexInMemory(indexFile, logFile, fsync, logHeader, header, hashLength);
} else {
writeIndexWithSorting(indexFile, logFile, fsync, logHeader, header, hashLength, maxMemory);
}
}