文档章节

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

一贱书生
 一贱书生
发布于 2016/11/23 09:06
字数 393
阅读 1
收藏 0
点赞 0
评论 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
博文 723
码字总数 600072
作品 0
不懂NOSQL这些知识, 怎么吹牛B

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

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

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

老枪
2009/10/05
191
0
面对时代冲击,泛微的转型理念与动作

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

玄学酱
05/21
0
0
Hadoop实例:二度人脉与好友推荐

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

intergret
2013/01/03
0
12
前沿分析:社交搜索的未来

北京时间3月11日消息,据国外媒体报道,科技博客Mashable今日刊发文章《社交搜索的未来》。文章指出,未来社交搜索将不再是由用户输入 “关键词”去搜索,而是网站运用语义分析和机器学习技术...

老枪
2011/03/12
723
0
Facebook采取赤裸裸抄袭的战略 争夺用户

  曾几何时,Facebook是属于年轻人的社交网络,不过它如今已经成为“爸爸妈妈一代的乐园”,全世界年轻人都已经流向了阅后即焚的Snapchat。据外媒报道,为了追赶Snapchat,Facebook和旗下的...

IDC_之家
2017/04/14
0
0
DARPA暗网搜索引擎将引发互联网二次革命

知道吗? 你看到的互联网, 只有全部互联网的4%, 而DARPA正在开展一个雄心勃勃的项目,以搜索为中心, 向人们展示剩下的96%的互联网内容。 这个项目名为Memex, 是由美国国防部高级研究项目...

Cashcow
2016/07/01
0
0
快手的社交帝国梦,微信知道吗?

每年春节,中国人就会变戏法般的乾坤大挪移,杯中有酒,万事不理,连全民狂欢的吃鸡日活都暴降了11%,宇宙中心五道口的快手大厦却灯火通明,上千人的评审团队全员无休,在每逢佳节胖三斤的日...

bkmk01mz3w
03/24
0
0
值得CIO关注的8大CRM发展趋势 移动上榜

  【IT168信息化】   目前客户关系管理(CRM)厂商和行业分析师正在讨论哪些CRM发展趋势在未来将继续获得进一步发展,以及IT专业人员需要关注哪些新的发展趋势。   去年,值得关注和尝试...

网界网
2012/02/13
0
0
社交网络的那些事

在过去的一段时间里,社交网络发生很多事。先是之前一直被看好的 Color 并不被用户接受,后来Google+ 的亮相更是吸引了无数的眼球。在 Google+ 亮相后一天,曾经的社交网络霸主 Myspace 被新...

红薯
2011/08/04
851
2

没有更多内容

加载失败,请刷新页面

加载更多

下一页

微服务架构下的安全认证与鉴权

微服务下常见认证解决方案; OAuth认证与授权; JWT认证介绍; Spring Cloud的OAuth2实现; 单体应用转变为分布式应用 单体应用转变为分布式应用在架构方式上存在较大区别,单体应用下的简单...

Java大蜗牛
39分钟前
0
0
前端面试题汇总

最近在复习,准备找工作了,特此总结一下前端的相关知识。 1.获取浏览器URL中查询字符的参数: function getQuery(name){    var reg = new RegExp("(^|&)"+name+"=([^&]*)"(&|$));...

凛冬来袭
39分钟前
0
0
可持续发展的学习道路

与其要求别人,不如提升自己 内心渴望进步 经常做出改变现有模式,不断学习 寻找资源,整合资源,不断熟练这种模式 渠道很重要 先打开新世界的航路

狮子狗
44分钟前
0
0
apollox-lua开源项目 示例codepen2

今天在示例上增加了几个功能, 首先添加js array的标准库。 所有js array的方法目前都支持了。 添加查看code模式。 点击查看code可以看到生成的lua代码。默认web模式需要把标准库连接进来, ...

钟元OSS
59分钟前
0
0
javascript性能优化之避免重复工作

javascript最重要也最根本的性能优化标准之一是避免工作,避免工作又包括两点,第一,不做不必要的工作,第二,不做重复的已经完成的工作。第一部分可以通过代码重构完成,第二部分不做重复的...

老韭菜
今天
0
0
缓存穿透、并发和雪崩那些事

0 题记 缓存穿透、缓存并发和缓存雪崩是常见的由于并发量大而导致的缓存问题,本文讲解其产生原因和解决方案。 缓存穿透通常是由恶意攻击或者无意造成的;缓存并发是由设计不足造成的;缓存雪...

Java填坑之路
今天
1
0
项目jar包管理构建工具---Maven

一、what is Maven? 我们来寻找一下官网,里面介绍了maven到底是什么?下面一句话就有讲解到:Apache Maven is a software project management and comprehension tool. Based on the conc...

一看就喷亏的小猿
今天
0
0
JVM学习手册(一):查看堆内存使用情况以及排错

平时出现内存溢出以及死锁,一般处理方式都是查看日志,找到抛出异常的代码行,然后本地分析代码,但是这样对于线上排查十分糟糕,这段时间在研究JVM发现了几个比较好的工具和指令. 1.针对频繁GC和...

勤奋的蚂蚁
今天
1
0
17.TCP:传输控制协议

介绍 TCP和UDP使用同一网络层(IP),但TCP提供了面向连接、可靠的传输层服务 TCP传输给IP层的信息单位称为报文段或段 TCP通过如下方式保证可靠性: 应用数据被分割成TCP认为最合适发送的数据...

loda0128
今天
0
0
重装Oracle时出现environment variable "PATH"错误的解决办法

在win7 64位下重新安装oracle 11g,一直报environment variable "PATH"的错误,按说明将path里多余的路径删除,但没办法解决。选择忽略错误继续安装,装一半会报CRC错误,还是安装失败。最好...

良言
今天
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部