-1

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

就像网络一样,用户是节点连接是边。假设友谊是一种优势。可能还有一些其他类型的连接。连接可能具有某种weights/priority

现在,当用户搜索另一个用户时,结果应该按照这样的顺序排列,即顶部的结果将是最近的节点,而最远的节点最终将取决于连接及其权重/优先级。

我找不到应该从哪里开始?我不需要任何现成的代码,但我需要学习。因此,如果您对此有所了解,请建议教程或文章。你也可以建议我在哪里学习代码。

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

4

1 回答 1

1

如果你可以自由选择你想要的数据库引擎,图数据库是最好的解决方案。您可以在此处的 Wikipedia 中找到一个非常完整的列表: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/

于 2013-03-08T13:11:44.290 回答