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)!