与 OFBiz 相比,Moqui 在多租户功能方面具有各种附加功能,但是它确实使用了相同的方法,即一个应用服务器(或应用服务器集群)和每个租户一个数据库(或者如果数据库被拆分,每个租户一个多个数据库) .
要真正支持单个数据库中的大量租户,需要大量工具。您基本上必须在多租户层中构建功能,不仅可以处理应用程序需求,还可以处理通常直接使用数据库完成的所有其他事情(其他应用程序、报告、导出/迁移、需要时的隔离备份等)。当规模真的很大时,您还需要构建对跨多个数据库服务器的分片租户的支持。换句话说,要正确、完整地做这件事并不是一件简单的事情。
100 个租户还不错,您可以使用每个租户一个数据库来做到这一点。最好构建自动化来配置租户,您可以基于 Moqui 中已有的租户配置服务来实现。如果您(例如)希望将每个数据库服务器限制为 50 或 100 个或任何租户,您甚至可以向其添加逻辑以跨多个数据库服务器“分片”租户。您可以通过这种方式扩展到数千个租户,但您当然需要处理其他扩展细节。
您当然可以使用向每个实体添加一个tenantId 的方法,或者让实体外观自动执行此操作(可能适用于除租户公共组中的所有实体之外的所有实体)。如果您想跨租户进行报告,并且每个租户的数据量不是太大,那么这可能是一个不错的选择。
您可以仅为您的自定义实体执行此操作,但根据所需的功能,您可能还需要将其添加到 Moqui 实体。例如,如果您希望用户在不同的租户之间隔离,您必须将一个tenantId 添加到 UserAccount 和大多数其他安全实体(用于授权、用户组、权限等)。您也可以将一个tenantId 作为非 PK 字段添加到 UserAccount(使用扩展实体以避免修改原始实体定义),然后根据经过身份验证的用户(或者如果用户在单独的联接表中查找租户)可以访问多个租户)。
复杂性和可能的变化是无穷无尽的......一切都取决于你想做什么!
与此最接近的概念是 Mantle 数据模型中的组织方。各种事物旨在支持同一系统中的多个组织,但它们之间没有严格的隔离。这实际上适用于伞形组织内的多个部门和其他较小的组织。