社交网络图数据库和个人资料信息
Social Networking Graph Database and Profile Information
我是图形数据库的新手,有一个问题可能很容易为你们解答。
如果我决定将图形数据库(例如 Neo4j)用于类似社交网络的应用程序,我是否还要在该数据库中保存个人资料信息和帖子,或者我是否需要第二个数据库,例如 MySQL?
我找到的所有示例都只在图形数据库中保存了一些属性(例如名称和关系)。所以我的问题。
非常感谢
您可以将该信息直接存储在图形数据库中。这不仅是可能的,而且甚至被推荐,因为该信息可能会影响您希望对数据库进行的各种遍历查询运行。
在任何时间点,您可能希望为经常交互的用户创建一个单独的层(通过 posts)。将这些信息放在图形数据库中会很方便。
个人资料信息也是如此。也许您会希望 运行 仅针对特定类型的个人资料(单身男性等)进行遍历,然后您需要在图形数据库中掌握该信息。
我会说:除非你有特定的理由在你的图形数据库中使用 MYSQL,否则你应该在图形数据库中做所有事情。
一些注意事项:
- 索引可能会很棘手,具体取决于您的需要。您通常需要稍微考虑一下您的数据模型,而不是盲目地投入其中。
- 留意您选择的图形数据库可以处理的最大元素数。
- 某些内容(例如图像 blob 等)可能不适合存储在数据库中。我从来没有研究过这个,所以我可能是错的。
额外关注:
所以我应该为每个配置文件创建一个节点,包含配置文件属性和与 post 节点的关系?
这有点棘手,答案是肯定的,但根据用户创建的 post 的数量,该用户节点(顶点)可能会成为超级节点。 “超节点”是具有不成比例的大量入射边的顶点。这可能会导致性能问题。为了解决这个问题,您需要确保您的图形数据库能够正确处理这些实例;通常通过实施以顶点为中心的索引。我有一段时间没有检查了,但上次我做 Neo4j 不支持这些。 OrientDb 和 Titan(以及其他)可以。如果 Neo4j 现在有一些支持,有人可以纠正我。
这将取决于您决定如何遍历图形,您认为在遍历过程中必须扫描多少条出边等等。一般来说,您需要通过弄清楚来开始这个过程您将要进行哪些查询,然后相应地对图形建模。
Neo4j和OrientDb在限制上有什么区别?
Neo4j 的局限性似乎是理论上定义的。从这里的额外评论来看,他们似乎计划在短期内增加它们。 OrientDb 和 Titan 被认为是更大图的数据库,因此目前它们的限制更高。
实际上,即使这些限制相去甚远,真正的问题是 "are you going to hit them"。我过去对此的回答是肯定的,这就是我今天使用 Titan 的原因。但是 Neo4j 的限制通常足够高,可以满足大多数人的需求。
我是图形数据库的新手,有一个问题可能很容易为你们解答。
如果我决定将图形数据库(例如 Neo4j)用于类似社交网络的应用程序,我是否还要在该数据库中保存个人资料信息和帖子,或者我是否需要第二个数据库,例如 MySQL?
我找到的所有示例都只在图形数据库中保存了一些属性(例如名称和关系)。所以我的问题。
非常感谢
您可以将该信息直接存储在图形数据库中。这不仅是可能的,而且甚至被推荐,因为该信息可能会影响您希望对数据库进行的各种遍历查询运行。
在任何时间点,您可能希望为经常交互的用户创建一个单独的层(通过 posts)。将这些信息放在图形数据库中会很方便。
个人资料信息也是如此。也许您会希望 运行 仅针对特定类型的个人资料(单身男性等)进行遍历,然后您需要在图形数据库中掌握该信息。
我会说:除非你有特定的理由在你的图形数据库中使用 MYSQL,否则你应该在图形数据库中做所有事情。
一些注意事项:
- 索引可能会很棘手,具体取决于您的需要。您通常需要稍微考虑一下您的数据模型,而不是盲目地投入其中。
- 留意您选择的图形数据库可以处理的最大元素数。
- 某些内容(例如图像 blob 等)可能不适合存储在数据库中。我从来没有研究过这个,所以我可能是错的。
额外关注:
所以我应该为每个配置文件创建一个节点,包含配置文件属性和与 post 节点的关系?
这有点棘手,答案是肯定的,但根据用户创建的 post 的数量,该用户节点(顶点)可能会成为超级节点。 “超节点”是具有不成比例的大量入射边的顶点。这可能会导致性能问题。为了解决这个问题,您需要确保您的图形数据库能够正确处理这些实例;通常通过实施以顶点为中心的索引。我有一段时间没有检查了,但上次我做 Neo4j 不支持这些。 OrientDb 和 Titan(以及其他)可以。如果 Neo4j 现在有一些支持,有人可以纠正我。
这将取决于您决定如何遍历图形,您认为在遍历过程中必须扫描多少条出边等等。一般来说,您需要通过弄清楚来开始这个过程您将要进行哪些查询,然后相应地对图形建模。
Neo4j和OrientDb在限制上有什么区别?
Neo4j 的局限性似乎是理论上定义的。从这里的额外评论来看,他们似乎计划在短期内增加它们。 OrientDb 和 Titan 被认为是更大图的数据库,因此目前它们的限制更高。 实际上,即使这些限制相去甚远,真正的问题是 "are you going to hit them"。我过去对此的回答是肯定的,这就是我今天使用 Titan 的原因。但是 Neo4j 的限制通常足够高,可以满足大多数人的需求。