下面介绍四种常用数据操控操作,分别是插入,更新,删除和TTL设置
对应的接口
总入口: public void insert(InsertRowPlan insertRowPlan) StorageEngine.java
对应的接口
总入口: public void insertTablet(InsertTabletPlan insertTabletPlan) StorageEngine.java
目前不支持数据的原地更新操作,即update语句,但用户可以直接插入新的数据,在同一个时间点上的同一个时间序列以最新插入的数据为准 旧数据会通过合并来自动删除,参见:
每个 StorageGroupProsessor 中针对每个分区会维护一个自增的版本号,由 SimpleFileVersionController 管理。 每个内存缓冲区 memtable 在持久化的时候会申请一个版本号。持久化到 TsFile 后,会在 TsFileMetadata 中记录此 memtable 对应的 多个 ChunkGroup 的终止位置和版本号。 查询时会根据此信息对 ChunkMetadata 赋 version。
StorageEngine.java中的delete入口:
public void delete(String deviceId, String measurementId, long timestamp)
Mods文件用来存储所有的删除记录。下图的mods文件中,d1.s1落在 [100, 200], [180, 300]范围的数据,以及d1.s2落在[500, 1000]范围中的数据将会被删除。
对应的接口
总入口: public void setTTL(String storageGroup, long dataTTL) StorageEngine.java
同时,我们在 StorageEngine 中启动了一个定时检查文件TTL的线程,详见