我正在为vk.com开发约会应用程序(这是俄罗斯脸书),所以我需要保持社交图(由共同的兴趣,朋友,最喜欢的音乐,电影等链接的个人资料)。它看起来像是“用户A比用户C更接近用户B,因为他们有2个共同的朋友和5个共同的兴趣,而不是1个共同的朋友和4个共同的兴趣”,“用户C最接近...",等等。这个问题的好解决方案是什么?我从数学中了解图形的理论,但我还没有在计算机科学中使用过图形(我是web开发人员),我认为这个问题可以通过为任何用户生成图形并将其保存在NoSQL数据库(如mongo或redis)中来解决,但这是一个糟糕的解决方案(没有实时更改,生成将需要很长时间)。你对这个问题怎么看?
发布于 2012-04-02 10:19:29
你可以考虑推特的一个选择是FlockDB (Neo4j已经被提到过了)。如果您的问题空间是大规模的简单查询,这可能是合适的。它不像Neo那样支持图形漫游查询,但被Twitter用来存储他们的社交图,并支持诸如“谁做了一个关注”等查询。
发布于 2012-04-02 06:12:59
与基于键值的数据库相比,有更多专门的NoSQL解决方案。看看像neo4j这样的图形数据库。图形数据库将很容易让您以直观的方式存储和操作图形。许多基于图形的算法将运行得非常快(与sql相比)。
你还应该看看大型社交网络是如何做到这一点的,特别是如果你对分析整个图感兴趣的话(对于数据挖掘,这超出了单个用户的实时计算)。据我所知,facebook使用大量缓存的MySQL数据库来处理web请求,Hadoop/HBase和Hive来处理繁重的数据计算。除了他们的消息平台,facebook的大多数实时部分都不需要NoSQL。
发布于 2012-04-02 21:36:45
老实说,我不认为Facebook将他们的主要数据存储在图形数据库中。我认为他们存储了朋友列表和兴趣列表,等等。看看他们的文档至少会告诉你它是如何组织的。如果信息“我喜欢电影”与我的帐户和兴趣“电影”相关联,就可以很容易地查找我喜欢什么以及谁也喜欢电影。
为了计算整体的“贴近度”...如果你只需要至少有一个共同朋友的人,那么直接评估所有这些人的亲密度可能已经足够快了。否则,我会考虑使用更高维度的近似k-d树搜索,对搜索空间中的维度进行内部测试。
https://stackoverflow.com/questions/9968694
复制相似问题