2015-08-31 13:52:17 +00:00
|
|
|
|
#pragma once
|
|
|
|
|
|
|
|
|
|
#include <array>
|
|
|
|
|
|
|
|
|
|
namespace DB
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
/** Данные для HyperLogLogBiasEstimator в функции uniqCombined.
|
|
|
|
|
* Схема разработки следующая:
|
2015-09-02 00:17:10 +00:00
|
|
|
|
* 1. Собрать ClickHouse.
|
2015-08-31 13:52:17 +00:00
|
|
|
|
* 2. Запустить скрипт src/dbms/scripts/gen-bias-data.py, который возвращает один массив для getRawEstimates()
|
|
|
|
|
* и другой массив для getBiases().
|
|
|
|
|
* 3. Обновить массивы raw_estimates и biases. Также обновить размер массивов в InterpolatedData.
|
2015-09-02 00:17:10 +00:00
|
|
|
|
* 4. Собрать ClickHouse.
|
2015-08-31 13:52:17 +00:00
|
|
|
|
* 5. Запустить скрипт src/dbms/scripts/linear-counting-threshold.py, который создаёт 3 файла:
|
|
|
|
|
* - raw_graph.txt (1-й столбец: настоящее количество уникальных значений;
|
|
|
|
|
* 2-й столбец: относительная погрешность в случае HyperLogLog без применения каких-либо поправок)
|
|
|
|
|
* - linear_counting_graph.txt (1-й столбец: настоящее количество уникальных значений;
|
|
|
|
|
* 2-й столбец: относительная погрешность в случае HyperLogLog с применением LinearCounting)
|
|
|
|
|
* - bias_corrected_graph.txt (1-й столбец: настоящее количество уникальных значений;
|
|
|
|
|
* 2-й столбец: относительная погрешность в случае HyperLogLog с применением поправок из алгортима HyperLogLog++)
|
|
|
|
|
* 6. Сгенерить график с gnuplot на основе этих данных.
|
|
|
|
|
* 7. Определить минимальное количество уникальных значений, при котором лучше исправить погрешность
|
|
|
|
|
* с помощью её оценки (т.е. по алгоритму HyperLogLog++), чем применить алгоритм LinearCounting.
|
|
|
|
|
* 7. Соответственно обновить константу в функции getThreshold()
|
2015-09-02 00:17:10 +00:00
|
|
|
|
* 8. Собрать ClickHouse.
|
2015-08-31 13:52:17 +00:00
|
|
|
|
*/
|
|
|
|
|
struct UniqCombinedBiasData
|
|
|
|
|
{
|
2015-10-08 14:23:23 +00:00
|
|
|
|
using InterpolatedData = std::array<double, 200>;
|
2015-08-31 13:52:17 +00:00
|
|
|
|
|
|
|
|
|
static double getThreshold();
|
|
|
|
|
/// Оценки количества уникальных значений по алгоритму HyperLogLog без применения каких-либо поправок.
|
|
|
|
|
static const InterpolatedData & getRawEstimates();
|
|
|
|
|
/// Соответствующие оценки погрешности.
|
|
|
|
|
static const InterpolatedData & getBiases();
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
}
|