文档章节

对于超大型的社交网站,展示两个人之间的“连接关系”或“社交路径”

一贱书生
 一贱书生
发布于 2016/11/23 09:06
字数 393
阅读 1
收藏 0

/**
 * 功能:

[java] view plain copy

 

  1. /** 
  2.  * 思路: 
  3.  * 1)针对每个朋友ID,找出所在机器的位置:int machine_index=getMachineIDForUser(personID); 
  4.  * 2)转到编号为#machine_index的机器。 
  5.  * 3)在那台机器上,执行:Person friend=getPersonWithID(person_id)。 
  6.  *  
  7.  * 定义一个Server类,包含一份所有机器的列表,还有一个Machine类,代表一台单独的机器。通过散列表,有效地查找数据。 
  8.  * 
  9.  */  
  10.   
  11. class Server{  
  12.     HashMap<Integer,Machine> machines=new HashMap<Integer, Machine>();  
  13.     HashMap<Integer,Integer> personToMachineMap=new HashMap<Integer, Integer>();  
  14.       
  15.     public Machine getMachineWithId(int machineID){  
  16.         return machines.get(machineID);  
  17.     }  
  18.       
  19.     public int getMachineIDForUser(int personID){  
  20.         return personToMachineMap.get(personID);  
  21.     }  
  22.       
  23.     public Person getPersonWithId(int personID){  
  24.         Integer machineID=getMachineIDForUser(personID);  
  25.         if(machineID==null)  
  26.             return null;  
  27.         Machine machine=getMachineWithId(machineID);  
  28.         if(machine==null)  
  29.             return null;  
  30.         return machine.getPersonWithId(personID);  
  31.     }  
  32.       
  33. }  
  34.   
  35. class Machine{  
  36.     public int machineID;  
  37.     public HashMap<Integer,Person> persons=new HashMap<Integer, Person>();  
  38.       
  39.     public Person getPersonWithId(int personID){  
  40.         return persons.get(personID);  
  41.     }  
  42.       
  43. }  
  44.   
  45. class Person{  
  46.     private int personID;  
  47.     private ArrayList<Integer> friendID;  
  48.       
  49.     public Person(int id){  
  50.         this.personID=id;  
  51.     }  
  52.       
  53.     public int getID(){  
  54.         return this.personID;  
  55.     }  
  56.       
  57.     public void addFriend(int id){  
  58.         this.friendID.add(id);  
  59.     }     
  60.       
  61. }  
  62.   
  63. /** 
  64.  * 优化:减少机器间跳转次数 
  65.  *      从一台机器跳转到另外一台机器的开销很昂贵,不要为了找到某个朋友就在机器之间任意跳转,而是试着批处理这些跳转动作。 
  66.  * 优化:智能划分用户和机器 
  67.  *      根据地域划分 
  68.  *  
  69.  * 问题:广度优先搜索要求标记访问过的节点,如何处理 
  70.  *      同一时间可能会执行很多搜索操作,因此直接编辑数据的做法并不妥当。可以利用散列表模仿节点的标记动作,以查询节点id,是否被访问过。 
  71.  */ 

© 著作权归作者所有

共有 人打赏支持
一贱书生
粉丝 19
博文 724
码字总数 600123
作品 0
不懂NOSQL这些知识, 怎么吹牛B

NOSQL这个概念其实唱了好多好多年了,但是真正浸淫其中, 理解深刻并享受到红利的人占比其实并不高。 近期笔者自己会在大数据、图数据等方面边学习边记录一些笔记,持续分享自己的心得体会,此...

曲高和寡_健
2017/03/24
0
0
美博客建议Facebook应克隆谷歌Wave

导语:国外科技博客乔希·坎顿(Josh Catone)今天撰文称,Facebook应该克隆“谷歌Wave”,推出“Facebook Wave”。 以下为该博客全文: 从历史上看,有许多好的创意因为过于超前而难有成就。平...

老枪
2009/10/05
191
0
CMS系统:物联网时代的社交新形态

如今,随着移动网络的迅速发展,即将到来的5G高速网络,以及大数据、云技术等技术的快速发展,物联网生态系统将面临前所未有的井喷式发展。使物联网产业逐渐由硬件向软件、平台化发展,由过去...

ThinkSNS账号
09/05
0
0
Hadoop实例:二度人脉与好友推荐

在新浪微博、人人网等社交网站上,为了使用户在网络上认识更多的朋友,社交网站往往提供类似“你可能感兴趣的人”、“间接关注推荐”等好友推荐的功能。一直很好奇这个功能是怎么实现的。 其...

intergret
2013/01/03
0
12
面对时代冲击,泛微的转型理念与动作

毋庸置疑,管理软件行业正在发生变革,“转型”也好,“创新”也罢,在以移动、云计算为代表的新技术驱动下,传统商业模式、技术架构、服务模式等等企业经营模式终归是在发生悄然而又激烈的变...

玄学酱
05/21
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Python介绍

Python介绍 一、简介 Python是完全面向对象的语言。函数、模块、数字、字符串都是对象。并且完全支持继承、重载等,有益于增强源代码的复用性。Python相对于Lisp这种传统的函数式编程语言,P...

星汉
14分钟前
0
0
VS_设置护眼背景色

工具---->选项---->环境---->字体和颜色:

一个小妞
17分钟前
0
0
Flask跨域请求的处理方法

在Flask开发RESTful后端时,前端请求会遇到跨域的问题。下面是解决方法: 使用 flask-cors库可以很容易的解决 pip install flask-cors 两种方法,一个是全局/批量的,一个是单一独立的: 安全...

ykbj
18分钟前
2
0
Pandas学习记录-Series

系列(Series)是能够保存任何类型的数据(整数,字符串,浮点数,Python对象等)的一维标记数组。轴标签统称为索引。 pandas.Series Pandas系列可以使用以下构造函数创建 - pandas.Series( dat...

kipeng300
25分钟前
0
0
可以实现内网穿透的几款工具

最近没什么事情,看了一些关于内网穿透的文章,因我本身已是做微信开发相关的工作,对这部分关注的比较多,现分享给大家。 首先说下内网穿透的原理。 NAPT原理 在NAT网关上会有一张映射表,表...

哥本哈根的小哥
26分钟前
23
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部