Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

Table of Contents

一. 设计目的

        当mods文件里的删除记录到达一定数量时,势必会降低查询等相关操作的执行效率,同时由于TsFile里存储着大量被用户删除的数据,在一定程度上也浪费了存储资源。因此,我们开发了TsFile整理工具帮助你对指定的TsFile文件进行整理和重写。

...

  1. 整理工具可以帮助你整理已封口的tsFile文件和.mods文件,过滤掉删除的数据并生成新的tsFile。整理完后会将本地旧的.mods文件删除,若某tsFile里的数据被全部删除了,则会删除本地该tsFile文件和对应的.resource文件。

  2. 整理工具只能针对v0.12版本的IOTDB来使用,即只能针对版本为V3的tsFile进行整理,若低于此版本则必须先用在线升级工具将tsFile升级到V3版本。

  3. tsFile整理工具分为在线整理工具和离线整理工具,两者在整理的时候都会记录日志,供下次恢复先前整理失败的文件。在执行整理的时候会先去检测日志里是否存在失败的文件,有的话则优先整理它们。tsFile整理工具分为在线整理工具和离线整理工具,两者在整理的时候都会记录日志,供下次恢复之前整理失败的文件。在执行整理的时候会先去检测日志里是否存在失败的文件,有的话则优先整理它们。

三. 离线整理工具

        该工具的启动脚本settle.bat和settle.sh在编译了server后会生成至server\target\iotdb-server-{version}\tools\tsFileToolSet目录中。运行脚本时要给定至少一个参数,该参数可以是一个目录路径或者是一个具体的tsFile文件路径,不同参数间用空格分割。若参数是目录,则离线整理工具会递归寻找该目录下所有已封口的tsFile进行整理。若有多个参数,离线整理工具则会寻找指定参数下的所有tsFile文件,对他们依次进行整理。

        在使用离线整理工具的时候,必须保证IOTDB server停止运行,否则会出错。

...

>.\settle.bat C:\IOTDB\sourceCode\choubenson\iotdb\data\data\sequence\root.ln\0\0

````````````````````````
Starting Settling the tsFile
````````````````````````
Totally find 3 tsFiles to be settled, including 0 tsFiles to be recovered.
Start settling for tsFile : C:\IOTDB\sourceCode\choubenson\iotdb\data\data\sequence\root.ln\0\0\1631261328514-1-0-2.tsFile
Finish settling successfully for tsFile : C:\IOTDB\sourceCode\choubenson\iotdb\data\data\sequence\root.ln\0\0\1631261328514-1-0-2.tsFile
Start settling for tsFile : C:\IOTDB\sourceCode\choubenson\iotdb\data\data\sequence\root.ln\0\0\1631274465662-3-0-1.tsFile
Finish settling successfully for tsFile : C:\IOTDB\sourceCode\choubenson\iotdb\data\data\sequence\root.ln\0\0\1631274465662-3-0-1.tsFile
Start settling for tsFile : C:\IOTDB\sourceCode\choubenson\iotdb\data\data\sequence\root.ln\0\0\1631433121335-5-0-0.tsFile
Finish settling successfully for tsFile : C:\IOTDB\sourceCode\choubenson\iotdb\data\data\sequence\root.ln\0\0\1631433121335-5-0-0.tsFile
Finish settling all tsFiles successfully!

3.2 相关类

整理工具类:org         整理工具类:org.apache.iotdb.db.tools.settle.tsFileAndModSettleTool

四. 在线整理工具

        当用户在IoTDB客户端输入了settle命令后,在线整理工具会在后台注册启动一个整理服务Settle Service,该服务会去寻找指定存储组下的所有tsFile文件,并为每个tsFile开启一个整理线程进行整理。在线整理工具在整理过程中不允许用户对该虚拟存储组下的数据有任何的删除操作,直到整理完毕。

...

  1. 首先对该旧tsFile文件加读锁,避免在重写的过程中该tsFile被删除,而在删除该tsFile的本地mods文件前允许用户对该tsFile进行查询操作。【该步骤在StorageGroupProcessor类的settle()方法里】

  2. 往整理日志记录标记该文件的状态为1。

  3. 对旧tsFile和其mods文件进行整理并重写到新tsFile文件(此时新tsFile和对应的新.resource文件已经生成并存放在临时目录下,位置为:“旧tsFile所在目录\新tsFile时间分区目录\”)。若该旧tsFile数据都已被删除了,则会直接删除本地tsFile及其.resource文件。注意:在删除tsFile文件的前后会加写锁并释放写锁。【该步骤在tsFileAndModSettleTool类的settleOnetsFileAndMod()方法里】

  4. 往整理日志记录标记该文件的状态为2。

  5. 对旧tsFile文件加写锁,阻塞用户的查询等操作。【该步骤在StorageGroupProcessor类的settletsFileCallBack()方法里】

  6. 删除旧mods文件,然后将新tsFile和对应的新.resource文件移动到正确的目录下(即旧tsFile所在目录),此过程是先删除旧对应旧文件,再把新的移动过去。【该步骤在tsFileRewriteTool类的moveNewtsFile()方法里】

  7. 清空内存中与该tsFile的相关缓存数据,即该被重写的tsFile在内存中涉及到的相关数据都应该被及时更新:

    (1) 需要clear cache (包括chunk cache和timeseriesmetadata cache),防止因为Mods被删除而读出该tsFile已被删除的数据(脏数据)

    (2) 若整理后,此tsFile被删除,则要从StorageGroupProcessor的tsFileManagement里挪去该oldtsFileResource.

    【该步骤在StorageGroupProcessor类的settletsFileCallBack()方法里】

  8. 对该tsFile释放写锁,允许用户对该文件进行查询操作,然后释放读锁,允许该文件被删除。

  9. 往整理日志标记该文件的状态为3,settle结束!

4.2.2 注意事项

        在线整理工具在整理过程中阻塞了用户对该虚拟存储组下的数据有任何的删除操作,直到整理完毕。

...