neo4j - 社交网络图数据库和个人资料信息

标签 neo4j social-networking graph-databases

我是图形数据库的新手,有一个问题可能对你们来说很容易回答。

如果我决定将图形数据库(例如 Neo4j)用于类似社交网络的应用程序,我是否还要在该数据库中保存个人资料信息和帖子,或者我是否需要第二个数据库,例如 MySQL?

我找到的所有示例都只在图形数据库中保存了一些属性(例如名称和关系)。因此我的问题。

非常感谢

最佳答案

您可以将该信息直接存储在图形数据库中。这不仅是可能的,而且甚至被推荐,因为该信息可能会影响您希望对数据库运行的各种遍历查询。

在任何时候,您可能希望为经常互动(通过帖子)的用户创建一个单独的层。将这些信息保存在图形数据库中会很方便。

个人资料信息也是如此。也许您只想对特定类型的个人资料(单例男性等)进行遍历,那么您需要在图形数据库中掌握这些信息。

我会说:除非你有特定的理由在你的图形数据库中使用 MYSQL,否则你应该在图形数据库中做所有事情。

注意事项:

  • 根据您的需要,编制索引可能会很棘手。您通常需要稍微考虑一下您的数据模型,而不是盲目地投入其中。
  • 留意您选择的图形数据库可以处理的最大元素数。
  • 某些内容(例如图像 blob 等)可能不适合存储在数据库中。不过我从来没有研究过这个,所以我可能是错的。

额外的问题:

所以我应该为每个配置文件创建一个节点,包含配置文件属性和与帖子节点的关系?

这有点棘手,答案是肯定的,但根据用户发布的帖子数量,该用户节点(顶点)可能会成为 super 节点。 “超节点”是具有不成比例的大量入射边的顶点。这可能会导致性能问题。为了解决这个问题,您需要确保您的图形数据库能够正确处理这些实例;通常通过实现以顶点为中心的索引。我有一段时间没有检查了,但上次我做 Neo4j 不支持这些。 OrientDb 和 Titan(以及其他)可以。如果 Neo4j 现在有一些支持,有人可以纠正我。

这将取决于您决定如何遍历图形,您认为在遍历过程中必须扫描多少传出边等。通常,您需要通过确定查询内容来开始该过程您将要制作图形,然后相应地对其建模。

Neo4j 和 OrientDb 在限制上有什么区别?

Neo4j 的局限性似乎是在理论上定义的。从这里的额外评论来看,他们似乎计划在短期内增加它们。 OrientDb 和 Titan 被认为是更大图的数据库,因此目前它们的限制更高。 实际上,即使这些限制相去甚远,真正的问题是“你要打他们吗”。我过去对此的回答是肯定的,这就是我今天使用 Titan 的原因。但 Neo4j 的限制通常足够高,可以满足大多数人的需求。

关于neo4j - 社交网络图数据库和个人资料信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28729383/

相关文章:

neo4j - 考虑到关系方向性,计算密码中的总路径成本

java - 如何在 Neo4j 中查找/匹配/选择标识符名称

xhtml - XFN:我应该使用 'a' 还是 'link' 元素?

Gremlin Javascript 遍历永远不会解决

database - 具有数千条边的neo4j

colors - Neo4j 中的着色节点取决于属性

python - 在 python 中的 neo4j 中 inode

neo4j - Neo4j浏览器无法登录

c# - 我们可以在 asp.net c# web 应用程序中嵌入对 twitter、linkedin、facebook、buzz 的授权吗?

Facebook 终于在时间线上启用了主题标签 - 是否有可用的搜索/流 API?