Blobdb for static data (#5475)

Signed-off-by: Fabio Di Fabio <fabio.difabio@consensys.net>
This commit is contained in:
Fabio Di Fabio
2023-06-07 19:06:59 +02:00
committed by GitHub
parent 8bc939d236
commit 9ae1b535a0
6 changed files with 61 additions and 13 deletions

View File

@@ -153,16 +153,7 @@ public abstract class RocksDBColumnarKeyValueStorage
.noneMatch(existed -> Arrays.equals(existed, ignorableSegment.getId())))
.forEach(trimmedSegments::remove);
columnDescriptors =
trimmedSegments.stream()
.map(
segment ->
new ColumnFamilyDescriptor(
segment.getId(),
new ColumnFamilyOptions()
.setTtl(0)
.setCompressionType(CompressionType.LZ4_COMPRESSION)
.setTableFormatConfig(createBlockBasedTableConfig(configuration))))
.collect(Collectors.toList());
trimmedSegments.stream().map(this::createColumnDescriptor).collect(Collectors.toList());
columnDescriptors.add(
new ColumnFamilyDescriptor(
DEFAULT_COLUMN.getBytes(StandardCharsets.UTF_8),
@@ -180,6 +171,24 @@ public abstract class RocksDBColumnarKeyValueStorage
}
}
private ColumnFamilyDescriptor createColumnDescriptor(final SegmentIdentifier segment) {
final var options =
new ColumnFamilyOptions()
.setTtl(0)
.setCompressionType(CompressionType.LZ4_COMPRESSION)
.setTableFormatConfig(createBlockBasedTableConfig(configuration));
if (segment.containsStaticData()) {
options
.setEnableBlobFiles(true)
.setEnableBlobGarbageCollection(false)
.setMinBlobSize(100)
.setBlobCompressionType(CompressionType.LZ4_COMPRESSION);
}
return new ColumnFamilyDescriptor(segment.getId(), options);
}
private void setGlobalOptions(final RocksDBConfiguration configuration, final Statistics stats) {
options = new DBOptions();
options

View File

@@ -261,14 +261,22 @@ public abstract class RocksDBColumnarKeyValueStorageTest extends AbstractKeyValu
public enum TestSegment implements SegmentIdentifier {
FOO(new byte[] {1}),
BAR(new byte[] {2}),
EXPERIMENTAL(new byte[] {3});
EXPERIMENTAL(new byte[] {3}),
STATIC_DATA(new byte[] {4}, true);
private final byte[] id;
private final String nameAsUtf8;
private final boolean containsStaticData;
TestSegment(final byte[] id) {
this(id, false);
}
TestSegment(final byte[] id, final boolean containsStaticData) {
this.id = id;
this.nameAsUtf8 = new String(id, StandardCharsets.UTF_8);
this.containsStaticData = containsStaticData;
}
@Override
@@ -280,6 +288,11 @@ public abstract class RocksDBColumnarKeyValueStorageTest extends AbstractKeyValu
public byte[] getId() {
return id;
}
@Override
public boolean containsStaticData() {
return containsStaticData;
}
}
protected abstract SegmentedKeyValueStorage<RocksDbSegmentIdentifier> createSegmentedStore()