一尘不染

使用MongoDB作为主数据库,是否应该使用单独的图形数据库来实现实体之间的关系?

redis

我们目前正在为一家专业公司内部实施类似于CRM的解决方案。由于所存储信息的性质以及信息的不同值和键,我们决定使用文档存储数据库,因为它非常适合此用途(在这种情况下,我们选择MongoDB)。

作为此CRM解决方案的一部分,我们希望存储实体之间的关系和关联,例如包括存储利益冲突,股东,受托人等的冲突。以最有效的方式将所有这些实体链接在一起,我们确定了“关系”的中心模型是必要的。所有关系都应附有历史信息(开始和终止日期),以及各种元数据;例如,股东关系也将包含所持股份数量。

由于传统的RDBMS解决方案不适合我们以前的需求,因此在当前情况下使用它们是不可行的。我要确定的是在我们的案例中使用图形数据库是否更相关,或者实际上仅使用mongo的内置关系信息是否合适。

关系信息将在整个系统中大量使用。我们希望执行的一些信息查询的示例是:

  • 获取作为“ xyz limited”“客户”的公司的所有“关键联系人”人员
  • 获取以“约翰”为股东的公司的所有其他“股东”
  • 获取实体的所有“主要联系人”,这些实体是“ abc limited”的“客户”并且是“ trust us bank limited”的客户

给定这种关系的“树”结构,使用图形数据库(例如Neo4j)更合适吗?


阅读 424

收藏
2020-06-20

共1个答案

一尘不染

麦克风,

您应该能够将关系数据存储在图形数据库中。它在遍历大图上的高性能来自局部性,即您不必全局运行查询,而是启动一组节点(在您的情况下,它们等于文档,由索引查找。您甚至可以存储start-
node-在您的mongo文档中快速访问的ID)。从那里您可以在恒定的时间内遍历任意大的路径(wrt数据集大小)。

您还有其他要求(即数据集大小,并发访问数等,关系/图形复杂度)。

您的查询非常适合图数据库,并且可以用术语轻松表示。

我建议您只是获取一个像neo4j这样的graphdb,然后对您的域进行快速调试,以验证一般的可行性,并在投资第二种技术之前找出您想回答的其他问题。

PS:如果您还没有开始,那么您还可以使用纯graphdb方法,因为图形数据库是文档数据库的超集。而且无论如何,您宁愿谈论自己的领域,而不仅仅是通用文档。(例如,structor是在Neo4j之上构建的CMS)。

2020-06-20