Я новичок в rust & msgpack, поэтому подумал, что я увижу, ожидается ли это ожидаемая производительность и есть ли какие-нибудь значительно более быстрые способы использования этого ящика. У меня есть файл (это данные геолокации из базы данных Maxmind CSV). Это примерно 180 МБ. Мне нужно иметь возможность десериализовать данные как можно быстрее и, если возможно, гораздо быстрее, чем за секунду.
Это примерно то, что я делаю, я убрал все посторонние вещи.
#[derive(Debug, PartialEq, Deserialize, Serialize)]
struct Record {
network: String,
geoname_id: String,
registered_country_geoname_id: String,
represented_country_geoname_id: String,
is_anonymous_proxy: String,
is_satellite_provider: String,
postal_code: String,
latitude: String,
longitude: String,
accuracy_radius: String
}
fn main() -> std::io::Result<()> {
let f = File::open("src/ips.csv")?; // maxmind geolite ipv4 database ~180mb
let mut r = csv::Reader::from_reader(BufReader::new(f));
let mut records = Vec::new();
for result in r.deserialize() {
let record: Record = result?;
records.push(record);
}
let buf = rmp_serde::to_vec(&records).unwrap();
let now = Instant::now();
let values: Vec<Record> = rmp_serde::from_read_ref(&buf).unwrap();
println!("time {}", now.elapsed().as_secs());
Ok(())
}
Я также выбросил buf в файл для его допроса. Это ~ 180мб. Что я думал, будет меньше с пакетом сообщений?