support rtree preheat

This commit is contained in:
yangyang09898 2024-02-02 16:44:28 +08:00
parent 31e31a63d0
commit da70b98932
2 changed files with 16 additions and 0 deletions

View File

@ -260,6 +260,7 @@ class StaticRTree
boost::iostreams::mapped_file_source m_objects_region;
// This is a view of the EdgeDataT data mmap'd from the .fileIndex file
util::vector_view<const EdgeDataT> m_objects;
EdgeDataT tmp;
public:
StaticRTree() = default;
@ -462,6 +463,7 @@ class StaticRTree
: m_coordinate_list(coordinate_list.data(), coordinate_list.size()),
m_objects(mmapFile<EdgeDataT>(on_disk_file_name, m_objects_region))
{
preheat();
}
/**
@ -480,6 +482,7 @@ class StaticRTree
{
BOOST_ASSERT(m_tree_level_starts.size() >= 2);
m_objects = mmapFile<EdgeDataT>(on_disk_file_name, m_objects_region);
preheat();
}
/* Returns all features inside the bounding box.
@ -761,6 +764,18 @@ class StaticRTree
return treeindex.level == m_tree_level_starts.size() - 2;
}
void preheat()
{
auto iter = m_objects.begin();
auto end = m_objects.end();
while (iter < end)
{
tmp = *(iter.get_ptr());
// because os's page is unit of 4K
iter += LEAF_NODE_SIZE;
}
}
friend void serialization::read<EdgeDataT, Ownership, BRANCHING_FACTOR, LEAF_PAGE_SIZE>(
storage::tar::FileReader &reader, const std::string &name, StaticRTree &rtree);

View File

@ -41,6 +41,7 @@ class VectorViewIterator : public boost::iterator_facade<VectorViewIterator<Data
explicit VectorViewIterator() : m_value(nullptr) {}
explicit VectorViewIterator(DataT *x) : m_value(x) {}
DataT * get_ptr(){return m_value;}
private:
void increment() { ++m_value; }