#writer #apache #sync #instance #sender #ts-file #io-tdb

tsfile-writer

这是一个简单的Rust TsFile写入器,带有同步发送者,可以将tsfiles导入到Apache IoTDB实例中

6个版本

0.2.1 2022年7月6日
0.2.0 2022年7月6日
0.1.3 2022年6月18日

#849 in 编码

Apache-2.0

255KB
5.5K SLoC

Rust TsFile Writer

这是一个尚未功能完整的TsFiles版本3(如Apache IoTDB项目定义)的Writer。目前不支持所有TsFiles功能。最值得注意的是

  • 无法写入对齐块
  • 并非所有编码都可用
  • 不支持所有数据类型
  • 不支持所有压缩类型

但总的来说,使用此客户端编写的TsFiles与Java编写的TsFiles具有100%的兼容性。

快速入门

要写入TsFile,只需做类似以下的事情

// Create the Schema
// Two devices with two sensors each
let schema = TsFileSchemaBuilder::new()
        .add(
            "d1",
            DeviceBuilder::new()
                .add(
                    "s1",
                    TSDataType::INT64,
                    TSEncoding::PLAIN,
                    CompressionType::UNCOMPRESSED,
                )
                .add(
                    "s2",
                    TSDataType::FLOAT,
                    TSEncoding::PLAIN,
                    CompressionType::UNCOMPRESSED,
                )
                .build(),
        )
        .add(
            "d2",
            DeviceBuilder::new()
                .add(
                    "s1",
                    TSDataType::INT64,
                    TSEncoding::PLAIN,
                    CompressionType::UNCOMPRESSED,
                )
                .add(
                    "s2",
                    TSDataType::FLOAT,
                    TSEncoding::PLAIN,
                    CompressionType::UNCOMPRESSED,
                )
                .build(),
        )
        .build();
        
// Create the writer
let mut writer = TsFileWriter::new(
    "target/benchmark2.tsfile",
    schema,
    Default::default(),
)
.unwrap();
        
// Write multiple timeseries at once
writer.write_many("d1",1, vec![
        DataPoint::new("s1", IoTDBValue::LONG(i)),
        DataPoint::new("s2", IoTDBValue::FLOAT(i as f32)),
]);
    
// Write single series
writer.write("d2", "s1", 1, IoTDBValue::LONG(i));
writer.write("d2", "s2", 1, IoTDBValue::FLOAT(i as f32));

当前实现的功能

编码

  • 纯文本
  • TS2Diff编码用于INT32和INT64
  • 其他所有...

数据类型

  • INT32
  • INT64
  • FLOAT
  • 其他所有...

压缩

  • 未压缩
  • SNAPPY
  • 其他所有...

同步发送者功能

这是Apache IoTDB服务器的一个非常简单的"同步客户端"实现。这意味着,这个工具的行为与运行了start-sync-client.sh的IoTDB服务器类似。即它会使用Apache IoTDB的同步协议将tsfiles发送到相应的接收服务器。

变更日志

0.2.1(由于变更日志错误而重新发布)

  • TsFileWriter::write_many现在接受IntoIterator<Item=DataPoint<'a>>作为参数,而不是仅接受Vec<DataPoint<'a>>
  • 添加了同步发送者(功能sync_sender

0.1.3

  • TS2Diff现在可用于INT64和INT32

0.1.2

  • SNAPPY压缩现在可用
  • 在代码库中使用CI管道和cargo fmt

0.1.1

  • 大量重构
  • Result<_, TsFileError>添加到几乎每个操作中
  • 改进了README

依赖关系

~0.2–1.4MB
~22K SLoC