164 lines
4.9 KiB
C++
164 lines
4.9 KiB
C++
|
|
#include <eqpalg/data_handler/frame.h>
|
|||
|
|
#include <eqpalg/table_struct/t_rule_sample_mgr.h>
|
|||
|
|
|
|||
|
|
namespace data_handler {
|
|||
|
|
|
|||
|
|
int load_table() {}
|
|||
|
|
|
|||
|
|
template <class DataPolicy>
|
|||
|
|
Frame<DataPolicy>::Frame(const std::string& ruleId, size_t dims)
|
|||
|
|
: rule_id_(ruleId),
|
|||
|
|
rs_mgr_(ruleId, dims),
|
|||
|
|
data_mgr_(ruleId, dims),
|
|||
|
|
logger_("DataStorage[" + ruleId + "]") {}
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* @brief 载入数据,如果有历史数据,则is_first_sampling 是false
|
|||
|
|
* @return int
|
|||
|
|
*/
|
|||
|
|
template <class DataPolicy>
|
|||
|
|
int Frame<DataPolicy>::load() {
|
|||
|
|
//①步长c_r_ ②分布数据data_ ③解压缩之后的数据量dump_size_ ④scale_
|
|||
|
|
//同时将is_first_sampling的值置为false
|
|||
|
|
if (this->data_mgr_.load() == -3) {
|
|||
|
|
this->is_have_info_ = false;
|
|||
|
|
} else {
|
|||
|
|
this->is_have_info_ = true;
|
|||
|
|
}
|
|||
|
|
// 获取数据特征值 running_stats
|
|||
|
|
this->rs_mgr_.load();
|
|||
|
|
using namespace mix_cc::sql;
|
|||
|
|
T_RULE_SAMPLE_MGR rule_sample_mgr;
|
|||
|
|
auto sql_statement = select(rule_sample_mgr.lastCronTime())
|
|||
|
|
.from(rule_sample_mgr)
|
|||
|
|
.where(rule_sample_mgr.ruleId() == this->rule_id_);
|
|||
|
|
auto data_maybe = mix_cc::sql::exec<db2_t, T_RULE_SAMPLE_MGR>(sql_statement);
|
|||
|
|
if (data_maybe.is_nothing()) {
|
|||
|
|
last_cron_time_ = system_clock::now();
|
|||
|
|
|
|||
|
|
return -1;
|
|||
|
|
}
|
|||
|
|
// 查询是否为空
|
|||
|
|
auto data = data_maybe.unsafe_get_just();
|
|||
|
|
if (data.size() != 1) {
|
|||
|
|
// 2021-10-28 insert
|
|||
|
|
// auto insert_result =
|
|||
|
|
auto insert_result = mix_cc::sql::exec<db2_t, size_t>(
|
|||
|
|
insert_into(rule_sample_mgr)
|
|||
|
|
.set(rule_sample_mgr.ruleId() = this->rule_id_,
|
|||
|
|
rule_sample_mgr.lastCronTime() =
|
|||
|
|
mix_cc::mix_time_t(system_clock::now())));
|
|||
|
|
last_cron_time_ = system_clock::now();
|
|||
|
|
return -1;
|
|||
|
|
}
|
|||
|
|
last_cron_time_ = data[0].lastCronTime.to_chrono_time();
|
|||
|
|
return 0;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
template <class DataPolicy>
|
|||
|
|
bool Frame<DataPolicy>::is_first_sampling() {
|
|||
|
|
/**
|
|||
|
|
* 以下三种情况均被视为第一次采样
|
|||
|
|
* 可能db2有数据,但本地文件没有,则重新训练;
|
|||
|
|
* 可能本地文件没有数据,但db2有,则重新训练
|
|||
|
|
* 可能db2和本地文件都没有数据,则第一次训练
|
|||
|
|
*/
|
|||
|
|
return (data_mgr_.is_first_sampling() || rs_mgr_.is_first_sampling());
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* @brief 如果is_first_sampling 是true 执行
|
|||
|
|
* @return int
|
|||
|
|
*/
|
|||
|
|
template <class DataPolicy>
|
|||
|
|
int Frame<DataPolicy>::first_sampling_bath(const SampleWindow& input_data,
|
|||
|
|
TimePoint tp) {
|
|||
|
|
rs_mgr_.first_sampling(
|
|||
|
|
input_data); ///< 均值方差之类的统计信息写入二进制文件
|
|||
|
|
// 保存至 db2
|
|||
|
|
data_mgr_.first_sampling_batch(input_data, tp, rs_mgr_.get_running_stats());
|
|||
|
|
//
|
|||
|
|
//设置周期
|
|||
|
|
last_cron_time_ = system_clock::now();
|
|||
|
|
T_RULE_SAMPLE_MGR rule_sample_mgr;
|
|||
|
|
auto sql_statement = update(rule_sample_mgr)
|
|||
|
|
.set(rule_sample_mgr.lastCronTime() =
|
|||
|
|
mix_cc::mix_time_t(system_clock::now()))
|
|||
|
|
.where(rule_sample_mgr.ruleId() == this->rule_id_);
|
|||
|
|
auto effect_maybe = mix_cc::sql::exec<db2_t, size_t>(sql_statement);
|
|||
|
|
if (effect_maybe.is_just()) {
|
|||
|
|
return 0;
|
|||
|
|
}
|
|||
|
|
return -1;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
template <class DataPolicy>
|
|||
|
|
int Frame<DataPolicy>::store(const SamplePoint& data_array) {
|
|||
|
|
this->data_mgr_.store(data_array);
|
|||
|
|
this->rs_mgr_.store(data_array);
|
|||
|
|
return 0;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
template <class DataPolicy>
|
|||
|
|
int Frame<DataPolicy>::commit() {
|
|||
|
|
this->data_mgr_.commit();
|
|||
|
|
this->rs_mgr_.commit();
|
|||
|
|
return 0;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
template <class DataPolicy>
|
|||
|
|
Rs Frame<DataPolicy>::get_running_stats() {
|
|||
|
|
return this->rs_mgr_.get_running_stats();
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
template <class DataPolicy>
|
|||
|
|
SampleWindow Frame<DataPolicy>::get_extracted_data() {
|
|||
|
|
return this->data_mgr_.extract();
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
template <class DataPolicy>
|
|||
|
|
int Frame<DataPolicy>::put_data_to_rs(const SampleWindow& input_data) {
|
|||
|
|
// logger_.Info("int Frame<DataPolicy>::put_data_to_rs(const SampleWindow&
|
|||
|
|
// input_data) {");
|
|||
|
|
return this->data_mgr_.put_data_to_rs(input_data);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
template <class DataPolicy>
|
|||
|
|
vector<double> Frame<DataPolicy>::get_rs_variances() {
|
|||
|
|
return this->data_mgr_.get_rs_variances();
|
|||
|
|
}
|
|||
|
|
template <class DataPolicy>
|
|||
|
|
vector<double> Frame<DataPolicy>::get_rs_means() {
|
|||
|
|
return this->data_mgr_.get_rs_means();
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
template <class DataPolicy>
|
|||
|
|
vector<double> Frame<DataPolicy>::get_rs_kurtosis() {
|
|||
|
|
return this->data_mgr_.get_rs_kurtosis();
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
template <class DataPolicy>
|
|||
|
|
vector<double> Frame<DataPolicy>::get_rs_skewness() {
|
|||
|
|
return this->data_mgr_.get_rs_skewness();
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
template <class DataPolicy>
|
|||
|
|
vector<double> Frame<DataPolicy>::get_rs_stddev() {
|
|||
|
|
return this->data_mgr_.get_rs_stddev();
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
template <class DataPolicy>
|
|||
|
|
vector<double> Frame<DataPolicy>::get_rs_max() {
|
|||
|
|
return this->data_mgr_.get_rs_max();
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
template <class DataPolicy>
|
|||
|
|
vector<double> Frame<DataPolicy>::get_rs_min() {
|
|||
|
|
return this->data_mgr_.get_rs_min();
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
} // namespace data_handler
|
|||
|
|
|
|||
|
|
|
|||
|
|
template class data_handler::Frame<data_handler::policy::ApproximateData>;
|