Advanced Chunk Processing Library 0.2.0
A comprehensive C++ library for advanced data chunking strategies and processing operations
Loading...
Searching...
No Matches
advanced_structures::ChunkLSMTree< T > Class Template Reference

#include <advanced_structures.hpp>

+ Collaboration diagram for advanced_structures::ChunkLSMTree< T >:

Classes

struct  Level
 

Public Member Functions

 ChunkLSMTree (size_t memtable_limit=1024, size_t ratio=4)
 
void force_flush ()
 
void insert (const T &value)
 
bool search (const T &value) const
 

Private Member Functions

void compact_level (size_t level_idx)
 
void flush_memtable ()
 

Private Attributes

std::vector< std::shared_ptr< Level > > levels
 
std::vector< T > memtable
 
size_t memtable_size_limit
 
size_t size_ratio
 

Detailed Description

template<typename T>
class advanced_structures::ChunkLSMTree< T >

Definition at line 664 of file advanced_structures.hpp.

Constructor & Destructor Documentation

◆ ChunkLSMTree()

template<typename T >
advanced_structures::ChunkLSMTree< T >::ChunkLSMTree ( size_t  memtable_limit = 1024,
size_t  ratio = 4 
)
inline

Member Function Documentation

◆ compact_level()

template<typename T >
void advanced_structures::ChunkLSMTree< T >::compact_level ( size_t  level_idx)
inlineprivate

Definition at line 682 of file advanced_structures.hpp.

682 {
683 if (level_idx >= levels.size() - 1) {
684 // Create new level if we're at the last one
685 levels.push_back(std::make_shared<Level>(levels[level_idx]->size_limit * size_ratio));
686 }
687
688 auto& current_level = levels[level_idx]->data;
689 auto& next_level = levels[level_idx + 1]->data;
690
691 // Merge current level into next level
692 std::vector<T> merged;
693 std::merge(current_level.begin(), current_level.end(), next_level.begin(), next_level.end(),
694 std::back_inserter(merged));
695
696 // Update levels
697 current_level.clear();
698 next_level = std::move(merged);
699
700 // If next level is full, compact it too
701 if (levels[level_idx + 1]->is_full()) {
702 compact_level(level_idx + 1);
703 }
704 }
std::vector< std::shared_ptr< Level > > levels

References advanced_structures::ChunkLSMTree< T >::compact_level(), advanced_structures::ChunkLSMTree< T >::levels, and advanced_structures::ChunkLSMTree< T >::size_ratio.

Referenced by advanced_structures::ChunkLSMTree< T >::compact_level(), and advanced_structures::ChunkLSMTree< T >::flush_memtable().

◆ flush_memtable()

template<typename T >
void advanced_structures::ChunkLSMTree< T >::flush_memtable ( )
inlineprivate

Definition at line 706 of file advanced_structures.hpp.

706 {
707 if (memtable.empty())
708 return;
709
710 // Sort memtable before flushing
711 std::sort(memtable.begin(), memtable.end());
712
713 if (levels.empty()) {
714 levels.push_back(std::make_shared<Level>(memtable_size_limit * size_ratio));
715 }
716
717 // Merge memtable with first level
718 std::vector<T> merged;
719 std::merge(memtable.begin(), memtable.end(), levels[0]->data.begin(), levels[0]->data.end(),
720 std::back_inserter(merged));
721
722 levels[0]->data = std::move(merged);
723 memtable.clear();
724
725 // If level 0 is full, trigger compaction
726 if (levels[0]->is_full()) {
727 compact_level(0);
728 }
729 }

References advanced_structures::ChunkLSMTree< T >::compact_level(), advanced_structures::ChunkLSMTree< T >::levels, advanced_structures::ChunkLSMTree< T >::memtable, advanced_structures::ChunkLSMTree< T >::memtable_size_limit, and advanced_structures::ChunkLSMTree< T >::size_ratio.

Referenced by advanced_structures::ChunkLSMTree< T >::force_flush(), and advanced_structures::ChunkLSMTree< T >::insert().

◆ force_flush()

template<typename T >
void advanced_structures::ChunkLSMTree< T >::force_flush ( )
inline

◆ insert()

template<typename T >
void advanced_structures::ChunkLSMTree< T >::insert ( const T &  value)
inline

◆ search()

template<typename T >
bool advanced_structures::ChunkLSMTree< T >::search ( const T &  value) const
inline

Definition at line 743 of file advanced_structures.hpp.

743 {
744 // Search memtable first
745 if (std::binary_search(memtable.begin(), memtable.end(), value)) {
746 return true;
747 }
748
749 // Search through all levels
750 for (const auto& level : levels) {
751 if (std::binary_search(level->data.begin(), level->data.end(), value)) {
752 return true;
753 }
754 }
755 return false;
756 }

References advanced_structures::ChunkLSMTree< T >::levels, and advanced_structures::ChunkLSMTree< T >::memtable.

Member Data Documentation

◆ levels

◆ memtable

◆ memtable_size_limit

template<typename T >
size_t advanced_structures::ChunkLSMTree< T >::memtable_size_limit
private

◆ size_ratio


The documentation for this class was generated from the following file: