当前位置: 首页 > 面试题库 >

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

云何平
2023-03-14
问题内容

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

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

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

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

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

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


问题答案:

麦克风,

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

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

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

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

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



 类似资料:
  • 给定我有两个微服务:服务A和服务B。 服务A拥有完整的客户数据,服务B需要该数据的一小部分(例如,它通过一些批量加载从服务A获得)。 这两种服务都将客户存储在自己的数据库中。 如果服务B随后需要与服务A交互,例如获取额外数据(例如get/customers/{id}),那么它显然需要在两个服务之间共享的唯一标识符。 由于ID是GUID,我可以在服务B中创建记录时简单地使用服务A中的PK。因此两个P

  • 我有一个DBA创建的表。我想为每个表提供实体类以供进一步查询。有人能建议如何使用eclipse自动创建实体类吗?

  • 本文向大家介绍使用Nodejs连接mongodb数据库的实现代码,包括了使用Nodejs连接mongodb数据库的实现代码的使用技巧和注意事项,需要的朋友参考一下 一个简单的nodejs连接mongodb示例,来自 mongodb官方示例 1. 创建package.json 首先,创建我们的工程目录connect-mongodb,并作为我们的当前目录 输入npm init命令创建package.j

  • 本文向大家介绍在Docker中使用mongodb数据库的实现代码,包括了在Docker中使用mongodb数据库的实现代码的使用技巧和注意事项,需要的朋友参考一下 获取 mongo 镜像 运行 mongodb 服务 运行 mongodb 客户端 使用 mongo-express 管理mongodb mongo-express是MongoDB的一个可视化图形管理工具,这里我们还是通过docker来运

  • 问题内容: 我有一个由DBA创建的表。我想为每个表提供实体类以进行进一步查询。有人可以建议如何使用eclipse自动创建实体类吗? 问题答案: 如果使用JPA进行持久化,则可以使用Eclipse提供的“ JPA工具”从表生成Java实体类。 这是教程

  • 问题内容: 是否可以使用Symfony2控制台工具从数据库生成单个实体? 在编码过程中,我不得不添加一个表,并对现有实体类进行了修改。因此,我不希望重新生成所有实体。 任何建议将不胜感激! 问题答案: 我遇到了同样的问题,您必须这样做: 然后 您要生成的文件结尾在哪里(例如xml,yml,注释) 最后 像这样的学说只会加载您需要的实体。只是要小心过滤器,您必须使用CamelCase! 希望这能够帮