自学内容网 自学内容网

Rust: Fury高性能序列化库尝试

在序列化库中,传统的有Json,XML,性能好的有thrift,protobuf等。据说Fury官网的介绍,Fury性能要远远好于protobuf,且不象protobuf还需要定义IDL,非常轻便,随取随用。
今天来尝试一下。

一、cargo.toml
目前Rust Fury库,还是初期,还是建议在github官网中,下载到本地。

[package]
name = "fury-project"
version = "0.1.0"
edition = "2021"

[dependencies]
fury = { path = "../rust/fury" }
fury-derive = { path = "../rust/fury-derive" }

chrono = "0.4"
lazy_static = { version = "1.4" }

二、main.rs


use fury::{from_buffer, to_buffer, Fury};
use std::time::Instant;

#[derive(Fury, Debug, PartialEq)]
#[tag("bar.foo")]
struct Bar{
    code:String,
    date:String,
    open:f32,
    high:f32,
    close:f32,
    low:f32,
    volume:f32,
    amount:f32,
    is_fq:bool,
}

impl Bar{
    fn default() -> Bar{  
        Bar{
            code : String::from("600036.XSHG"),
            date : String::from("2021-01-05"),
            open: 19.95,
            high: 20.02,
            close: 19.99,
            low: 19.89,
            volume: 6900.0,
            amount: 6900.0 * 19.99,
            is_fq: false,
        }
    }
}

#[derive(Fury, Debug, PartialEq)]
#[tag("vec_bar.foo")]
struct VecBar{
    data: Vec<Bar>,
}
fn main() {
    let time0 = Instant::now();
    let bar1   = Bar::default();
    let bars1 : Vec<Bar>= vec![bar1];
    let vec_bars = VecBar{data:bars1};
    
    let binary_vec_bar: Vec<u8> = to_buffer(&vec_bars);
    println!("vec_bar serialize  cost time : {:?} seconds",time0.elapsed().as_secs_f32());
    let time1 = Instant::now();
    let vec_bar_obj: VecBar = from_buffer(&binary_vec_bar).expect("should success");
    println!("vec_bar deserialize  cost time : {:?} seconds",time1.elapsed().as_secs_f32());
    assert_eq!(vec_bars, vec_bar_obj);

    let time2 = Instant::now();
    let bars2 = vec![Bar::default() ]; 
    let binary_bars  = to_buffer(&bars2);
    println!("bars serialize  cost time : {:?} seconds",time2.elapsed().as_secs_f32());

    let time3 = Instant::now();
    let bars_obj: Vec<Bar> = from_buffer(&binary_bars).expect("should success");
    println!("bars deserialize  cost time : {:?} seconds",time3.elapsed().as_secs_f32());
    assert_eq!(bars2, bars_obj);

}

可以看出,Fury库序列化和反序列化是多么简洁!就是简单的一行代码。

三、输出

vec_bar serialize  cost time : 1.12e-5 seconds
vec_bar deserialize  cost time : 1.71e-5 seconds
bars serialize  cost time : 4.2e-6 seconds
bars deserialize  cost time : 2.1e-6 seconds

大家可以比较一下,不同结构序列化和反序列化的性能。


原文地址:https://blog.csdn.net/wowotuo/article/details/140213658

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!