`
臻是二哥
  • 浏览: 190469 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
博客专栏
Group-logo
Java技术分享
浏览量:0
社区版块
存档分类
最新评论

大规模分布式系统架构与设计实战笔记8

阅读更多
用fourinone实现的基于整型读写的上亿排序
import com.fourinone.BeanContext;

public class ParkServerDemo
{
	public static void main(String[] args)
	{
		BeanContext.startPark();
	}
}

import com.fourinone.*;
import java.util.*;
import com.fourinone.ArrayAdapter.*;
//public class Worker extends MigrantWorker
public class Worker extends MigrantWorker
{
	int total=25000000;//总共的数据数
	int max=100000;//最大数据
	int block=100000;//每次处理多少数据
	int groups=16;//一共将数据分成多少组
	int groupnum=max/groups;//每组多少数据
	String path="d://tmp";//文件位置
	Workman[] wms=null;

	public Worker(){}
	public Worker(int total,int max,int block,int groups,String path)
	{
		this.total=total;
		this.max=max;
		this.block=block;
		this.groups=groups;
		this.groupnum=max/groups;
		this.path=path;
	}
	public WareHouse doTask(WareHouse wh)
	{

		int index=getSelfIndex();
		
		int step=(Integer)wh.getObj("step");

		if(wms==null)
		{
			wms=getWorkerAll();
		}
	    WareHouse result=new WareHouse("ok",1);
        //long begin=(new Date()).getTime();
		if(step==1)
		{
			//生成16个文件
			FileAdapter[] fas=new FileAdapter[groups];
			for(int i=0;i<groups;i++)
				fas[i]=new FileAdapter(path+"//"+index+"//"+i+"//data");
			//要处理的文件
			FileAdapter fa=new FileAdapter(path+"//"+index+"//data");
			for(int n=0;n<(total/block);n++)
			{
				//每次处理1000个数据
				int [] its=fa.getIntReader(n*block,block).readIntAll();
               //开辟一个ArrayList数组
				ArrayList<ArrayList<Integer>> list=new ArrayList<ArrayList<Integer>> ();
				for(int p=0;p<groups;p++)
				{
					list.add(new ArrayList<Integer>());
				}

				int temp=-1;
				for(int m=0;m<block;m++)
				{
					temp=its[m]/groupnum;
					//System.out.println(temp);
					list.get(temp).add(its[m]);	
				}
				for(int k=0;k<groups;k++)
				{
					fas[k].getIntWriter().writeListInt(list.get(k));
				}
			}
		}
		else if(step==2)
		{
			for(int i=0;i<16;i++)
			{
				FileAdapter fa=new FileAdapter(path+"//"+index+"//"+i+"//data");
				int[] nums=fa.getIntReader().readIntAll();
				if((i/4)!=index)
				{
					WareHouse out=new WareHouse();
					out.put("i",i);
					out.put("v",nums);
					//将文件挪到(i/4)号节点的i文件中去
					wms[i/4].receive(out);		
				}
				fa.close();	
			}
		}
		else if(step==3)
		{
			int total=0;
			for(int i=0;i<16;i++)
			{
				
				if((i/4)==index)
				{
					FileAdapter fa=new FileAdapter(path+"//"+index+"//"+i+"//data");
					int [] nums=fa.getIntReader().readIntAll();
					ListInt is=ArrayAdapter.getListInt();
					is.sort(nums);

					total+=nums.length;
                    

					FileAdapter tofa=new FileAdapter(path+"//"+index+"//"+i+".data");
					tofa.getIntWriter().writeInt(nums);
					System.out.println("写数据到"+i+".data");
					fa.close();
				}
				else
				{
					FileAdapter fa=new FileAdapter(path+"//"+index+"//"+i);
					fa.delete();
					fa.close();
				}
				
			}
			result.setObj("total",total); 
		}
		return result;
	}
	protected boolean receive(WareHouse inhouse)
	{
		Integer i=(Integer)inhouse.get("i");
	    int [] nums=(int [])inhouse.get("v");
        int index=i/4;
        FileAdapter fa=new FileAdapter(path+"//"+index+"//"+i+"//data");
		fa.getIntWriter().writeInt(nums);
		System.out.println("文件"+i+"放到"+index+"节点上");
		return true;
	}

	public static void main(String [] args)
	{
		Worker w=new Worker(Integer.parseInt(args[2]),Integer.parseInt(args[3]),Integer.parseInt(args[4]),Integer.parseInt(args[5]),args[6]);
		w.waitWorking(args[0],Integer.parseInt(args[1]),"Worker");
	}

}

import com.fourinone.Contractor;
import com.fourinone.WareHouse;
import com.fourinone.WorkerLocal;
import java.util.Date;

public class Ctor extends Contractor
{
	public WareHouse giveTask(WareHouse wh)
	{
		WorkerLocal[] wks = getWaitingWorkers("Worker");
		System.out.println("wks.length:"+wks.length+";"+wh);
		int total=0;
		System.out.println("第一步");
		wh.setObj("step", 1);//1:group;
		doTaskBatch(wks, wh);
	
	System.out.println("第二步");
		wh.setObj("step", 2);//2:merge;
		doTaskBatch(wks, wh);
System.out.println("第三步");
		wh.setObj("step", 3);//3:sort
		WareHouse[] hmarr = doTaskBatch(wks, wh);
		for(int i=0;i<hmarr.length;i++){
			Object num = hmarr[i].getObj("total");
			if(num!=null)
				total+=(Integer)num;
		}
		wh.setObj("total",total);
		return wh;
	}
	
	public static void main(String[] args)
	{
		Ctor a = new Ctor();
		WareHouse wh = new WareHouse();
		long begin = (new Date()).getTime();
		a.doProject(wh);
		long end = (new Date()).getTime();
		System.out.println("total:"+wh.getObj("total")+",time:"+(end-begin)/1000+"s");
	}
}

附件是生成的一亿个整型随机数的代码
0
0
分享到:
评论
4 楼 evanzzy 2014-08-12  
就是普通整型数组,不用排序,直接按照下标放就可以了。
3 楼 臻是二哥 2014-08-12  
用什么存储的1亿个数据,用那种算法拍的序
2 楼 臻是二哥 2014-08-11  
直接死掉了,你可以试试
1 楼 evanzzy 2014-08-11  
弄一个上亿的整型数组可不可以?直接对号入座就是了,用不了多少内存。

相关推荐

    构建JAVA大型分布式电商项目实战高并发集群分布式系统架构PDF+视频.rar

    本项目实战教程涵盖了高并发、集群以及分布式系统架构等关键知识点,旨在帮助Java架构师提升技能,实现高性能、高可用和可扩展的电商系统。 1. **Java基础与高级特性** - Java的基础语法、面向对象编程、异常处理...

    大规模分布式存储系统 : 原理解析与架构实战

    原来的PDF版有85M,过大。这个是epud版,只有6M,方便阅读和摘抄笔记。

    千锋《锋迷商城》项目学习笔记2-分布式与微服务

    本篇笔记将着重讨论分布式系统的概念、微服务架构的特点、分布式与微服务的关联,以及在Java环境下如何实践这一架构。 首先,分布式系统是由多个通过网络连接协同工作的计算机组成的系统,它们可以跨越多个物理位置...

    etcd实战及其原理分析.pdf

    etcd是一个基于Go语言构建的开源分布式键值存储系统,设计目标是为分布式系统提供强一致性的、高可用的配置共享和服务发现功能。它专注于提供可靠的分布式键值存储,使得在分布式环境中管理和共享关键数据变得简单。...

    Kubernetes(k8s)2020版入门笔记和资料(尚).zip

    总之,Kubernetes是现代云原生架构的重要组成部分,它提供了强大的容器编排能力,帮助开发者和运维人员更高效地管理大规模分布式应用。通过深入学习和实践提供的资料,你将能够掌握这一关键技术,并在实际工作中发挥...

    基于golang的分布式百万级即时通讯系统.zip

    Go语言以其简洁的语法、高效的内存管理和强大的并发能力,特别适合构建高并发、高性能的分布式系统,如即时通讯系统。 在即时通讯系统中,主要涉及到以下几个关键技术点: 1. **并发处理**:Go语言的goroutine和...

    Doris实战笔记-be依赖包

    在IT行业中,数据库管理系统起着至关重要的作用,而Doris是一款高性能、分布式的数据仓库系统,专为在线分析处理(OLAP)设计。本篇将深入探讨Doris实战中的"BE"部分,以及与之相关的依赖包,特别是C++编程语言在...

    redis3分布式集群部署

    ### Redis 3 分布式集群部署详解 #### 一、Redis 概述 Redis (Remote Dictionary Server) 是一...通过这种方式,不仅可以有效提升 Redis 的性能和可用性,还能满足大规模应用的需求。希望本文能为读者提供参考价值。

    项目讲义 SaaS平台.rar

    标题中的“项目讲义 SaaS平台.rar”表明这是一个关于SaaS(Software as a Service)平台的项目学习资料,其中可能涵盖了构建和管理SaaS...通过深入学习和实践,可以提升在构建大规模分布式系统和SaaS平台方面的技能。

    java全集资料共享网盘链接

    - **分布式系统**:深入理解分布式系统的特性,包括CAP理论、一致性哈希算法等,为解决大规模分布式系统问题提供思路。 ### 面试准备 - **Java架构面试专题汇总**:收集常见的Java架构面试题目及答案,帮助求职者...

    Dubbo入门到精通架构高级课程(视频+课件+源码)

    8. **实战项目**:通过实际项目,整合Dubbo与其他技术(如Spring Boot、MyBatis等),搭建完整的分布式系统。 9. **性能优化**:学习如何对Dubbo进行性能调优,提高服务响应速度和系统吞吐量。 10. **故障排查**:...

    hadoopprocessing-ma开发笔记

    Hadoop是一个开源框架,专为分布式存储和处理大规模数据集而设计。这个开发笔记可能深入探讨了Hadoop的核心组件,包括HDFS(Hadoop分布式文件系统)和MapReduce编程模型。 【描述】虽然描述简洁,但我们可以推测这...

    华为工程师总结的笔记.docx

    3. **CentOS Linux系统管理**:涵盖CentOS的日常管理,包括系统启动与关机、用户环境设置、文件系统管理等。 4. **Linux必备命令**:这是Linux操作的核心,学习如cd、ls、mkdir、rm等基本命令,以及管道、重定向等...

    SSM实战项目——Java高并发秒杀API,详细流程+学习笔记

    5. **读写分离与分库分表**:对于大规模的秒杀系统,可能需要对数据库进行读写分离和水平扩展,通过分库分表策略减轻单库压力。 6. **数据库优化**:使用索引优化查询效率,设计合理的数据模型,减少join操作,避免...

    互联网框架笔记.zip

    通过这些文件,我们可以学习到构建和优化大规模互联网应用所需的关键技能,包括但不限于项目管理、Web开发框架、数据库设计、分布式缓存、搜索引擎和消息队列等。这些知识对于理解现代互联网架构和提升开发效率至关...

    Linux学习笔记资料

    Linux高级篇进一步提升了学习的深度和广度,涉及到性能优化、大规模数据备份、Shell脚本编程,以及自动化运维工具Puppet、Ansible和Jenkins的实战应用。Shell脚本的掌握能够帮助你编写自动化维护和部署的工具,提升...

    hadoop学习笔记

    2. MapReduce:并行计算模型,将大规模数据处理任务分解为“映射”(map)和“化简”(reduce)两个阶段,实现数据的分布式处理。 二、Hadoop架构 Hadoop架构包含NameNode、DataNode、JobTracker和TaskTracker等关键...

    hadoop学习笔记.rar

    HDFS提供了一个高容错、高吞吐量的数据存储系统,而MapReduce则是用于处理和生成大规模数据集的编程模型。 二、Hadoop学习笔记之五:使用Eclipse插件 Eclipse插件是开发Hadoop应用的重要工具,它提供了集成的开发...

Global site tag (gtag.js) - Google Analytics