首页 > 解决方案 > 图数据库中的多租户架构

问题描述

我想与您分享我的想法并尝试获得一些建议。我想用尽可能好的架构来定义我的应用程序。任何评论将不胜感激。开始了...

我的技术: NestJs(Node)、neo4j/arangodb(graph DB)、Nginx for proxy(微服务方法)。

我的业务案例: SaaS 应用程序。许多客户拥有许多用户,每个客户一个数据库和我们代码库的相同代码(只有一个实例)。
我们有一组数据模型,对于所有客户来说都是相同的,但它们之间的关系会有所不同。根据我的研究,GraphDB 是此类操作的最佳匹配。所以我计划为每个客户创建单独的实例/数据库,否则太多的关系将难以扩展。

问题:从我的角度来看,可以通过两种不同的方法看到问题。

  1. 我需要允许多个用户使用相同的代码同时连接到不同的数据库(只需一次安装)。在 Nestjs App 中,如何更改每个 API 请求的数据库配置。我是否应该根据用户/客户类型将数据库 URI 保存在表中,它将获取数据库 URI?然后其他问题,例如它是否会影响延迟时间,如果任何请求失败,那么请求是否有可能从错误的数据库中获取数据?
  2. 我们如何在 neo4j/arangodb 中创建子图,以便我们可以根据客户获取子图。

另一方面,我发现了几个有趣的链接:
https://neo4j.com/developer/multi-tenancy-worked-example/
https://www.arangodb.com/enterprise-server/oneshard/
https:// /dzone.com/articles/multitenant-graph-applications

有人可以向我提供其他信息吗?

谢谢你的时间

此致

标签: node.jsneo4jmulti-tenantgraph-databasesarangodb

解决方案


使用 ArangoDB,一个可行的解决方案是:

  • 为所有客户使用单一数据库
  • 在该数据库中使用 Foxx 微服务来提供对所有数据的访问
  • 在每次调用 Foxx 时强制使用tenantId 值
  • 为该数据库中的每个租户使用专用集合
  • 在 ArangoDB 前面设置一个 Web 服务器(例如 Node.js),为所有租户提供数据
  • 仅允许从该前端 Web 服务器连接到 Foxx

每个租户都需要一些集合,具体取决于您的解决方案,尽量保持该数量尽可能低。

该模型运行良好,您可以在实例/区域之间迁移客户,因为他们的数据是可移植的,因为它在集合中。


推荐阅读