#streaming #cursor-based #bigserial

diesel-streamer

一个用于流式传输大型表的柴油小插件

5个版本

0.1.12 2023年9月17日
0.1.11 2023年9月17日
0.1.8 2023年7月22日

#529 in 数据库接口

Download history 105/week @ 2024-03-09 59/week @ 2024-03-16 18/week @ 2024-03-23 27/week @ 2024-03-30 227/week @ 2024-04-06 11/week @ 2024-04-13

147 每月下载次数

MIT/Apache

22KB
358

Diesel Streamer

github crates.io diesel-streamer build

一个用于流式传输大型表的柴油小插件。它目前允许使用基于游标的流式传输策略来流式传输大型序列表。

安装

对于常规同步运行时

[dependencies]
diesel-streamer = { version = "0.1.12", features = ["sync"]}

对于tokio异步运行时

[dependencies]
diesel-streamer = { version = "0.1.12", features = ["async"]}

示例用法

流式传输具有 serial_fieldSomeTable

use diesel_streamer::stream_serial_table;

fn main() {
  use crate::schema::some_table::dsl::{some_table, serial_field};

  let mut conn = pool.get().await.unwrap();

  // with default chunk size of 500
  stream_serial_table!(some_table, serial_field, conn, |streamed_table_data: Vec<SomeTable>| {
    // do work here
    dbg!(streamed_table_data);
  });

  // specify chunk size, 130
  stream_serial_table!(some_table, serial_field, conn, 130, |streamed_table_data: Vec<SomeTable>| {
    // do work here
    dbg!(streamed_table_data);
  });

  // with cursor's beginning, 5.
  stream_serial_table!(some_table, serial_field, conn, 130, 5, |streamed_table_data: Vec<SomeTable>| {
    // do work here
    dbg!(streamed_table_data);
  });

  // with cursor's end, 50,
  stream_serial_table!(some_table, serial_field, conn, 130, 5, 50, |streamed_table_data: Vec<SomeTable>| {
    // do work here
    dbg!(streamed_table_data);
  });
}

默认值

  • 块大小:500
  • 游标开始:表中 serial_field 的最低值
  • 游标结束:表中 serial_field 的最高值

注意:通常,只有在处理相关表时可能遇到OOM错误的情况下,才应考虑流式传输。

贡献

使用 docker-compose up 启动测试数据库,或者简单地像在 .env.sample 中显示的那样指定DB URL。

运行 cargo test 进行测试。

许可

根据您的选择,受Apache License 2.0或MIT许可的许可。 Apache License, Version 2.0MIT license
除非您明确声明,否则任何有意提交以包含在本crate中的贡献,根据Apache-2.0许可证定义,应如上所述双重许可,而不附加任何额外条款或条件。

无运行时依赖

功能