expose more options (#46)
This commit is contained in:
parent
e34c8e825c
commit
138dadac9c
|
@ -18,6 +18,17 @@ type
|
|||
ColFamilyOptionsRef* = ref object
|
||||
cPtr: ColFamilyOptionsPtr
|
||||
|
||||
Compression* {.pure.} = enum
|
||||
# Use a slightly clunky name here to avoid global symbol conflicts
|
||||
noCompression = rocksdb_no_compression
|
||||
snappyCompression = rocksdb_snappy_compression
|
||||
zlibCompression = rocksdb_zlib_compression
|
||||
bz2Compression = rocksdb_bz2_compression
|
||||
lz4Compression = rocksdb_lz4_compression
|
||||
lz4hcCompression = rocksdb_lz4hc_compression
|
||||
xpressCompression = rocksdb_xpress_compression
|
||||
zstdCompression = rocksdb_zstd_compression
|
||||
|
||||
proc newColFamilyOptions*(): ColFamilyOptionsRef =
|
||||
ColFamilyOptionsRef(cPtr: rocksdb_options_create())
|
||||
|
||||
|
@ -54,6 +65,49 @@ proc setWriteBufferSize*(dbOpts: ColFamilyOptionsRef, maxBufferSize: int) =
|
|||
doAssert not dbOpts.isClosed()
|
||||
rocksdb_options_set_write_buffer_size(dbOpts.cPtr, maxBufferSize.csize_t)
|
||||
|
||||
# https://github.com/facebook/rocksdb/wiki/MemTable
|
||||
proc setHashSkipListRep*(
|
||||
dbOpts: ColFamilyOptionsRef, bucketCount, skipListHeight,
|
||||
skipListBranchingFactor: int) =
|
||||
doAssert not dbOpts.isClosed()
|
||||
rocksdb_options_set_hash_skip_list_rep(
|
||||
dbOpts.cPtr, bucketCount.csize_t, skipListHeight.cint,
|
||||
skipListBranchingFactor.cint)
|
||||
|
||||
proc setHashLinkListRep*(
|
||||
dbOpts: ColFamilyOptionsRef, bucketCount: int) =
|
||||
doAssert not dbOpts.isClosed()
|
||||
rocksdb_options_set_hash_link_list_rep(dbOpts.cPtr, bucketCount.csize_t)
|
||||
|
||||
proc setMemtableVectorRep*(dbOpts: ColFamilyOptionsRef) =
|
||||
doAssert not dbOpts.isClosed()
|
||||
rocksdb_options_set_memtable_vector_rep(dbOpts.cPtr)
|
||||
|
||||
proc setMemtableWholeKeyFiltering*(dbOpts: ColFamilyOptionsRef, value: bool) =
|
||||
doAssert not dbOpts.isClosed()
|
||||
rocksdb_options_set_memtable_whole_key_filtering(dbOpts.cPtr, value.uint8)
|
||||
|
||||
proc setMemtablePrefixBloomSizeRatio*(dbOpts: ColFamilyOptionsRef, value: float) =
|
||||
doAssert not dbOpts.isClosed()
|
||||
rocksdb_options_set_memtable_prefix_bloom_size_ratio(dbOpts.cPtr, value)
|
||||
|
||||
proc setFixedPrefixExtractor*(dbOpts: ColFamilyOptionsRef, length: int) =
|
||||
doAssert not dbOpts.isClosed()
|
||||
rocksdb_options_set_prefix_extractor(
|
||||
dbOpts.cPtr, rocksdb_slicetransform_create_fixed_prefix(length.csize_t))
|
||||
|
||||
proc setMaxTotalWalSize*(dbOpts: ColFamilyOptionsRef, size: int) =
|
||||
doAssert not dbOpts.isClosed()
|
||||
rocksdb_options_set_max_total_wal_size(dbOpts.cPtr, size.csize_t)
|
||||
|
||||
proc setCompression*(dbOpts: ColFamilyOptionsRef, value: Compression) =
|
||||
doAssert not dbOpts.isClosed()
|
||||
rocksdb_options_set_compression(dbOpts.cPtr, value.cint)
|
||||
|
||||
proc setBottommostCompression*(dbOpts: ColFamilyOptionsRef, value: Compression) =
|
||||
doAssert not dbOpts.isClosed()
|
||||
rocksdb_options_set_bottommost_compression(dbOpts.cPtr, value.cint)
|
||||
|
||||
proc close*(cfOpts: ColFamilyOptionsRef) =
|
||||
if not cfOpts.isClosed():
|
||||
rocksdb_options_destroy(cfOpts.cPtr)
|
||||
|
|
|
@ -82,6 +82,14 @@ proc setMaxBytesForLevelMultiplier*(dbOpts: DbOptionsRef, multiplier: float) =
|
|||
doAssert not dbOpts.isClosed()
|
||||
rocksdb_options_set_max_bytes_for_level_multiplier(dbOpts.cPtr, multiplier.cdouble)
|
||||
|
||||
proc setAllowConcurrentMemtableWrite*(dbOpts: DbOptionsRef, value: bool) =
|
||||
doAssert not dbOpts.isClosed()
|
||||
rocksdb_options_set_allow_concurrent_memtable_write(dbOpts.cPtr, value.uint8)
|
||||
|
||||
proc setOptimizeFiltersForHits*(dbOpts: DbOptionsRef, value: bool) =
|
||||
doAssert not dbOpts.isClosed()
|
||||
rocksdb_options_set_optimize_filters_for_hits(dbOpts.cPtr, value.cint)
|
||||
|
||||
proc defaultDbOptions*(): DbOptionsRef =
|
||||
let opts: DbOptionsRef = newDbOptions()
|
||||
|
||||
|
|
|
@ -9,6 +9,34 @@ type
|
|||
TableOptionsRef* = ref object
|
||||
cPtr*: TableOptionsPtr
|
||||
|
||||
FilterPolicyPtr* = ptr rocksdb_filterpolicy_t
|
||||
|
||||
FilterPolicyRef* = ref object
|
||||
cPtr*: FilterPolicyPtr
|
||||
|
||||
IndexType* {.pure.} = enum
|
||||
binarySearch = rocksdb_block_based_table_index_type_binary_search
|
||||
hashSearch = rocksdb_block_based_table_index_type_hash_search
|
||||
twoLevelIndexSearch = rocksdb_block_based_table_index_type_two_level_index_search
|
||||
|
||||
DataBlockIndexType* {.pure.} = enum
|
||||
binarySearch = rocksdb_block_based_table_data_block_index_type_binary_search
|
||||
binarySearchAndHash = rocksdb_block_based_table_data_block_index_type_binary_search_and_hash
|
||||
|
||||
proc createRibbon*(bitsPerKey: float): FilterPolicyRef =
|
||||
FilterPolicyRef(cPtr: rocksdb_filterpolicy_create_ribbon(bitsPerKey))
|
||||
|
||||
proc createRibbonHybrid*(bitsPerKey: float, bloomBeforeLevel: int = 0): FilterPolicyRef =
|
||||
FilterPolicyRef(cPtr: rocksdb_filterpolicy_create_ribbon_hybrid(bitsPerKey, bloomBeforeLevel.cint))
|
||||
|
||||
proc isClosed*(policy: FilterPolicyRef): bool =
|
||||
isNil(policy.cPtr)
|
||||
|
||||
proc close*(policy: FilterPolicyRef) =
|
||||
if not isClosed(policy):
|
||||
rocksdb_filterpolicy_destroy(policy.cPtr)
|
||||
policy.cPtr = nil
|
||||
|
||||
proc createTableOptions*(): TableOptionsRef =
|
||||
TableOptionsRef(cPtr: rocksdb_block_based_options_create())
|
||||
|
||||
|
@ -37,6 +65,27 @@ proc setCacheIndexAndFilterBlocks*(opts: TableOptionsRef, value: bool) =
|
|||
proc setPinL0FilterAndIndexBlocksInCache*(opts: TableOptionsRef, value: bool) =
|
||||
rocksdb_block_based_options_set_pin_l0_filter_and_index_blocks_in_cache(opts.cPtr, value.uint8)
|
||||
|
||||
proc setPinTopLevelIndexAndFilter*(opts: TableOptionsRef, value: bool) =
|
||||
rocksdb_block_based_options_set_pin_top_level_index_and_filter(opts.cPtr, value.uint8)
|
||||
|
||||
proc setCacheIndexAndFilterBlocksWithHighPriority*(opts: TableOptionsRef, value: bool) =
|
||||
rocksdb_block_based_options_set_cache_index_and_filter_blocks_with_high_priority(opts.cPtr, value.uint8)
|
||||
|
||||
proc setFilterPolicy*(opts: TableOptionsRef, policy: FilterPolicyRef) =
|
||||
rocksdb_block_based_options_set_filter_policy(opts.cPtr, policy.cPtr)
|
||||
|
||||
proc setIndexType*(opts: TableOptionsRef, typ: IndexType) =
|
||||
rocksdb_block_based_options_set_index_type(opts.cPtr, typ.cint)
|
||||
|
||||
proc setPartitionFilters*(opts: TableOptionsRef, value: bool) =
|
||||
rocksdb_block_based_options_set_partition_filters(opts.cPtr, value.uint8)
|
||||
|
||||
proc setDataBlockIndexType*(opts: TableOptionsRef, value: DataBlockIndexType) =
|
||||
rocksdb_block_based_options_set_data_block_index_type(opts.cPtr, value.cint)
|
||||
|
||||
proc setDataBlockHashRatio*(opts: TableOptionsRef, value: float) =
|
||||
rocksdb_block_based_options_set_data_block_hash_ratio(opts.cPtr, value.cdouble)
|
||||
|
||||
proc defaultTableOptions*(): TableOptionsRef =
|
||||
# https://github.com/facebook/rocksdb/wiki/Setup-Options-and-Basic-Tuning#other-general-options
|
||||
let opts = createTableOptions()
|
||||
|
|
Loading…
Reference in New Issue