Changeset: bed69831dbee for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=bed69831dbee
Modified Files:
monetdb5/modules/mosaic/mosaic.c
monetdb5/modules/mosaic/mosaic.h
monetdb5/modules/mosaic/mosaic_capped.c
monetdb5/modules/mosaic/mosaic_raw.c
sql/test/mosaic/Tests/analysis.stable.out
Branch: mosaic
Log Message:
More estimation balancing.
diffs (137 lines):
diff --git a/monetdb5/modules/mosaic/mosaic.c b/monetdb5/modules/mosaic/mosaic.c
--- a/monetdb5/modules/mosaic/mosaic.c
+++ b/monetdb5/modules/mosaic/mosaic.c
@@ -208,7 +208,7 @@ static inline BUN get_normalized_compres
BUN old = current->previous_compressed_size;
BUN new = current->compressed_size;
BUN cnt = current->compression_strategy.cnt;
- BUN normalized_cnt = *current->max_compression_length;
+ BUN normalized_cnt = *current->max_compression_length ?
*current->max_compression_length: 100;
assert (new >= old);
return (((new - old) * normalized_cnt) / cnt);
}
@@ -260,6 +260,7 @@ static str MOSestimate_inner_##TPE(MOSta
estimations[i].nr_capped_encoded_elements =
previous->nr_capped_encoded_elements;\
estimations[i].nr_capped_encoded_blocks =
previous->nr_capped_encoded_blocks;\
estimations[i].var_limit = previous->var_limit;\
+ estimations[i].capped_limit = previous->capped_limit;\
estimations[i].must_be_merged_with_previous = false;\
estimations[i].is_applicable = false;\
estimations[i].max_compression_length =
&max_compression_length;\
@@ -323,6 +324,7 @@ static str MOSestimate_##TPE(MOStask tas
\
\
BUN var_limit = 0;\
+ BUN capped_limit = 0;\
MosaicEstimation previous = {\
.is_applicable = false,\
.uncompressed_size = 0,\
@@ -330,6 +332,7 @@ static str MOSestimate_##TPE(MOStask tas
.compressed_size = 0,\
.nr_var_encoded_elements = 0,\
.nr_var_encoded_blocks = 0,\
+ .capped_limit = &capped_limit,\
.var_limit = &var_limit,\
.nr_capped_encoded_elements = 0,\
.nr_capped_encoded_blocks = 0,\
diff --git a/monetdb5/modules/mosaic/mosaic.h b/monetdb5/modules/mosaic/mosaic.h
--- a/monetdb5/modules/mosaic/mosaic.h
+++ b/monetdb5/modules/mosaic/mosaic.h
@@ -183,6 +183,7 @@ typedef struct _MosaicEstimation {
BUN nr_var_encoded_elements;
BUN nr_var_encoded_blocks;
BUN* var_limit;
+ BUN* capped_limit;
BUN nr_capped_encoded_elements;
BUN nr_capped_encoded_blocks;
BUN* max_compression_length;
diff --git a/monetdb5/modules/mosaic/mosaic_capped.c
b/monetdb5/modules/mosaic/mosaic_capped.c
--- a/monetdb5/modules/mosaic/mosaic_capped.c
+++ b/monetdb5/modules/mosaic/mosaic_capped.c
@@ -239,12 +239,19 @@ MOSestimate_SIGNATURE(capped, TPE)\
{\
(void) previous;\
GlobalCappedInfo* info = task->capped_info;\
+ if (task->start < *(current)->capped_limit) {\
+ /*Dictionary estimation is expensive. So only allow it on
disjoint regions.*/\
+ current->is_applicable = false;\
+ return MAL_SUCCEED;\
+ }\
BUN limit = (BUN) (task->stop - task->start > MOSAICMAXCNT?
MOSAICMAXCNT: task->stop - task->start);\
\
if (*current->max_compression_length != 0 &&
*current->max_compression_length < limit) {\
limit = *current->max_compression_length;\
}\
\
+ *(current)->capped_limit = task->start + limit;\
+\
TPE* val = getSrc(TPE, task);\
BUN delta_count;\
BUN nr_compressed;\
diff --git a/monetdb5/modules/mosaic/mosaic_raw.c
b/monetdb5/modules/mosaic/mosaic_raw.c
--- a/monetdb5/modules/mosaic/mosaic_raw.c
+++ b/monetdb5/modules/mosaic/mosaic_raw.c
@@ -106,7 +106,7 @@ MOSestimate_SIGNATURE(raw, TPE)\
else {\
current->must_be_merged_with_previous = false;\
cnt = 1;\
- current->compressed_size += 2 * sizeof(MOSBlockHeaderTpe(raw,
TPE));\
+ current->compressed_size += sizeof(TPE);\
}\
current->compression_strategy.cnt = cnt;\
\
diff --git a/sql/test/mosaic/Tests/analysis.stable.out
b/sql/test/mosaic/Tests/analysis.stable.out
--- a/sql/test/mosaic/Tests/analysis.stable.out
+++ b/sql/test/mosaic/Tests/analysis.stable.out
@@ -31,12 +31,11 @@ stdout of test 'analysis` in directory '
% .%4, .%4 # table_name
% technique, factor # name
% clob, double # type
-% 11, 24 # length
+% 10, 24 # length
[ "linear ", 175438.593 ]
[ "delta ", 15.998 ]
[ "frame ", 2.132 ]
[ "prefix ", 2.132 ]
-[ "capped var ", 0.571 ]
[ "var ", 0.571 ]
[ "runlength ", 0.333 ]
#insert into tmp4 select 10000000 from tmp4;
@@ -49,13 +48,17 @@ stdout of test 'analysis` in directory '
[ "runlength linear ", 333333.343 ]
[ "linear ", 327868.843 ]
[ "runlength delta ", 19.072 ]
+[ "capped delta ", 17.401 ]
[ "delta frame ", 17.401 ]
[ "delta prefix ", 17.401 ]
[ "var delta ", 17.401 ]
[ "delta ", 15.999 ]
[ "frame ", 2.285 ]
[ "prefix ", 2.285 ]
-[ "capped var ", 0.8 ]
+[ "raw runlength ", 1.999 ]
+[ "raw capped ", 1.184 ]
+[ "raw var ", 1.184 ]
+[ "capped var ", 0.881 ]
[ "var ", 0.799 ]
[ "runlength ", 0.666 ]
#select technique, factor from mosaic.analysis('sys', 'tmp4', 'i', 'linear,
runlength') order by factor desc, technique;
@@ -76,13 +79,17 @@ stdout of test 'analysis` in directory '
[ "runlength linear ", 333333.343 ]
[ "linear ", 327868.843 ]
[ "runlength delta ", 19.072 ]
+[ "capped delta ", 17.401 ]
[ "delta frame ", 17.401 ]
[ "delta prefix ", 17.401 ]
[ "var delta ", 17.401 ]
[ "delta ", 15.999 ]
[ "frame ", 2.285 ]
[ "prefix ", 2.285 ]
-[ "capped var ", 0.8 ]
+[ "raw runlength ", 1.999 ]
+[ "raw capped ", 1.184 ]
+[ "raw var ", 1.184 ]
+[ "capped var ", 0.881 ]
[ "var ", 0.799 ]
[ "runlength ", 0.666 ]
#select technique, factor from mosaic.analysis('sys', 'tmp4', 'i', 'linear,
runlength') order by factor desc, technique;
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list