org.rocksdb.CompactionPriority Maven / Gradle / Ivy
// Copyright (c) 2011-present, Facebook, Inc. All rights reserved.
// This source code is licensed under both the GPLv2 (found in the
// COPYING file in the root directory) and Apache 2.0 License
// (found in the LICENSE.Apache file in the root directory).
package org.rocksdb;
/**
* Compaction Priorities
*/
public enum CompactionPriority {
/**
* Slightly Prioritize larger files by size compensated by #deletes
*/
ByCompensatedSize((byte)0x0),
/**
* First compact files whose data's latest update time is oldest.
* Try this if you only update some hot keys in small ranges.
*/
OldestLargestSeqFirst((byte)0x1),
/**
* First compact files whose range hasn't been compacted to the next level
* for the longest. If your updates are random across the key space,
* write amplification is slightly better with this option.
*/
OldestSmallestSeqFirst((byte)0x2),
/**
* First compact files whose ratio between overlapping size in next level
* and its size is the smallest. It in many cases can optimize write
* amplification.
*/
MinOverlappingRatio((byte)0x3);
private final byte value;
CompactionPriority(final byte value) {
this.value = value;
}
/**
* Returns the byte value of the enumerations value
*
* @return byte representation
*/
public byte getValue() {
return value;
}
/**
* Get CompactionPriority by byte value.
*
* @param value byte representation of CompactionPriority.
*
* @return {@link org.rocksdb.CompactionPriority} instance or null.
* @throws java.lang.IllegalArgumentException if an invalid
* value is provided.
*/
public static CompactionPriority getCompactionPriority(final byte value) {
for (final CompactionPriority compactionPriority :
CompactionPriority.values()) {
if (compactionPriority.getValue() == value){
return compactionPriority;
}
}
throw new IllegalArgumentException(
"Illegal value provided for CompactionPriority.");
}
}