From ad2903db9a814218a0abf5a39e1e57ab1a446d55 Mon Sep 17 00:00:00 2001 From: mokurin000 <1348292515a@gmail.com> Date: Fri, 19 Sep 2025 03:37:24 +0800 Subject: [PATCH] perf: drop json output support --- .../title/model/get_user_rating_api/mod.rs | 10 +++++ sdgb-api/src/title/model/mod.rs | 1 + sdgb-cli/src/main.rs | 43 ++++++++++++++++++- sdgb-cli/src/utils/helpers/mod.rs | 25 ----------- 4 files changed, 52 insertions(+), 27 deletions(-) diff --git a/sdgb-api/src/title/model/get_user_rating_api/mod.rs b/sdgb-api/src/title/model/get_user_rating_api/mod.rs index 9a83050..0304f8f 100644 --- a/sdgb-api/src/title/model/get_user_rating_api/mod.rs +++ b/sdgb-api/src/title/model/get_user_rating_api/mod.rs @@ -66,6 +66,16 @@ pub struct MusicRating { pub achievement: i32, } +#[cfg_attr(feature = "parquet", derive(parquet_derive::ParquetRecordWriter))] +#[derive(Default, Debug, Clone, PartialEq)] +pub struct MusicRatingFlatten { + pub user_id: u32, + pub music_id: u32, + pub level: u32, + pub rom_version: i64, + pub achievement: i32, +} + #[cfg_attr(feature = "bincode", derive(bincode::Encode, bincode::Decode))] #[derive(Default, Debug, Clone, PartialEq, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] diff --git a/sdgb-api/src/title/model/mod.rs b/sdgb-api/src/title/model/mod.rs index faa6e7e..c009a9e 100644 --- a/sdgb-api/src/title/model/mod.rs +++ b/sdgb-api/src/title/model/mod.rs @@ -18,6 +18,7 @@ pub use get_user_rating_api::{ GetUserRatingApi, GetUserRatingApiResp, // api MusicRating, + MusicRatingFlatten, Udemae, UserRating, }; diff --git a/sdgb-cli/src/main.rs b/sdgb-cli/src/main.rs index f5b0fdc..6bbfb69 100644 --- a/sdgb-cli/src/main.rs +++ b/sdgb-cli/src/main.rs @@ -363,9 +363,48 @@ async fn main() -> Result<(), Box> { } #[cfg(feature = "fetchall")] Commands::ScrapeAllB50Dump {} => { - use crate::{cache::B50, utils::helpers::dump_json}; + use sdgb_api::title::model::{MusicRating, MusicRatingFlatten}; - dump_json::("b50.json", B50)?; + use crate::{ + cache::B50, + utils::helpers::{dump_parquet, read_cache}, + }; + + let records: Vec = read_cache(B50)?; + dump_parquet::( + records + .into_iter() + .map( + |GetUserRatingApiResp { + user_id, + user_rating, + }| { + user_rating + .rating_list + .into_iter() + .chain(user_rating.next_rating_list) + .map( + move |MusicRating { + music_id, + level, + rom_version, + achievement, + }| { + MusicRatingFlatten { + user_id, + music_id, + level, + rom_version, + achievement, + } + }, + ) + }, + ) + .flatten() + .collect::>(), + "b50.parquet", + )?; } Commands::Userdata { diff --git a/sdgb-cli/src/utils/helpers/mod.rs b/sdgb-cli/src/utils/helpers/mod.rs index 95c7b5e..dea969b 100644 --- a/sdgb-cli/src/utils/helpers/mod.rs +++ b/sdgb-cli/src/utils/helpers/mod.rs @@ -11,7 +11,6 @@ use parquet::file::writer::SerializedFileWriter; use parquet::record::RecordWriter; use redb::ReadableTable; use redb::TableDefinition; -use serde::Serialize; use spdlog::{error, info}; use sdgb_api::title::MaiVersionExt; @@ -96,30 +95,6 @@ where Ok(()) } -pub fn dump_json( - output_path: impl AsRef, - definition: TableDefinition<'_, u32, Vec>, -) -> Result<(), Box> -where - D: for<'d> BorrowDecode<'d, ()> + Serialize, -{ - let file = OpenOptions::new() - .create(true) - .truncate(true) - .write(true) - .open(output_path)?; - - #[cfg(file_lock_ready)] - file.try_lock()?; - - let data = read_cache::(definition)?; - let writer = BufWriter::new(file); - serde_json::to_writer_pretty(writer, &data)?; - info!("dumped {} records", data.len()); - - Ok(()) -} - pub async fn cached_concurrent_fetch( user_ids: impl Into>, client: &AsyncClient,