数据库作为网络的表示

时间:2013-03-02 00:53:20

标签: database social-networking

我正在开发一个我的项目,需要搜索一个人在网络中的位置。基本上我需要定义一个包含一些具有不同连接的用户的数据库。

与网络一样, 用户是节点 连接是边缘 。假设友谊是一种边缘。可能存在一些其他类型的连接。连接可能具有某种权重/优先级

现在,当用户搜索另一个用户时,结果应按顺序排列,使得最高结果将是最近的节点,最远的节点将最终取决于连接及其权重/优先级。< / p>

我无法找到从哪里开始的?我不需要任何现成的代码,但我需要学习。因此,如果您对此有所了解,请提供教程或文章。您也可以向我推荐我可以学习的代码。

另一个问题:可以使用MySQL数据库来表示这种类型的网络,还是需要一些特殊的数据库?

1 个答案:

答案 0 :(得分:1)

如果您可以自由选择所需的数据库引擎,图形数据库是最佳解决方案。 您可以在维基百科中找到一个完整的列表:http://en.wikipedia.org/wiki/Graph_database

另请参阅此视频: http://www.youtube.com/watch?v=UodTzseLh04

我对Neo4J(http://www.neo4j.org/)有很好的经验。它是用Java编写的,但为许多语言提供了绑定(在JMV语言中可以以嵌入模式运行)。 您也可以通过REST界面使用它。 查询图形的语言是Cypher(http://docs.neo4j.org/chunked/milestone/cypher-query-lang.html),它与SQL没有什么不同。

然而,评估中需要考虑的一个关键点是图表的大小。对如此复杂的数据进行建模的能力主要是在多台机器上有效扩展的难度(分区图是NP难问题)。 Neo4J可以在一台机器上处理大量节点,但是如果你需要一个非常大的图表,我建议你尝试Titan(http://thinkaurelius.github.com/titan/)。

有关泰坦的更多信息:http://www.slideshare.net/slidarko/titan-the-rise-of-big-graph-data

如果将来你需要大量处理:http://thinkaurelius.github.com/faunus/