Skip to content

Commit 8b72034

Browse files
Add error-bounded lossy compressor MacaqueV (#341)
* Add MacaqueV model type's implementation * Improve comments and remove redundant code * Ensure all comments for Gorilla are consistent * Ensure formatting is consistent * Add missing punctuations in comments * Ensure bit rewriting method checks for a negative zero * Run rustfmt with --edition 2024 * Ensure comments are consistent as per CGodiksen's feedback * Add comments for MacaqueTS * Remove listing in MacaqueV documentation * Fix SKJ's comments * Run tests again * Describe MacaqueTS using bullet list * Ensure the least significant mantissa bits is everywhere * Clarify MacaqueV doc comment
1 parent a9c7689 commit 8b72034

5 files changed

Lines changed: 195 additions & 110 deletions

File tree

crates/modelardb_compression/src/compression.rs

Lines changed: 24 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -24,8 +24,8 @@ use arrow::record_batch::RecordBatch;
2424
use modelardb_types::types::{ErrorBound, TimestampArray, ValueArray};
2525

2626
use crate::error::{ModelarDbCompressionError, Result};
27-
use crate::models::gorilla::Gorilla;
28-
use crate::models::{self, GORILLA_ID, timestamps};
27+
use crate::models::macaque_v::MacaqueV;
28+
use crate::models::{self, MACAQUE_V_ID, timestamps};
2929
use crate::types::{CompressedSegmentBatchBuilder, CompressedSegmentBuilder, ModelBuilder};
3030

3131
/// Maximum number of residuals that can be stored as part of a compressed segment. The number of
@@ -238,13 +238,13 @@ fn compress_and_store_residuals_in_a_separate_segment(
238238

239239
// Compute metadata and compress the values stored in this segment without residuals.
240240
let uncompressed_values = &uncompressed_values.values()[start_index..=end_index];
241-
let mut gorilla = Gorilla::new(error_bound);
242-
gorilla.compress_values(uncompressed_values);
241+
let mut macaque_v = MacaqueV::new(error_bound);
242+
macaque_v.compress_values(uncompressed_values);
243243

244-
let (values, min_value, max_value) = gorilla.model();
244+
let (values, min_value, max_value) = macaque_v.model();
245245

246246
compressed_segment_batch_builder.append_compressed_segment(
247-
GORILLA_ID,
247+
MACAQUE_V_ID,
248248
start_time,
249249
end_time,
250250
&timestamps,
@@ -470,7 +470,7 @@ mod tests {
470470
false,
471471
ValuesStructure::largest_random_without_overflow(),
472472
ErrorBound::try_new_absolute(ERROR_BOUND_ZERO).unwrap(),
473-
&[models::GORILLA_ID],
473+
&[models::MACAQUE_V_ID],
474474
);
475475
}
476476

@@ -480,7 +480,7 @@ mod tests {
480480
false,
481481
ValuesStructure::largest_random_without_overflow(),
482482
ErrorBound::try_new_relative(ERROR_BOUND_ZERO).unwrap(),
483-
&[models::GORILLA_ID],
483+
&[models::MACAQUE_V_ID],
484484
);
485485
}
486486

@@ -490,7 +490,7 @@ mod tests {
490490
true,
491491
ValuesStructure::largest_random_without_overflow(),
492492
ErrorBound::try_new_absolute(ERROR_BOUND_ZERO).unwrap(),
493-
&[models::GORILLA_ID],
493+
&[models::MACAQUE_V_ID],
494494
);
495495
}
496496

@@ -500,7 +500,7 @@ mod tests {
500500
true,
501501
ValuesStructure::largest_random_without_overflow(),
502502
ErrorBound::try_new_relative(ERROR_BOUND_ZERO).unwrap(),
503-
&[models::GORILLA_ID],
503+
&[models::MACAQUE_V_ID],
504504
);
505505
}
506506

@@ -539,8 +539,8 @@ mod tests {
539539
generate_compress_and_assert_known_time_series(
540540
ErrorBound::try_new_absolute(ERROR_BOUND_ZERO).unwrap(),
541541
false,
542-
&[models::GORILLA_ID, models::SWING_ID, models::PMC_MEAN_ID],
543-
&[models::GORILLA_ID, models::SWING_ID, models::PMC_MEAN_ID],
542+
&[models::MACAQUE_V_ID, models::SWING_ID, models::PMC_MEAN_ID],
543+
&[models::MACAQUE_V_ID, models::SWING_ID, models::PMC_MEAN_ID],
544544
);
545545
}
546546

@@ -550,8 +550,8 @@ mod tests {
550550
generate_compress_and_assert_known_time_series(
551551
ErrorBound::try_new_relative(ERROR_BOUND_ZERO).unwrap(),
552552
false,
553-
&[models::GORILLA_ID, models::SWING_ID, models::PMC_MEAN_ID],
554-
&[models::GORILLA_ID, models::SWING_ID, models::PMC_MEAN_ID],
553+
&[models::MACAQUE_V_ID, models::SWING_ID, models::PMC_MEAN_ID],
554+
&[models::MACAQUE_V_ID, models::SWING_ID, models::PMC_MEAN_ID],
555555
);
556556
}
557557

