diff options
| author | chenzizhan <[email protected]> | 2024-07-16 14:44:58 +0800 |
|---|---|---|
| committer | chenzizhan <[email protected]> | 2024-07-16 14:44:58 +0800 |
| commit | a47ec2b6babe917447909afb777917d48957cd2a (patch) | |
| tree | d577e80d2cdcecb5b297936b3005f949dbe1652c /src | |
| parent | 482d4ce120cfa93105991c5edaa3105848a188fe (diff) | |
accuracy test; fix a bug in spread_sketch_reset
Diffstat (limited to 'src')
| -rw-r--r-- | src/cells/spread_sketch.c | 6 | ||||
| -rw-r--r-- | src/cells/spread_sketch.h | 7 | ||||
| -rw-r--r-- | src/cube.c | 29 |
3 files changed, 35 insertions, 7 deletions
diff --git a/src/cells/spread_sketch.c b/src/cells/spread_sketch.c index a05d2bd..4486c4c 100644 --- a/src/cells/spread_sketch.c +++ b/src/cells/spread_sketch.c @@ -13,6 +13,11 @@ // todo:把primary metric 记到sketch 里,且使用特殊的st Hyperloglog // todo: topk 也是这样 +/* +1. 修改set primary metric 为 set sampling +2. 增加一个list key 和一堆根据key 查base64之类的接口 +3. serialize 不用实现带exdata的情况 +*/ struct entry { int ref_count; @@ -336,6 +341,7 @@ void spread_sketch_reset(struct spread_sketch *ss) { memset(ss->level_cnt, 0, sizeof(ss->level_cnt)); ss->level_cnt[0] = ss->depth * ss->width; + ss->level_min = 0; } void spread_sketch_set_exdata_schema(struct spread_sketch *ss, exdata_new_cb new_fn, exdata_free_cb free_fn, exdata_merge_cb merge_fn, exdata_reset_cb reset_fn, exdata_copy_cb copy_fn) { diff --git a/src/cells/spread_sketch.h b/src/cells/spread_sketch.h index 9717238..64f30f7 100644 --- a/src/cells/spread_sketch.h +++ b/src/cells/spread_sketch.h @@ -20,6 +20,8 @@ void spread_sketch_free(struct spread_sketch *ss); void spread_sketch_reset(struct spread_sketch *ss); int spread_sketch_add(struct spread_sketch *ss, const char *key, size_t key_length, uint64_t item_hash, void *arg); +// void spread_sketch_add(struct spread_sketch *ss, const char *key, size_t key_length, const char* item, size_t item_len, void *arg); +// TODO: 增加add_hash 接口 void spread_sketch_set_exdata_schema(struct spread_sketch *ss, exdata_new_cb new_fn, exdata_free_cb free_fn, exdata_merge_cb merge_fn, exdata_reset_cb reset_fn, exdata_copy_cb copy_fn); void *spread_sketch_get0_exdata(const struct spread_sketch *ss, const char *key, size_t key_len); @@ -28,6 +30,11 @@ void *spread_sketch_get0_exdata(const struct spread_sketch *ss, const char *key, int spread_sketch_get_count(const struct spread_sketch *ss); size_t spread_sketch_list(const struct spread_sketch *ss, void **exdatas, size_t n_exdatas); +// 一系列对于spread sketch的查询 +// size_t spread_sketch_list_keys(const struct spread_sketch *ss, const char *keys[], size_t n_keys); +// const uint32_t spread_sketch_query_register(ss, const char *key, size_t key_len); + +// size_t spread_sketch_list(const struct spread_sketch *ss, void **exdatas, size_t n_exdatas); void spread_sketch_merge(struct spread_sketch *dest, const struct spread_sketch *src); @@ -137,6 +137,28 @@ struct cube_manager *cube_manager_new() { return pthis; } +void print_field_array(const struct field *fields, size_t n_field) +{ + printf("dimension with length %zu \n", n_field); + for (size_t i = 0; i < n_field; i++) { + printf("%s: ", fields[i].key); + switch (fields[i].type) + { + case FIELD_VALUE_INTEGER: + printf("%lld\n", fields[i].value_longlong); + break; + case FIELD_VALUE_DOUBLE: + printf("%lf\n", fields[i].value_double); + break; + case FIELD_VALUE_CSTRING: + printf("%s\n", fields[i].value_str); + break; + default: + break; + } + } +} + static void field_array_to_key(const struct field fields[], size_t n_tags, char **out_key, size_t *out_key_size) { if (n_tags == 0) { @@ -303,13 +325,6 @@ void cube_manager_calibrate(struct cube_manager *pthis, const struct cube_manage } } - // for (int i = 0; i < pthis->cube_cnt; i++) { - // if (pthis->cube[i] == NULL) { - // continue; - // } - // metric_manifest_manager_free(pthis->cube[i]->manifest_manager); - // pthis->cube[i]->manifest_manager = metric_manifest_manager_copy(master->cube[i]->manifest_manager); - // } } struct cube_manager *cube_manager_fork(const struct cube_manager *src) |
