以下内容,都经过本人实践验证过。

若转发,请在标题上标记[转],并注明原文链接:http://www.cnblogs.com/robinjava77/p/6285747.html,作者名称:robin。

并在文章首行附上本段话。否则,作者保留追究的权利。

 

术语定义:

1.片:本周、本月、本年、近两月、近三月、近半年、近一年和至今八个维度

 

 

诉求:基于**年的日数据,进行计算汇总,分别以本周、本月、本年、近两月、近三月、近半年、近一年和至今八个维度进行统计精准性修复,时间消耗越低越好。

 

场景:

1.日数据是每日都会进行各类综合计算,形成的业务基础数据。

2.每日只会保留当日的片数据。

3.当日片数据是根据当日日数据、昨日片数据和需要去掉的日数据,综合计算而保存下来。

4.日数据,在未发现错误前,都是可靠的。

5.日数据,少量错误,修复少量key的片数据。

6.某日的日数据,出现大量甚至是全量key的数据错误,则需进行全量精准性修复。

 

应对第六个场景,就出现了我们上文提到的诉求。

 

 

两年的基础日数据大约在***亿多条,由于系统现在仍然处于第一代架构:单进程java+oracle的原始架构。无法使用后续升级的架构:①zk+多进程java去中心化分布式计算;②mongo+spark;③hadoop+spark等等来更优地去解决现在的诉求。

 

因此本文仅针对:单进程java+oracle解决上述诉求来进行说明。如果有同类诉求的场景,最好是在项目架构时,根据实际情况,直接选择更好的架构去进行开发。这样能避免一些让人十分尴尬的场景。本人所负责的项目,启动之初,由于没有业务大神参与,领导只能选择简单易掌控的架构,好让所有开发人员,都能将主要精力投入业务规则的摸索和熟悉。

 

废话说太多,直接上主菜。

 

针对这个诉求,自己前前后后花了一定的时间才解决。现在按实践的时间前后顺序,分别是:①集团作战方案;②一锅乱炖方案;③分而治之方案。

 

所有日数据,都是基于key进行唯一性标识,片的日数据量=key数量*8。

Key的数量仅是***万级。

 

以下是一些基础类定义和变量说明

 1 // List<String> keys集团线程的1万个key
 2 //List<Unit> units 片定义数据集合
 3 Class Unit{
 4     String name;//片标识
 5     Integer startDay;//片起始日期
 6     Integer endDay;//片截止日期
 7     Integer indexDay;//片的索引日期
 8 }
 9 Class DayData{
10     Integer day;//日期
11     Number data;//日数据
12     String key;//
13 }
基础类定义和变量说明

相关文章:

  • 2022-01-16
  • 2022-12-23
  • 2021-12-05
  • 2021-11-17
  • 2021-12-20
  • 2022-01-02
  • 2021-05-24
  • 2021-12-13
猜你喜欢
  • 2021-12-05
  • 2021-12-05
  • 2021-09-07
  • 2022-12-23
  • 2021-12-05
  • 2021-10-18
相关资源
相似解决方案