一种均摊法实现

简介: 内容来源于alibaba的开源项目ageiport,场景:如果需要基于集群节点进行均摊,对数据进行处理分而治之的话,就可以采用。

内容来源于alibaba的开源项目ageiport,场景:如果需要基于集群节点进行均摊,对数据进行处理分而治之的话,就可以采用。


//均摊分配publicstatic<T>List<List<T>>averageAssign(List<T>source, intn) {
List<List<T>>result=newArrayList<>();
//对当前的大小进行取模intremaider=source.size() %n;
//对当前大小取整intnumber=source.size() /n;
//偏移量intoffset=0;
//对集群节点进行遍历for (inti=0; i<n; i++) {
List<T>value;
//如果模大于0,则对任务列表进行部分获取 List<E> subList(int fromIndex, int toIndex);if (remaider>0) {
value=source.subList(i*number+offset, (i+1) *number+offset+1);
remaider--;
offset++;
            } else {
value=source.subList(i*number+offset, (i+1) *number+offset);
            }
result.add(value);
        }
returnresult;
    }

测试:


//测试均摊算法publicstaticvoidmain(String[] args) {
//子任务列表List<Integer>subTaskNos=newArrayList<>();
subTaskNos.add(1);
subTaskNos.add(2);
subTaskNos.add(3);
subTaskNos.add(4);
subTaskNos.add(5);
subTaskNos.add(6);
subTaskNos.add(7);
subTaskNos.add(8);
subTaskNos.add(9);
subTaskNos.add(10);
subTaskNos.add(11);
subTaskNos.add(12);
//当前的集群节点IntegernodeCount=5;
//执行均摊List<List<Integer>>subTaskAvgByNodeCount=Lists.averageAssign(subTaskNos, nodeCount);
System.out.println(subTaskAvgByNodeCount);
    }

测试结果:

[1, 2, 3], [4, 5, 6], [7, 8], [9, 10], [11, 12]]

这个代码设计很巧妙,使用了取模和取余来实现对任务分发到不同的机器上,这样一来处理任务的时候,就可以快速完成任务的处理了。通常适应于大批量数据的处理。类似的思想:jdk中的fork-join也是分而治之的思想。


目录
相关文章
|
4月前
|
存储 算法 测试技术
大模型落地的必经之路 | GPTQ加速LLM落地,让Transformer量化落地不再困难
大模型落地的必经之路 | GPTQ加速LLM落地,让Transformer量化落地不再困难
223 0
|
4月前
|
JavaScript 前端开发
js中模糊搜索 模糊匹配如何实现?
js中模糊搜索 模糊匹配如何实现?
|
10月前
|
监控 Java 调度
分布式系列教程(17) - 分布式任务调度平台XXL-JOB
分布式系列教程(17) - 分布式任务调度平台XXL-JOB
253 0
|
供应链 监控 Java
ageiport使用
ageiport使用
317 0
ageiport使用
|
11月前
|
SQL Java 调度
大师级教程: 零基础掌握xxl-job分布式任务调度 Job Scheduling
大师级教程: 零基础掌握xxl-job分布式任务调度 Job Scheduling
318 0
大师级教程: 零基础掌握xxl-job分布式任务调度 Job Scheduling
SkyWalking 8.4.0版本中traceId的生成规则
SkyWalking 8.4.0版本中traceId的生成规则
2288 1
|
SQL 存储 缓存
关于数据仓库的Hive的Hive架构的Driver的SQL的解析器、编译器、执行器、优化器
数据仓库是一个面向分析的数据存储系统,其中包含了大量的历史数据,可以用于数据分析和报表生成。Hive是一个开源的数据仓库系统,基于Hadoop平台,可以存储和处理大规模的数据。在Hive中,SQL语句被解析器解析成抽象语法树(AST),然后编译器将其转换成物理执行计划,包括执行器和优化器的参与。本文将介绍Hive中SQL解析器、编译器、执行器和优化器的作用和原理。
349 0
|
SQL 分布式计算 运维
数据集成最佳实践:分区表作为来源表时的处理策略
分区表是指拥有分区空间的表,在集成任务中指定来源表的分区数据进行抽取,可以避免全表扫描,提高处理效率。但是来源表为分区表时也会遇到一些问题,如某些分区不存在,或者是需要抽取多个分区的数据,下面介绍一下Dataphin为这些场景提供的对应能力。
346 0
|
存储 缓存 监控
xxl-conf配置中心
### 一、实现一个轻量级简单的配置中心,同时不考虑使用zk? 1.由于我们使用的配置中心需要兼容多套环境,因此需要多环境 2.需要有权限控制 3.需要对配置的信息,能够实时响应 4.如果配置信息存储在数据库,为了减轻数据库的压力,可以进行持久化到磁盘文件中 当时这里会有一个问题需要考虑,如果持久化到磁盘,需要考虑如果配置发生了改变,需要能够实时同步到磁盘文件中,因此此时需要考虑一个线程进行实时同步。 5.对应配置信息发生增、删、改,能够实时更新和修改
280 0
xxl-conf配置中心
|
缓存 NoSQL 算法
【分布式技术专题】分布式缓存优化之初探布隆过滤器的使用指南
【分布式技术专题】分布式缓存优化之初探布隆过滤器的使用指南
251 0
【分布式技术专题】分布式缓存优化之初探布隆过滤器的使用指南