在IoTDB服务启动时,通过加载日志文件mlog.bin组织元数据信息,并将结果长期持有在内存中;随着元数据的不断增长,内存会持续上涨;为支持海量元数据场景下,内存在可控范围内波动,我们提供了基于rocksDB的元数据存储方式。
首先使用下面的命令将 schema-engine-rocksdb 打包
mvn clean package -pl schema-engine-rocksdb -am -DskipTests
命令运行结束后,在其 target/schema-engine-rocksdb 中会有一个 lib 文件夹和 conf 文件夹。将 conf 文件夹下的文件拷贝到 server 的 conf 文件夹中,将 lib 文件夹下的文件也拷贝到 server 的 lib 的文件夹中。
在系统配置文件iotdb-datanode.properties中,将配置项schema_engine_mode修改为Rocksdb_based, 如:
#################### ### Schema Engine Configuration #################### # Choose the mode of schema engine. The value could be Memory,Schema_File and Rocksdb_based. If the provided value doesn't match any pre-defined value, Memory mode will be used as default. # Datatype: string schema_engine_mode=Rocksdb_based
当指定rocksdb作为元数据的存储方式时,我们开放了rocksdb相关的配置参数,您可以通过修改配置文件schema-rocksdb.properties,根据自己的需求,进行合理的参数调整,例如查询的缓存等。如没有特殊需求,使用默认值即可。
该模块仍在不断完善中,部分功能暂不支持,功能模块支持情况如下:
| 功能 | 支持情况 |
|---|---|
| 时间序列增删 | 支持 |
| 路径通配符(* 及 **)查询 | 支持 |
| tag增删 | 支持 |
| 对齐时间序列 | 支持 |
| 节点名称(*)通配 | 不支持 |
| 元数据模板template | 不支持 |
| tag索引 | 不支持 |
| continuous query | 不支持 |
外部接口,即客户端可以感知到,相关sql不支持;
内部接口,即服务内部的其他模块调用逻辑,与外部sql无直接依赖关系;
| 接口名称 | 接口类型 | 支持情况 | 说明 |
|---|---|---|---|
| createTimeseries | 外部接口 | 支持 | |
| createAlignedTimeSeries | 外部接口 | 支持 | |
| showTimeseries | 外部接口 | 部分支持 | 不支持LATEST |
| changeAlias | 外部接口 | 支持 | |
| upsertTagsAndAttributes | 外部接口 | 支持 | |
| addAttributes | 外部接口 | 支持 | |
| addTags | 外部接口 | 支持 | |
| dropTagsOrAttributes | 外部接口 | 支持 | |
| setTagsOrAttributesValue | 外部接口 | 支持 | |
| renameTagOrAttributeKey | 外部接口 | 支持 | |
| *template | 外部接口 | 不支持 | |
| *trigger | 外部接口 | 不支持 | |
| deleteSchemaRegion | 内部接口 | 支持 | |
| autoCreateDeviceMNode | 内部接口 | 不支持 | |
| isPathExist | 内部接口 | 支持 | |
| getAllTimeseriesCount | 内部接口 | 支持 | |
| getDevicesNum | 内部接口 | 支持 | |
| getNodesCountInGivenLevel | 内部接口 | 有条件支持 | 路径不支持通配 |
| getMeasurementCountGroupByLevel | 内部接口 | 支持 | |
| getNodesListInGivenLevel | 内部接口 | 有条件支持 | 路径不支持通配 |
| getChildNodePathInNextLevel | 内部接口 | 有条件支持 | 路径不支持通配 |
| getChildNodeNameInNextLevel | 内部接口 | 有条件支持 | 路径不支持通配 |
| getBelongedDevices | 内部接口 | 支持 | |
| getMatchedDevices | 内部接口 | 支持 | |
| getMeasurementPaths | 内部接口 | 支持 | |
| getMeasurementPathsWithAlias | 内部接口 | 支持 | |
| getAllMeasurementByDevicePath | 内部接口 | 支持 | |
| getDeviceNode | 内部接口 | 支持 | |
| getMeasurementMNodes | 内部接口 | 支持 | |
| getSeriesSchemasAndReadLockDevice | 内部接口 | 支持 |