You've already forked mariadb-columnstore-engine
mirror of
https://github.com/mariadb-corporation/mariadb-columnstore-engine.git
synced 2025-08-07 03:22:57 +03:00
MCOL-4912 This patch introduces Extent Map index to improve EM scaleability
EM scaleability project has two parts: phase1 and phase2. This is phase1 that brings EM index to speed up(from O(n) down to the speed of boost::unordered_map) EM lookups looking for <dbroot, oid, partition> tuple to turn it into LBID, e.g. most bulk insertion meta info operations. The basis is boost::shared_managed_object where EMIndex is stored. Whilst it is not debug-friendly it allows to put a nested structs into shmem. EMIndex has 3 tiers. Top down description: vector of dbroots, map of oids to partition vectors, partition vectors that have EM indices. Separate EM methods now queries index before they do EM run. EMIndex has a separate shmem file with the fixed id MCS-shm-00060001.
This commit is contained in:
committed by
Leonid Fedorov
parent
fb3eaabd29
commit
4c26e4f960
@@ -30,17 +30,18 @@
|
||||
//#define NDEBUG
|
||||
#include <cassert>
|
||||
#include <boost/interprocess/shared_memory_object.hpp>
|
||||
#include <boost/interprocess/managed_shared_memory.hpp>
|
||||
#include <boost/interprocess/mapped_region.hpp>
|
||||
|
||||
namespace bi = boost::interprocess;
|
||||
|
||||
namespace BRM
|
||||
{
|
||||
class BRMShmImpl
|
||||
class BRMShmImplParent
|
||||
{
|
||||
public:
|
||||
BRMShmImpl(unsigned key, off_t size, bool readOnly = false);
|
||||
~BRMShmImpl()
|
||||
{
|
||||
}
|
||||
BRMShmImplParent(unsigned key, off_t size, bool readOnly = false);
|
||||
virtual ~BRMShmImplParent();
|
||||
|
||||
inline unsigned key() const
|
||||
{
|
||||
@@ -55,23 +56,63 @@ class BRMShmImpl
|
||||
return fReadOnly;
|
||||
}
|
||||
|
||||
void setReadOnly();
|
||||
int grow(unsigned newKey, off_t newSize);
|
||||
int clear(unsigned newKey, off_t newSize);
|
||||
|
||||
void swap(BRMShmImpl& rhs);
|
||||
void destroy();
|
||||
|
||||
boost::interprocess::shared_memory_object fShmobj;
|
||||
boost::interprocess::mapped_region fMapreg;
|
||||
|
||||
private:
|
||||
BRMShmImpl(const BRMShmImpl& rhs);
|
||||
BRMShmImpl& operator=(const BRMShmImpl& rhs);
|
||||
virtual void setReadOnly() = 0;
|
||||
virtual int clear(unsigned newKey, off_t newSize) = 0;
|
||||
virtual void destroy() = 0;
|
||||
|
||||
protected:
|
||||
unsigned fKey;
|
||||
off_t fSize;
|
||||
bool fReadOnly;
|
||||
};
|
||||
|
||||
class BRMShmImpl : public BRMShmImplParent
|
||||
{
|
||||
public:
|
||||
BRMShmImpl(unsigned key, off_t size, bool readOnly = false);
|
||||
BRMShmImpl(const BRMShmImpl& rhs) = delete;
|
||||
BRMShmImpl& operator=(const BRMShmImpl& rhs) = delete;
|
||||
~BRMShmImpl()
|
||||
{
|
||||
}
|
||||
|
||||
int clear(unsigned newKey, off_t newSize) override;
|
||||
void destroy() override;
|
||||
void setReadOnly() override;
|
||||
|
||||
int grow(unsigned newKey, off_t newSize);
|
||||
void swap(BRMShmImpl& rhs);
|
||||
|
||||
bi::shared_memory_object fShmobj;
|
||||
bi::mapped_region fMapreg;
|
||||
};
|
||||
|
||||
class BRMManagedShmImpl : public BRMShmImplParent
|
||||
{
|
||||
public:
|
||||
BRMManagedShmImpl(unsigned key, off_t size, bool readOnly = false);
|
||||
BRMManagedShmImpl(const BRMManagedShmImpl& rhs) = delete;
|
||||
BRMManagedShmImpl& operator=(const BRMManagedShmImpl& rhs) = delete;
|
||||
~BRMManagedShmImpl()
|
||||
{
|
||||
delete fShmSegment;
|
||||
}
|
||||
|
||||
int clear(unsigned newKey, off_t newSize) override;
|
||||
void destroy() override;
|
||||
void setReadOnly() override;
|
||||
|
||||
int grow(off_t newSize);
|
||||
void remap(const bool readOnly = false);
|
||||
void swap(BRMManagedShmImpl& rhs);
|
||||
bi::managed_shared_memory* getManagedSegment()
|
||||
{
|
||||
assert(fShmSegment);
|
||||
return fShmSegment;
|
||||
}
|
||||
|
||||
private:
|
||||
bi::managed_shared_memory* fShmSegment;
|
||||
};
|
||||
|
||||
} // namespace BRM
|
||||
|
Reference in New Issue
Block a user