@@ -561,8 +561,8 @@ mod tests {
561561
generate_compress_and_assert_known_time_series(
562562
ErrorBound::try_new_absolute(ERROR_BOUND_ZERO).unwrap(),
563563
true,
564-
&[models::GORILLA_ID, models::SWING_ID, models::PMC_MEAN_ID],
565-
&[models::GORILLA_ID, models::SWING_ID, models::PMC_MEAN_ID],
564+
&[models::MACAQUE_V_ID, models::SWING_ID, models::PMC_MEAN_ID],
565+
&[models::MACAQUE_V_ID, models::SWING_ID, models::PMC_MEAN_ID],
566566
);
567567
}
568568

@@ -572,8 +572,8 @@ mod tests {
572572
generate_compress_and_assert_known_time_series(
573573
ErrorBound::try_new_relative(ERROR_BOUND_ZERO).unwrap(),
574574
true,
575-
&[models::GORILLA_ID, models::SWING_ID, models::PMC_MEAN_ID],
576-
&[models::GORILLA_ID, models::SWING_ID, models::PMC_MEAN_ID],
575+
&[models::MACAQUE_V_ID, models::SWING_ID, models::PMC_MEAN_ID],
576+
&[models::MACAQUE_V_ID, models::SWING_ID, models::PMC_MEAN_ID],
577577
);
578578
}
579579

@@ -583,7 +583,7 @@ mod tests {
583583
generate_compress_and_assert_known_time_series(
584584
ErrorBound::try_new_absolute(ERROR_BOUND_ZERO).unwrap(),
585585
false,
586-
&[models::PMC_MEAN_ID, models::SWING_ID, models::GORILLA_ID],
586+
&[models::PMC_MEAN_ID, models::SWING_ID, models::MACAQUE_V_ID],
587587
&[models::PMC_MEAN_ID, models::SWING_ID],
588588
);
589589
}
@@ -594,7 +594,7 @@ mod tests {
594594
generate_compress_and_assert_known_time_series(
595595
ErrorBound::try_new_relative(ERROR_BOUND_ZERO).unwrap(),
596596
false,
597-
&[models::PMC_MEAN_ID, models::SWING_ID, models::GORILLA_ID],
597+
&[models::PMC_MEAN_ID, models::SWING_ID, models::MACAQUE_V_ID],
598598
&[models::PMC_MEAN_ID, models::SWING_ID],
599599
);
600600
}
@@ -605,7 +605,7 @@ mod tests {
605605
generate_compress_and_assert_known_time_series(
606606
ErrorBound::try_new_absolute(ERROR_BOUND_ZERO).unwrap(),
607607
true,
608-
&[models::PMC_MEAN_ID, models::SWING_ID, models::GORILLA_ID],
608+
&[models::PMC_MEAN_ID, models::SWING_ID, models::MACAQUE_V_ID],
609609
&[models::PMC_MEAN_ID, models::SWING_ID],
610610
);
611611
}
@@ -616,7 +616,7 @@ mod tests {
616616
generate_compress_and_assert_known_time_series(
617617
ErrorBound::try_new_relative(ERROR_BOUND_ZERO).unwrap(),
618618
true,
619-
&[models::PMC_MEAN_ID, models::SWING_ID, models::GORILLA_ID],
619+
&[models::PMC_MEAN_ID, models::SWING_ID, models::MACAQUE_V_ID],
620620
&[models::PMC_MEAN_ID, models::SWING_ID],
621621
);
622622
}
@@ -649,7 +649,7 @@ mod tests {
649649
[uncompressed_timestamps_start_index..uncompressed_timestamps_end_index],
650650
ValuesStructure::Linear(None),
651651
),
652-
models::GORILLA_ID => data_generation::generate_values(
652+
models::MACAQUE_V_ID => data_generation::generate_values(
653653
&uncompressed_timestamps.values()
654654
[uncompressed_timestamps_start_index..uncompressed_timestamps_end_index],
655655
ValuesStructure::largest_random_without_overflow(),
@@ -1002,7 +1002,7 @@ mod tests {
10021002
);
10031003

10041004
assert_eq!(1, compressed_record_batch.num_rows());
1005-
assert_eq!(GORILLA_ID, model_type_ids.value(0));
1005+
assert_eq!(MACAQUE_V_ID, model_type_ids.value(0));
10061006
assert_eq!(100, start_times.value(0));
10071007
assert_eq!(500, end_times.value(0));
10081008
assert_eq!(1, timestamps.value(0).len());

0 commit comments

Comments
 (0)