问题描述
我正在使用以下技术开发 SaaS 应用程序:
SaaS 应用程序将作为客户托管许多不同的公司。 来自 2 个不同公司的数据必须在 GraphDB 中完全隔离。 2 家不同的公司可能有不同的数据结构和模型。
- 如何在 GraphDB (Neo4J / arangoDB) 上设置多租户?
- 是否每个公司都需要一个完全独立的 GraphDB 实例?
- 是否可以在同一个 GraphDB 上托管 2 家公司,同时保持隔离?
任何人都可以为这种类型的架构提出最佳解决方案吗?
感谢您的时间
最好的问候
解决方法
由于 Neo4j 4.0 多租户支持通过多数据库。
在系统数据库中,您可以根据需要创建任意数量的数据库,并从客户端中选择一个会话一个会话地与之对话的数据库,这样您就可以将每个数据库用于一个租户。
这是 JS API:
每个数据库实例可以处理成百上千个数据库。
启用 Neo4j Fabric 后,您可以进行跨数据库联合查询。
这里还有一些例子
- https://adamcowley.co.uk/neo4j/multi-tenancy-neo4j-4.0/
- https://graphaware.com/neo4j/2020/02/06/multi-tenancy-neo4j.html
- https://neo4j.com/developer/multi-tenancy-worked-example/
使用 ArangoDB,您只需要一个实例,并且每个租户可以简单地使用一个数据库。
每个数据库都是独立的,例如,AQL 查询在单个数据库的上下文中运行,您只能访问该数据库的集合和命名图。
您可以为每个客户创建一个 ArangoDB 用户并限制其对相应数据库的访问以实现所需的隔离。
对于可扩展性和弹性,还有 OneShard 功能(企业版 / managed service)。它使您能够拥有一个集群,其中每个数据库都被视为单个分片,即客户的所有集合都存储在一个 DB-Server 上(不包括副本),以便可以在该节点上本地执行查询。这对于图遍历尤其有益。