首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >具有数千万用户的现实社会网络模型。我应该使用哪些技术?

具有数千万用户的现实社会网络模型。我应该使用哪些技术?
EN

Stack Overflow用户
提问于 2011-01-12 17:35:06
回答 4查看 796关注 0票数 3

我正试图建立一个现实的社交网络(Facebook)。我是一名计算机科学研究生,所以我掌握了基本的数据结构和算法。

的想法:

我是用java开始这个项目的。我的想法是创建多个用户区域。在给定区域内的每个用户都会有一个随机的朋友数量,并且在给定的平均值附近有正态分布。每个用户将有很大比例或群集的“朋友”从他们所属的地区。剩下的“朋友”将是来自几个不同随机区域的较小的集群。

初始结构

我想创建一个区域的ArrayList

ArrayList<Area> areas

每个区域都有一个用户的ArrayList

ArrayList<User> users

每个用户都持有“朋友”的ArrayList

ArrayList<User> friends

从那里,我可以遍历每个区域,每个用户在该区域,并给用户他们的朋友大部分来自该地区,以及一些朋友从几个随机区域。只要我的数据集仍然很小,这就足够容易了。

问题:

当我尝试创建大型数据集时,由于堆中没有更多的内存,所以我得到了一个OutOfMemoryError。我现在意识到这样做是不可能的,如果我想创建30个区域,每个地区有100万用户,每个用户有200个朋友。我吃了几乎2gb和1 Area...So现在是什么。如果我能提前创建所有的用户,然后简单地“给”每个用户朋友,我的算法就能工作。但是我需要首先创建的区域和用户。需要有一个用户在一个地区才能成为一个“朋友”。

下一步:

我喜欢我的算法,它简单易懂。我需要的是一个更好的方法来存储这些数据,因为它不能同时存储和保存在内存中。我不仅需要访问用户所属的区域,而且还需要为每个用户访问一些随机区域。

我的问题:

  1. 我应该把这些数据放入什么技术/数据结构中。最后,我基本上想要一个用户->朋友关系。“区域”概念是使这种关系切合实际的一种方式。
  2. 我应该一起用一种不同的语言。我知道Lucene、Hadoop等技术是用Java创建的,用于大量的data...But --我从未使用过它们,在深入研究新事物之前希望得到一些指导。
  3. 我该从哪里开始?显然,对于内存中的数据,我不能只使用java。但我也需要创建这些领域的用户,然后我才能给一个用户的朋友名单。

抱歉,我读了半篇文章,但我想说清楚我在哪里,这样你就能引导我朝正确的方向前进。感谢大家花时间阅读/帮助我做这个话题。

EN

回答 4

Stack Overflow用户

发布于 2011-01-12 17:57:12

您需要一个可搜索的存储解决方案来保存您的数据(而不是全部保存在内存中)。具有O/RM (如Hibernate)的关系数据库(如Oracle、MySQL或Server)或nosql数据库(如mongodb )都可以正常工作。

票数 2
EN

Stack Overflow用户

发布于 2011-01-12 17:46:21

  1. 使用ORM工具JPAHibernate等数据库,
  2. 当真正需要数据时,延迟加载数据()
  3. 当它们不是真正需要或不活动时,从Cache/Session卸载它们。

如果有任何困难要理解的话,让我知道感觉很舒服。

http://puspendu.wordpress.com/

票数 0
EN

Stack Overflow用户

发布于 2011-01-12 17:55:49

除非您计划使用某些可视化算法中的每个节点来显示关系,否则可能无法将其全部保存在内存中。

所以,如果你使用一个数据库,你可以建立你的关系,给出随机的人口学信息,如果你也想建模的话,那就只是写你的查询。

但是,如果您确实需要大量的数据,那么通过使用64位Java,您可以将内存设置为更大的数量,这取决于计算机上的内容。

因此,一旦建立了关系,就可以开始编写查询,以不同的方式将信息关联起来。

当大小不同时,您可能希望使用列表而不是数组,以便在读取数据时不会浪费内存。我想这就是你内存不足的主要原因,如果你假设有100个用户,其中最多的朋友是50个,但大多数会有10个,那么对于绝大多数用户来说,你在浪费空间,尤其是在你处理数百万用户的时候,因为每个对象的指针将变得非常重要。

您可能想重新检查您的数据结构,我希望您有一些不正确的地方。

您还可能希望使用一些监视工具,此页面可能会有所帮助:http://www.scribd.com/doc/42817553/Java-Performance-Monitoring

即使是像j控制台这样简单的东西,也可以帮助您了解应用程序的运行情况。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4671947

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档