...
2.5.5 写入root.sg2.d2.s1
(1) → (2) → (4) → (6)
3.方案二详细设计
3.1 Storage Engine
ConcurrentHashMap<PartialPath, StorageGroupProcessor> processorMap -> ConcurrentHashMap<PartialPath, VirtualStorageGroupManager> processorMap
从时间序列设备ID找到存储组的过程需要做相应修改,主要影响的函数为:
insert(InsertRowPlan)
insertTablet(InsertTabletPlan)
delete(PartialPath, long, long, long)
deleteTimeseries(PartialPath, long)
query(SingleSeriesExpression, QueryContext, QueryFileManager)
mergeLock(List<PartialPath>)
loadNewTsFileForSync(TsFileResource newTsFileResource)
loadNewTsFile(TsFileResource newTsFileResource)
deleteTsfileForSync(File deletedTsfile)
moveTsfile(File tsfileToBeMoved, File targetDir)
setPartitionVersionToMax(PartialPath storageGroup, long partitionId,long newMaxVersion)
removePartitions(PartialPath storageGroupPath, TimePartitionFilter filter)
setTTL(PartialPath storageGroup, long dataTTL)
3.2 Virtual Storage Group Manager
字段:
VirtualPartitioner partitioner; // 用于决定划分虚拟存储组的具体逻辑
StorageGroupProcessor[] virtualStorageGroupProcessor; // 虚拟存储组列表
方法:
/**
* get processor from device id
* @param partialPath device path
* @return virtual storage group processor
*/
public StorageGroupProcessor getProcessor(PartialPath partialPath, StorageGroupMNode storageGroupMNode)
throws StorageGroupProcessorException, StorageEngineException;
/**
* recover
* @param storageGroupMNode logical sg mnode
*/
public void recover(StorageGroupMNode storageGroupMNode) throws StorageGroupProcessorException;
/**
* get all virtual storage group Processor
* @return all virtual storage group Processor
*/
public StorageGroupProcessor[] getAllVirutalStorageGroupProcessor();
3.3 VirtualPartitioner
public interface VirtualPartitioner {
/**
* use device id to determine storage group id
*
* @param deviceId device id
* @return virtual storage group id
*/
public int deviceToStorageGroup(PartialPath deviceId);
/**
* release resource
*/
public void clear();
/**
* get total number of virtual storage group
*
* @return total number of virtual storage group
*/
public int getPartitionCount();
}
3.4 执行逻辑
3.4.1 设备ID层操作(例如insert, query等)
(1)Storage Engine拿到device ID,根据其逻辑存储组名找到对应的VirtualStorageGroupManager
(2)使用deviceID根据VirtualStorageGroupManager.getProcessor方法拿到虚拟存储组(方案二中就是StorageGroupProcessor)
(3)将请求发给找到的虚拟存储组
3.4.2 逻辑存储组层操作(例如removePartitions等)
(1)Storage Engine拿到device ID,根据其逻辑存储组名找到对应的VirtualStorageGroupManager
(2)使用VirtualStorageGroupManager.getAllVirutalStorageGroupProcessor方法拿到所属全部虚拟存储组(方案二中就是StorageGroupProcessor)
(3)将请求转发至所有虚拟存储组