From 6cccdcf1fe227a3be5d637dad5ee7e551554f089 Mon Sep 17 00:00:00 2001 From: linxGnu Date: Fri, 12 Nov 2021 10:28:45 +0900 Subject: [PATCH] Support ribbon filter, optimistic db write --- README.md | 3 +-- filter_policy.go | 4 ++-- optimistic_transaction_db.go | 15 +++++++++++++++ 3 files changed, 18 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index ccd869a..5dc83e0 100644 --- a/README.md +++ b/README.md @@ -52,5 +52,4 @@ Almost C API, excepts: - [ ] putv/mergev/deletev/delete_rangev - [ ] compaction_filter/compaction_filter_factory/compaction_filter_context - [ ] transactiondb_property_value/transactiondb_property_int -- [ ] optimistictransactiondb_write/optimistictransactiondb_checkpoint_object_create/optimistictransactiondb_property_value/optimistictransactiondb_property_int - +- [ ] optimistictransactiondb_property_value/optimistictransactiondb_property_int diff --git a/filter_policy.go b/filter_policy.go index 677088f..1df3c2e 100644 --- a/filter_policy.go +++ b/filter_policy.go @@ -106,8 +106,8 @@ func NewBloomFilterFull(bitsPerKey float64) FilterPolicy { // // Also consider using optimize_filters_for_memory to save filter // memory. -func NewRibbonFilterPolicy(bitsPerKey float64) FilterPolicy { - return NewNativeFilterPolicy(C.rocksdb_filterpolicy_create_ribbon(C.double(bitsPerKey))) +func NewRibbonFilterPolicy(bitsPerKey float64, bloomBeforeLevel int) FilterPolicy { + return NewNativeFilterPolicy(C.rocksdb_filterpolicy_create_ribbon_hybrid(C.double(bitsPerKey), C.int(bloomBeforeLevel))) } // Hold references to filter policies. diff --git a/optimistic_transaction_db.go b/optimistic_transaction_db.go index 360960b..8f822ee 100644 --- a/optimistic_transaction_db.go +++ b/optimistic_transaction_db.go @@ -113,6 +113,21 @@ func (db *OptimisticTransactionDB) TransactionBegin( db.c, opts.c, transactionOpts.c, nil)) } +// NewCheckpoint creates a new Checkpoint for this db. +func (db *OptimisticTransactionDB) NewCheckpoint() (cp *Checkpoint, err error) { + var cErr *C.char + + cCheckpoint := C.rocksdb_optimistictransactiondb_checkpoint_object_create( + db.c, &cErr, + ) + if err = fromCError(cErr); err == nil { + cp = NewNativeCheckpoint(cCheckpoint) + } + + return +} + +// Write batch. func (db *OptimisticTransactionDB) Write(opts *WriteOptions, batch *WriteBatch) (err error) { var cErr *C.char