【发布时间】:2015-02-25 20:55:16
【问题描述】:
我是图形数据库的新手,有一个问题可能对你们来说很容易回答。
如果我决定将图形数据库(例如 Neo4j)用于类似社交网络的应用程序,我是否还要在该数据库中保存个人资料信息和帖子,还是需要第二个数据库,例如 MySQL?
我找到的所有示例,仅在图形数据库中保存了一些属性(例如名称和关系)。因此我的问题。
非常感谢
【问题讨论】:
标签: neo4j social-networking graph-databases
我是图形数据库的新手,有一个问题可能对你们来说很容易回答。
如果我决定将图形数据库(例如 Neo4j)用于类似社交网络的应用程序,我是否还要在该数据库中保存个人资料信息和帖子,还是需要第二个数据库,例如 MySQL?
我找到的所有示例,仅在图形数据库中保存了一些属性(例如名称和关系)。因此我的问题。
非常感谢
【问题讨论】:
标签: neo4j social-networking graph-databases
您可以将该信息直接存储在图形数据库中。这不仅是可能的,而且甚至被推荐,因为这些信息可能会影响您想要对数据库运行的各种遍历查询。
在任何时候,您都可能希望为经常交互(通过帖子)的用户创建一个单独的层。将这些信息保存在图形数据库中会很方便。
个人资料信息也是如此。也许您只想对特定类型的个人资料(单身男人等)进行遍历,然后您需要在图形数据库中准备好该信息。
我会说:除非您有特定的理由在图形数据库旁边使用 MYSQL,否则您可能应该在图形数据库中执行所有操作。
注意事项:
额外的担忧:
所以我应该为每个配置文件创建一个节点,包含配置文件属性和与帖子节点的关系?
这有点棘手,答案是肯定的,但根据用户发表的帖子数量,该用户节点(顶点)可能会成为超级节点。 “超级节点”是具有不成比例的大量入射边的顶点。这可能会导致性能问题。为了解决这个问题,您需要确保您的图形数据库能够正确处理这些实例;通常通过实现以顶点为中心的索引。我有一段时间没有检查了,但上次我做的 Neo4j 不支持这些。 OrientDb 和 Titan(以及其他)可以。如果 Neo4j 现在有一些支持,有人可以纠正我。
这将取决于您决定如何遍历图形,您认为在遍历过程中必须扫描多少条传出边等等。一般来说,您需要通过确定哪些查询来开始该过程你要制作,然后相应地对图形进行建模。
Neo4j 和 OrientDb 的限制有何不同?
Neo4j 的限制似乎是理论上定义的。从这里额外的 cmets 来看,他们似乎计划在短期内增加它们。 OrientDb 和 Titan 被认为是用于更大图的数据库,因此目前它们的限制更高。 实际上,即使这些限制相距甚远,真正的问题是“你要达到它们吗”。我过去对此的回答是肯定的,这就是我今天使用 Titan 的原因。但 Neo4j 的局限性通常足够高,足以满足大多数人的需求。
【讨论】: