Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Ramananeesh/bptree #52

Draft
wants to merge 3 commits into
base: main
Choose a base branch
from
Draft
Show file tree
Hide file tree
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -69,6 +69,7 @@ target_link_libraries(bliss PUBLIC
skiplist
pgm
art
bptree
)

target_include_directories(bliss PUBLIC
Expand All @@ -82,6 +83,8 @@ target_compile_options(bliss PUBLIC
"-fexceptions"
"-fasynchronous-unwind-tables"
"-march=native"
"-O3"
"-DNDEBUG"
)

target_include_directories(bliss PUBLIC
Expand Down
17 changes: 16 additions & 1 deletion external/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -114,4 +114,19 @@ if (NOT pgm_POPULATED)
endif()

add_library(pgm INTERFACE)
target_include_directories(pgm INTERFACE ${pgm_SOURCE_DIR})
target_include_directories(pgm INTERFACE ${pgm_SOURCE_DIR})

# wheatman/BP-Tree
FetchContent_Declare(
bptree
GIT_REPOSITORY https://github.com/wheatman/BP-Tree.git
GIT_TAG main
)

FetchContent_GetProperties(bptree)
if(NOT bptree_POPULATED)
FetchContent_Populate(bptree)
endif()

add_library(bptree INTERFACE)
target_include_directories(bptree INTERFACE ${bptree_SOURCE_DIR})
34 changes: 34 additions & 0 deletions src/bliss/bench_bptree.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
#ifndef BLISS_BENCH_BTREE
#define BLISS_BENCH_BTREE

#include <bptree/container/btree_map.hpp>
#include <vector>

#include "bliss/bliss_index.h"
#include "spdlog/spdlog.h"

// BP-Tree follows the tlx::btree_map implementation
namespace bliss {
template <typename KEY_TYPE, typename VALUE_TYPE>
class BlissBPTreeIndex : public BlissIndex<KEY_TYPE, VALUE_TYPE> {
public:
tlx::btree_map<KEY_TYPE, VALUE_TYPE> _index;
BlissBPTreeIndex() : _index() {};

void bulkload(
std::vector<std::pair<KEY_TYPE, VALUE_TYPE>> values) override {
// expects the pairs to be pre-sorted before performing bulk load
this->_index.bulk_load(values.begin(), values.end());
}

bool get(KEY_TYPE key) override { return this->_index.exists(key); }

void put(KEY_TYPE key, VALUE_TYPE value) override {
this->_index.insert(std::make_pair(key, value));
}

void end_routine() override {}
};
} // namespace bliss

#endif // !BLISS_BENCH_BPTREE
6 changes: 3 additions & 3 deletions src/bliss_bench.cpp
Original file line number Diff line number Diff line change
@@ -1,25 +1,25 @@
#include <alex.h>
#include <lipp.h>
#include "skip_list.h"
#include <spdlog/common.h>
#include "include/pgm/pgm_index_dynamic.hpp"

#include <cxxopts.hpp>
#include <iostream>
#include <string>

#include "bliss/bench_pgm.h"
#include "bliss/bench_alex.h"
#include "bliss/bench_art.h"
#include "bliss/bench_btree.h"
#include "bliss/bench_lipp.h"
#include "bliss/bench_pgm.h"
#include "bliss/bench_skiplist.h"
#include "bliss/bliss_index.h"
#include "bliss/util/args.h"
#include "bliss/util/config.h"
#include "bliss/util/execute.h"
#include "bliss/util/reader.h"
#include "bliss/util/timer.h"
#include "include/pgm/pgm_index_dynamic.hpp"
#include "skip_list.h"

using namespace bliss::utils;

Expand Down
1 change: 1 addition & 0 deletions tests/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -19,3 +19,4 @@ add_subdirectory(test_lipp)
add_subdirectory(test_btree)
add_subdirectory(test_skiplist)
add_subdirectory(test_art)
add_subdirectory(test_bptree)
26 changes: 11 additions & 15 deletions tests/bliss_index_tests.h
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
#ifndef BLISS_INDEX_TESTS_H
#define BLISS_INDEX_TESTS_H
#include "include/pgm/pgm_index_dynamic.hpp"
#include <alex.h>
#include <gtest/gtest.h>
#include <lipp.h>
Expand All @@ -11,43 +10,40 @@
#include <iostream>
#include <random>
#include <string>
#include <algorithm>
#include <random>

#include "bliss/bench_alex.h"
#include "bliss/bench_art.h"
#include "bliss/bench_bptree.h"
#include "bliss/bench_btree.h"
#include "bliss/bench_lipp.h"
#include "bliss/bench_skiplist.h"
#include "bliss/bench_pgm.h"
#include "bliss/bench_skiplist.h"
#include "bliss/bliss_index.h"
#include "bliss/util/args.h"
#include "bliss/util/config.h"
#include "bliss/util/execute.h"
#include "bliss/util/reader.h"
#include "bliss/util/timer.h"
#include "include/pgm/pgm_index_dynamic.hpp"

using namespace bliss::utils;

using key_type = unsigned long;
using value_type = unsigned long;

class BlissIndexTest : public testing::Test
{
protected:
class BlissIndexTest : public testing::Test {
protected:
std::unique_ptr<bliss::BlissIndex<key_type, value_type>> index;
std::string indexes[6] = {"alex", "lipp", "btree", "skiplist", "pgm", "art"};
std::string indexes[6] = {"alex", "lipp", "btree",
"skiplist", "pgm", "art"};

int num_keys = 100000;

void SetUp()
{
}
void SetUp() {}

void GenerateData(std::vector<key_type> &data, int num_keys, bool sorted = true)
{
for (int i = 0; i < num_keys; i++)
{
void GenerateData(std::vector<key_type> &data, int num_keys,
bool sorted = true) {
for (int i = 0; i < num_keys; i++) {
data.push_back(i);
}
if (!sorted) {
Expand Down
9 changes: 9 additions & 0 deletions tests/test_bptree/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
get_filename_component(EXEC ${CMAKE_CURRENT_SOURCE_DIR} NAME)
file(GLOB_RECURSE CPP_TESTS "*_tests.cpp")
add_executable(${EXEC} ${CPP_TESTS})
target_link_libraries(${EXEC} PRIVATE
bliss
bliss_test_infra
GTest::gtest_main)
include(GoogleTest)
gtest_discover_tests(${EXEC})
7 changes: 7 additions & 0 deletions tests/test_bptree/bptree_tests.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
#include "bliss_index_tests.h"

class BPTreeTest : public BlissIndexTest {};

TEST_F(BPTreeTest, TestBPTree_Sorted) {
index.reset(new bliss::BlissBPTreeIndex<key_type, key_type>());
}
Loading