一种均摊法实现

简介: 内容来源于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也是分而治之的思想。


目录
相关文章
|
6月前
|
移动开发 JavaScript 前端开发
分享一些XSS Payload
分享一些XSS Payload
120 0
|
6月前
|
JavaScript 前端开发
js中模糊搜索 模糊匹配如何实现?
js中模糊搜索 模糊匹配如何实现?
|
安全 Linux 网络安全
【超详细】Linux系统修改SSH端口教程
在linux中,默认的SSH端口号为22,由于这是咱们都知道的端口号,一旦有入侵者进行端口扫描的时候扫描出22端口,就立马知道这是进行SSH登录的端口号,因而咱们需要修改默认的端口号。
8198 1
【超详细】Linux系统修改SSH端口教程
|
供应链 监控 Java
ageiport使用
ageiport使用
366 0
ageiport使用
|
6月前
|
索引
filebeat 设置索引的 max_result_window
在 Filebeat 中设置索引的 max_result_window 需要修改 Elasticsearch 的索引模板。max_result_window 参数定义了在 Elasticsearch 中执行搜索时,最大返回文档的数量。默认情况下,该值为 10000。 要修改该值,可以按照以下步骤操作: 打开 Filebeat 的配置文件。 找到输出部分,其中定义了 Elasticsearch 输出。 在 Elasticsearch 输出配置中,找到索引模板相关的配置。 确保你已经定义了自定义的索引模板(如果没有,请创建一个)。 在索引模板中,设置 max_result_window 参数为
111 1
|
运维 程序员 测试技术
如何保证项目质量?层层卡点,一次把事情做对!
如何保证项目质量?层层卡点,一次把事情做对!
191 0
|
存储 监控 数据可视化
Golang链路追踪:实现高效可靠的分布式系统监控
Golang链路追踪:实现高效可靠的分布式系统监控
|
JSON Cloud Native 中间件
导入导出框架AGEIPort(GEI)正式开源
AGEIPort 是数字供应链孵化并在阿里巴巴集团内广泛使用的一套性能卓越、稳定可靠、功能丰富、易于扩展、生态完整的数据导入导出方案,致力于帮助开发者在toB复杂业务场景下能够快速交付高性能、体验优、易维护的数据导入导出功能,如用户页面上的Excel/CSV数据文件上传和下载。 目前在阿里巴巴集团内部已有盒马、菜鸟、本地生活、阿里健康、钉钉、淘系等部门有较多使用,并成为多个技术组件的基础底座,经历多次618和双11大促考验,稳定导入导出数据300~400亿条/月。
38127 9
导入导出框架AGEIPort(GEI)正式开源
|
开发框架 前端开发 JavaScript
当年很流行,现在已经淘汰的前端技术有哪些?
当年很流行,现在已经淘汰的前端技术有哪些?
292 0
|
消息中间件 存储 监控
消息队列与任务队列的区别
消息队列和任务队列是我们在软件系统中常常遇到的概念。尽管它们的名字相似,但实际上它们有不同的用途和工作原理。本文将介绍消息队列和任务队列之间的区别。
581 0