文档章节

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

一贱书生
 一贱书生
发布于 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
私信 提问
腾讯和头条,构建类脑神经元网络的两条路线之争

     前言:在中国的社交网络领域,今日头条(抖音)等异军突起,对腾讯的优势地位产生了挑战,在这篇文章中用互联网大脑模型,分析了腾讯和今日头条产生竞争的关键领域,并提出腾讯和今...

人工智能学家
01/11
0
0
不懂NOSQL这些知识, 怎么吹牛B

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

曲高和寡_健
2017/03/24
0
0
给社交软件“一星保护”:95后在想什么

给社交软件“一星保护”:95后在想什么 当今社会发展如此之快,已不再是从前所说十年一个代沟,而是五年乃至更短,社交领域也基本上五年就有新一代的用户涌入,如何紧跟新一代社交用户的想法...

ThinkSNS账号
2018/10/25
0
0
面对时代冲击,泛微的转型理念与动作

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

玄学酱
2018/05/21
0
0
CMS系统:物联网时代的社交新形态

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

ThinkSNS账号
2018/09/05
0
0

没有更多内容

加载失败,请刷新页面

加载更多

hbase的预region分区 脚本 经典

一、Region 概念 Region是表获取和分布的基本元素,由每个列族的一个Store组成。对象层级图如下: Table (HBase table) Region (Regions for the table) Store ...

stys35
2分钟前
0
0
Git删除分支/恢复分支

Git删除分支/恢复分支 • 删除一个已被终止的分支 如果需要删除的分支不是当前正在打开的分支,使用branch -d直接删除 git branch -d <branch_name> • 删除一个正打开的分支 如果我们在试图...

onedotdot
17分钟前
0
0
CSS学习笔记

# 1、CSS介绍 CSS 指层叠样式表 (Cascading Style Sheets),定义如何显示HTML元素。 CSS规则由两个主要的部分构成:选择器,以及一条或多条声明: p{color:red; text-align:left;} 其中p为选择...

davidwbnu
19分钟前
0
0
CTS测试流程及注意事项

一、测试前的准备 1.测试环境:在Linux系统下测试 安装SDK,JDK,ADB,Python工具包。 2.下载媒体文件包: 下载网站:https://source.android.com/compatibility/cts/downloads (在网页的最下方...

天王盖地虎626
31分钟前
3
0
技术码霸阐述——Spring Cloud Netflix:熔断器:Hystrix Clients

Netfilix创建了一个名为Hystrix的库,实现了熔断器模式。在微服务架构中,它通常有多个服务调用层。 一: 微服务图 一个底层服务的故障会引发直至用户交互层的连锁故障。在一个设定时长为“m...

java知识分子
37分钟前
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部