我对社区中有关当前正在开发的应用程序的最佳实践Mongo Atlas多租户方法的想法感兴趣。到目前为止,根据我的研究,有关该方法的信息很少。
我正在使用的Web应用程序是一个基于nodejs的基本早期状态原型,可以表达,反应,打字稿,并使用Mongo Atlas作为数据库,同时使用Auth0进行身份验证。在继续构建遵循SaaS产品模型的应用程序之前,我希望数据架构正确无误。
当前状态
我已经构建了该应用程序,以允许用户注册,身份验证和更新用户个人资料。用户当前可以在Auth0中注册,从而在Auth0中创建用户,并在具有以下结构的Mongo Atlas文档中创建用户详细信息记录(名称,电话号码,电子邮件地址等):
Mongo Atlas Cluster
--users (Database)
--users (Collection)
--user_record (Document)
以下是用户记录文档的示例:
_id:ObjectID("5ced24301914b800066d629b")
given_name:"James"
family_name:"Test"
email:"email@gmail.com"
password:"$$6ag2$xVFSPdbhekW9Dx.opGJlluytGb9Ktka5uZshUg4Hw0GmOt4N/wAi."
addressLineOne:"Line 1"
addressLineTwo:"Line 2"
city:"New York"
company:"Company Name"
country:"USA"
postCode:"10001"
telephone:"555 789 987"
未来状态-多租户
当新用户注册时,我正在考虑创建一个要在群集上创建的新数据库,该数据库会将大多数应用程序数据与所有其他租户隔离开。每个租户的数据库将来都会包含不同的集合和文档,以管理其特定的应用程序设置,用户权限,项目数据等。
主要好处是:
Mongo Atlas集群结构类似于以下示例,其中有3个租户,每个租户都有自己的专用租户数据库:
Mongo Atlas Cluster
--tenant_tenant1 (Database)
--tenant_tenant2 (Database)
--tenant_tenant3 (Database)
--user_management (Database)
--user_management (Collection)
--user_record_1 (Document)
--user_record_2 (Document)
--user_record_3 (Document)
可以按照以下示例扩展user_record文档架构以标识用户的租户数据库:
_id:ObjectID("5ced24301914b800066d629b")
tenant_db:"tenant_tenant1"
tenant_db_user:"dbuserid"
tenant_db_password:"%26ag2$xVFSPdbhekW9Dx.opGJlluytGb9Ktka5uZshUg4Hw0GmOt4N/wAi"
given_name:"James"
family_name:"Test"
email:"email@gmail.com"
password:"$$6ag2$xVFSPdbhekW9Dx.opGJlluytGb9Ktka5uZshUg4Hw0GmOt4N/wAi."
addressLineOne:"Line 1"
addressLineTwo:"Line 2"
city:"New York"
company:"Company Name"
country:"USA"
postCode:"10001"
telephone:"555 789 987"
为了实现这一点,我认为Mongo Atlas API必须用作标准Mongo连接字符串,因为Mongoose特定于单个数据库。除了几乎所有的Mongo Atlas功能之外,Mongo Atlas API还允许创建数据库。
在构建应用程序时,每个租户数据库都将扩展为包括特定于租户的集合和文档。
我的主要问题是:
感谢您的帮助,并期待您对此的看法。
詹姆斯