【问题标题】:Social Networking Graph Database and Profile Information社交网络图数据库和个人资料信息
【发布时间】:2015-02-25 20:55:16
【问题描述】:

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

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

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

非常感谢

【问题讨论】:

    标签: neo4j social-networking graph-databases


    【解决方案1】:

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

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

    个人资料信息也是如此。也许您只想对特定类型的个人资料(单身男人等)进行遍历,然后您需要在图形数据库中准备好该信息。

    我会说:除非您有特定的理由在图形数据库旁边使用 MYSQL,否则您可能应该在图形数据库中执行所有操作。

    注意事项:

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

    额外的担忧:

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

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

    这将取决于您决定如何遍历图形,您认为在遍历过程中必须扫描多少条传出边等等。一般来说,您需要通过确定哪些查询来开始该过程你要制作,然后相应地对图形进行建模。

    Neo4j 和 OrientDb 的限制有何不同?

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

    【讨论】:

    • 感谢您的即时答复。所以我应该为每个配置文件创建一个节点,包含配置文件属性和与帖子节点的关系(然后将包含帖子属性)?
    • 您提示注意最大元素数量的提示使我进入了此页面neo4j.com/docs/stable/…,但那里显示的数字让我感到害怕,因为与 OrientDB @ 的数字相比,它们似乎很小987654322@ 为什么它们有这么大的不同?我是不是误会了什么?
    • 嘿,这只是一个提醒,让您知道,一旦我可以使用笔记本电脑,我会尽快解决您的疑虑和问题!我不确定正确的 SO 程序是什么,但我确信我可以修改我的答案。
    • 谢谢。非常感谢您的回答。
    • 没问题。我忘了提及,但如果您是 Java 开发人员,您可能想看看 tinkerpop 堆栈 (tinkerpop.com),更具体地说是蓝图 (github.com/tinkerpop/blueprints/wiki)。您可以编写与数据库无关的代码并选择稍后使用(或切换)哪个数据库
    猜你喜欢
    • 1970-01-01
    • 2011-05-19
    • 2011-04-10
    • 1970-01-01
    • 2021-10-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多