From a1a509a6cf084a166ef5d1ad8cc890701934c495 Mon Sep 17 00:00:00 2001 From: Andrea Cavalli Date: Wed, 1 Jun 2022 17:36:21 +0200 Subject: [PATCH] BlobDB --- src/main/data-generator/quic-rpc.yaml | 12 ++++++++++++ .../dbengine/client/DefaultDatabaseOptions.java | 13 +++++++++++-- .../database/disk/LLLocalKeyValueDatabase.java | 12 ++++++++++++ 3 files changed, 35 insertions(+), 2 deletions(-) diff --git a/src/main/data-generator/quic-rpc.yaml b/src/main/data-generator/quic-rpc.yaml index 9d8be71..f437750 100644 --- a/src/main/data-generator/quic-rpc.yaml +++ b/src/main/data-generator/quic-rpc.yaml @@ -23,6 +23,10 @@ interfacesData: blockSize: -int persistentCacheId: -String writeBufferSize: -long + blobFiles: boolean + minBlobSize: -long + blobFileSize: -long + blobCompressionType: -Compression # versions must have only numbers, lowercase letters, dots, dashes. Maximum: 99.999.9999 versions: 0.0.0: @@ -268,6 +272,10 @@ versions: blockSize: -int persistentCacheId: -String writeBufferSize: -long + blobFiles: boolean + minBlobSize: -long + blobFileSize: -long + blobCompressionType: -Compression # Remember to update ColumnOptions common getters NamedColumnOptions: data: @@ -280,6 +288,10 @@ versions: blockSize: -int persistentCacheId: -String writeBufferSize: -long + blobFiles: boolean + minBlobSize: -long + blobFileSize: -long + blobCompressionType: -Compression BloomFilter: data: bitsPerKey: int diff --git a/src/main/java/it/cavallium/dbengine/client/DefaultDatabaseOptions.java b/src/main/java/it/cavallium/dbengine/client/DefaultDatabaseOptions.java index 50e34a7..196feb9 100644 --- a/src/main/java/it/cavallium/dbengine/client/DefaultDatabaseOptions.java +++ b/src/main/java/it/cavallium/dbengine/client/DefaultDatabaseOptions.java @@ -10,6 +10,7 @@ import it.cavallium.dbengine.rpc.current.data.DefaultColumnOptions; import it.cavallium.dbengine.rpc.current.data.DefaultColumnOptionsBuilder; import it.cavallium.dbengine.rpc.current.data.NamedColumnOptions; import it.cavallium.dbengine.rpc.current.data.NamedColumnOptionsBuilder; +import it.cavallium.dbengine.rpc.current.data.nullables.NullableCompression; import it.cavallium.dbengine.rpc.current.data.nullables.NullableFilter; import java.nio.charset.StandardCharsets; import java.util.Collections; @@ -27,7 +28,11 @@ public class DefaultDatabaseOptions { NullableFilter.empty(), Nullableint.empty(), NullableString.empty(), - Nullablelong.empty() + Nullablelong.empty(), + false, + Nullablelong.empty(), + Nullablelong.empty(), + NullableCompression.empty() ); public static NamedColumnOptions DEFAULT_NAMED_COLUMN_OPTIONS = new NamedColumnOptions( @@ -39,7 +44,11 @@ public class DefaultDatabaseOptions { NullableFilter.empty(), Nullableint.empty(), NullableString.empty(), - Nullablelong.empty() + Nullablelong.empty(), + false, + Nullablelong.empty(), + Nullablelong.empty(), + NullableCompression.empty() ); public static DatabaseOptions DEFAULT_DATABASE_OPTIONS = new DatabaseOptions(List.of(), diff --git a/src/main/java/it/cavallium/dbengine/database/disk/LLLocalKeyValueDatabase.java b/src/main/java/it/cavallium/dbengine/database/disk/LLLocalKeyValueDatabase.java index f0f9c5a..76e7230 100644 --- a/src/main/java/it/cavallium/dbengine/database/disk/LLLocalKeyValueDatabase.java +++ b/src/main/java/it/cavallium/dbengine/database/disk/LLLocalKeyValueDatabase.java @@ -215,6 +215,18 @@ public class LLLocalKeyValueDatabase implements LLKeyValueDatabase { if (isDisableAutoCompactions()) { columnFamilyOptions.setDisableAutoCompactions(true); } + columnFamilyOptions.setEnableBlobFiles(columnOptions.blobFiles()); + if (columnOptions.blobFileSize().isPresent()) { + columnFamilyOptions.setBlobFileSize(columnOptions.blobFileSize().get()); + } + if (columnOptions.minBlobSize().isPresent()) { + columnFamilyOptions.setMinBlobSize(columnOptions.minBlobSize().get()); + } + if (columnOptions.blobCompressionType().isPresent()) { + columnFamilyOptions.setCompressionType(columnOptions.blobCompressionType().get().getType()); + } + columnFamilyOptions.setBlobCompactionReadaheadSize(4 * SizeUnit.MB); + columnFamilyOptions.setEnableBlobGarbageCollection(true); // This option is not supported with multiple db paths // https://www.arangodb.com/docs/stable/programs-arangod-rocksdb.html