From 4f2d6b611c06c5e03a3a3680e093f68e442e1c98 Mon Sep 17 00:00:00 2001 From: Alex Gaetano Padula Date: Fri, 21 Mar 2025 03:12:48 -0400 Subject: [PATCH 1/2] Updating C++ library to TidesDB 1 specifications. --- README.md | 6 +++--- tidesdb.cpp | 35 +++++++++++++++++++++++++---------- tidesdb.hpp | 20 ++++++++++++-------- 3 files changed, 40 insertions(+), 21 deletions(-) diff --git a/README.md b/README.md index f82207c..c10f2b6 100644 --- a/README.md +++ b/README.md @@ -28,7 +28,7 @@ int main() { ### Creating and dropping column families ```cpp -db.CreateColumnFamily("my_column_family", (1024*1024)*64, TDB_DEFAULT_SKIP_LIST_MAX_LEVEL, TDB_DEFAULT_SKIP_LIST_PROBABILITY, true, TIDESDB_COMPRESSION_LZ4, true, TIDESDB_MEMTABLE_SKIPLIST); +db.CreateColumnFamily("my_column_family", (1024*1024)*64, TDB_DEFAULT_SKIP_LIST_MAX_LEVEL, TDB_DEFAULT_SKIP_LIST_PROBABILITY, true, TIDESDB_COMPRESSION_LZ4, true); db.DropColumnFamily("my_column_family"); ``` @@ -97,7 +97,7 @@ You can manually trigger a compaction. db.CompactSSTables("my_column_family", 4); // Use 4 threads for compaction ``` -Or you can start partial background merge compactions. +Or you can start incremental background merge compactions. ```cpp -db.StartBackgroundPartialMerges("my_column_family", std::chrono::seconds(60), 5); // Merge every 60 seconds if there are at least 5 SSTables +db.StartIncrementalMerges("my_column_family", std::chrono::seconds(60), 5); // Merge every 60 seconds if there are at least 5 SSTables ``` \ No newline at end of file diff --git a/tidesdb.cpp b/tidesdb.cpp index fe686ce..91d69b2 100644 --- a/tidesdb.cpp +++ b/tidesdb.cpp @@ -53,12 +53,11 @@ int DB::Close() const int DB::CreateColumnFamily(const std::string &column_family_name, int flush_threshold, int max_level, float probability, bool compressed, - tidesdb_compression_algo_t compress_algo, bool bloom_filter, - tidesdb_memtable_ds_t memtable_ds) const + tidesdb_compression_algo_t compress_algo, bool bloom_filter) const { - tidesdb_err_t *err = tidesdb_create_column_family( - this->tdb, column_family_name.c_str(), flush_threshold, max_level, probability, compressed, - compress_algo, bloom_filter, memtable_ds); + tidesdb_err_t *err = tidesdb_create_column_family(this->tdb, column_family_name.c_str(), + flush_threshold, max_level, probability, + compressed, compress_algo, bloom_filter); err_handler(err); return 0; } @@ -116,8 +115,8 @@ int DB::CompactSSTables(const std::string &column_family_name, int max_threads) return 0; } -int DB::StartBackgroundPartialMerges(const std::string &column_family_name, - std::chrono::seconds seconds, int min_sstables) const +int DB::StartIncrementalMerges(const std::string &column_family_name, std::chrono::seconds seconds, + int min_sstables) const { auto duration = seconds.count(); if (duration > std::numeric_limits::max() || duration < std::numeric_limits::min()) @@ -125,8 +124,8 @@ int DB::StartBackgroundPartialMerges(const std::string &column_family_name, return -1; } - tidesdb_err_t *err = tidesdb_start_background_partial_merge( - this->tdb, column_family_name.c_str(), static_cast(duration), min_sstables); + tidesdb_err_t *err = tidesdb_start_incremental_merge(this->tdb, column_family_name.c_str(), + static_cast(duration), min_sstables); err_handler(err); return 0; } @@ -152,6 +151,22 @@ int Txn::Begin() return 0; } +int Txn::Get(const std::vector *key, std::vector *value) const +{ + size_t key_size = key->size(); + unsigned char *value_data = nullptr; + unsigned long value_size = 0; + tidesdb_err_t *err = + tidesdb_txn_get(this->txn, key->data(), key_size, &value_data, &value_size); + if (err == nullptr) + { + value->assign(value_data, value_data + value_size); + free(value_data); + } + err_handler(err); + return 0; +} + int Txn::Put(const std::vector *key, const std::vector *value, std::chrono::seconds ttl) const { @@ -226,7 +241,7 @@ int Cursor::Prev() const return 0; } -int Cursor::Get(std::vector &key, std::vector &value) +int Cursor::Get(std::vector &key, std::vector &value)const { size_t key_size = key.size(); size_t value_size = value.size(); diff --git a/tidesdb.hpp b/tidesdb.hpp index 11c5039..f6b75c7 100644 --- a/tidesdb.hpp +++ b/tidesdb.hpp @@ -60,8 +60,7 @@ class DB [[nodiscard]] int CreateColumnFamily(const std::string &name, int flush_threshold, int max_level, float probability, bool compressed, tidesdb_compression_algo_t compress_algo, - bool bloom_filter, - tidesdb_memtable_ds_t memtable_ds) const; + bool bloom_filter) const; /* * DropColumnFamily @@ -95,12 +94,11 @@ class DB [[nodiscard]] int CompactSSTables(const std::string &column_family_name, int max_threads) const; /* - * StartBackgroundPartialMerges - * starts background partial merges for a column family. + * StartIncrementalMerges + * starts background incremental merges for a column family. */ - [[nodiscard]] int StartBackgroundPartialMerges(const std::string &column_family_name, - std::chrono::seconds seconds, - int min_sstables) const; + [[nodiscard]] int StartIncrementalMerges(const std::string &column_family_name, + std::chrono::seconds seconds, int min_sstables) const; [[nodiscard]] tidesdb_t *GetTidesDB() const; @@ -142,6 +140,12 @@ class Txn * Get * gets a value by key from a column family. */ + int Get(const std::vector *key, std::vector *value) const; + + /* + * Delete + * deletes a key-value pair from a column family. + */ [[nodiscard]] int Delete(const std::vector *key) const; /* @@ -197,7 +201,7 @@ class Cursor * Get * gets the current key-value pair in the column family cursor. */ - [[nodiscard]] int Get(std::vector &key, std::vector &value); + [[nodiscard]] int Get(std::vector &key, std::vector &value)const; }; }; // namespace TidesDB From 8a7c3c8692ae04b866fd70c0f7ef7a9ca2bf08da Mon Sep 17 00:00:00 2001 From: Alex Gaetano Padula Date: Fri, 21 Mar 2025 03:14:49 -0400 Subject: [PATCH 2/2] test corrects --- test/tests.cpp | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/test/tests.cpp b/test/tests.cpp index 942cc38..7cc6e8e 100644 --- a/test/tests.cpp +++ b/test/tests.cpp @@ -23,11 +23,10 @@ std::string column_name = "my_db"; const int flush_threshold = (1024 * 1024) * 128; const tidesdb_compression_algo_t compression_algo = TDB_COMPRESS_SNAPPY; -const float probability = TDB_USING_HT_PROBABILITY; -const int max_level = TDB_USING_HT_MAX_LEVEL; +const float probability = TDB_DEFAULT_SKIP_LIST_PROBABILITY; +const int max_level = TDB_DEFAULT_SKIP_LIST_MAX_LEVEL; const bool bloom_filter = true; const bool compressed = true; -const tidesdb_memtable_ds_t memtable_ds = TDB_MEMTABLE_HASH_TABLE; TEST(TidesDB, Open_and_Close) { @@ -41,7 +40,7 @@ TEST(TidesDB, Create_and_Drop_Column_Family) TidesDB::DB db; EXPECT_EQ(db.Open("tmp"), 0); EXPECT_EQ(db.CreateColumnFamily(column_name, flush_threshold, max_level, probability, - compressed, compression_algo, bloom_filter, memtable_ds), + compressed, compression_algo, bloom_filter), 0); EXPECT_EQ(db.DropColumnFamily(column_name), 0); EXPECT_EQ(db.Close(), 0); @@ -53,7 +52,7 @@ TEST(TidesDB, Create_and_Column_Family_and_Put) TidesDB::DB db; EXPECT_EQ(db.Open("tmp"), 0); EXPECT_EQ(db.CreateColumnFamily(column_name, flush_threshold, max_level, probability, - compressed, compression_algo, bloom_filter, memtable_ds), + compressed, compression_algo, bloom_filter), 0); const std::vector key = {'k', 'e', 'y'}; const std::vector value = {'v', 'a', 'l', 'u', 'e'}; @@ -69,7 +68,7 @@ TEST(TidesDB, Put_and_Get) std::vector got_value; EXPECT_EQ(db.Open("tmp"), 0); EXPECT_EQ(db.CreateColumnFamily(column_name, flush_threshold, max_level, probability, - compressed, compression_algo, bloom_filter, memtable_ds), + compressed, compression_algo, bloom_filter), 0); const std::vector key = {'k', 'e', 'y'}; @@ -90,7 +89,7 @@ TEST(TidesDB, Put_and_Delete) EXPECT_EQ(db.Open("tmp"), 0); EXPECT_EQ(db.CreateColumnFamily(column_name, flush_threshold, max_level, probability, - compressed, compression_algo, true, memtable_ds), + compressed, compression_algo, true), 0); const std::vector key = {'k', 'e', 'y'}; const std::vector value = {'v', 'a', 'l', 'u', 'e'};