一种均摊法实现

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


目录
相关文章
|
8月前
|
JavaScript 前端开发
js中模糊搜索 模糊匹配如何实现?
js中模糊搜索 模糊匹配如何实现?
|
供应链 监控 Java
ageiport使用
ageiport使用
384 0
ageiport使用
|
8月前
|
索引
filebeat 设置索引的 max_result_window
在 Filebeat 中设置索引的 max_result_window 需要修改 Elasticsearch 的索引模板。max_result_window 参数定义了在 Elasticsearch 中执行搜索时,最大返回文档的数量。默认情况下,该值为 10000。 要修改该值,可以按照以下步骤操作: 打开 Filebeat 的配置文件。 找到输出部分,其中定义了 Elasticsearch 输出。 在 Elasticsearch 输出配置中,找到索引模板相关的配置。 确保你已经定义了自定义的索引模板(如果没有,请创建一个)。 在索引模板中,设置 max_result_window 参数为
123 1
|
8月前
|
Web App开发 存储 自然语言处理
推荐一款价值几万元的免费开源GPTs导航!还可自定义数据源做成通用导航站!
推荐一款价值几万元的免费开源GPTs导航!还可自定义数据源做成通用导航站!
153 0
|
8月前
|
JavaScript 前端开发 程序员
明确了!国家发布程序员和搬砖民工一样,都是农民工!
前几天我们发现,人社局官网发布了一则报告,显示软件开发和信息技术服务业都属于新生农工,不只是码农,所有在互联网工作者(户籍在老家的)都属于民工。
|
JSON Cloud Native 中间件
导入导出框架AGEIPort(GEI)正式开源
AGEIPort 是数字供应链孵化并在阿里巴巴集团内广泛使用的一套性能卓越、稳定可靠、功能丰富、易于扩展、生态完整的数据导入导出方案,致力于帮助开发者在toB复杂业务场景下能够快速交付高性能、体验优、易维护的数据导入导出功能,如用户页面上的Excel/CSV数据文件上传和下载。 目前在阿里巴巴集团内部已有盒马、菜鸟、本地生活、阿里健康、钉钉、淘系等部门有较多使用,并成为多个技术组件的基础底座,经历多次618和双11大促考验,稳定导入导出数据300~400亿条/月。
38191 9
导入导出框架AGEIPort(GEI)正式开源
|
开发框架 前端开发 JavaScript
当年很流行,现在已经淘汰的前端技术有哪些?
当年很流行,现在已经淘汰的前端技术有哪些?
385 0
|
消息中间件 存储 监控
消息队列与任务队列的区别
消息队列和任务队列是我们在软件系统中常常遇到的概念。尽管它们的名字相似,但实际上它们有不同的用途和工作原理。本文将介绍消息队列和任务队列之间的区别。
607 0
|
机器学习/深度学习 存储 人工智能
深度学习模型部署综述(ONNX/NCNN/OpenVINO/TensorRT)(上)
今天自动驾驶之心很荣幸邀请到逻辑牛分享深度学习部署的入门介绍,带大家盘一盘ONNX、NCNN、OpenVINO等框架的使用场景、框架特点及代码示例。
深度学习模型部署综述(ONNX/NCNN/OpenVINO/TensorRT)(上)
|
canal 监控 关系型数据库
Elastic实战:通过logstash-input-jdbc实现mysql8.0全量/增量同步至ES7.x
上一期我们讲解了如何通过canal实现增量/全量同步但因为canal本身基于binlog。所以在binlog开启之前的历史数据是不会同步的。 因此要实现真正的全量同步,还需要针对binlog开启之前的历史数据进行全量同步。
1050 2
Elastic实战:通过logstash-input-jdbc实现mysql8.0全量/增量同步至ES7.x

热门文章

最新文章