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

Reply via email to