自动化?
从理论上讲,应该可以制作一种工具,使执行这种令人生畏的操作(从单租户到多租户)变得更加容易。但是,鉴于此类产品的受众有限,我认为这样的工具并不存在。如果有一个浮出水面,那就太好了。
关于手动转换的想法
首先设计一个新的多租户数据库模式。(这意味着将所有单租户数据库模式与您可能拥有的任何共享模式合并。)我想让它像在设计时没有考虑遗留问题时那样。
您显然需要一个表,许多现有的带有列Tenant
的单租户表都需要引用该表。Tenant_id
例如,一个包含用户的表将需要它来唯一地将用户与租户相关联。
在一个简单Products
表(Product_id
作为主键)的情况下,应该可以添加一个Tenant_id
列,生成一个具有复合键(Tenant_id
和Product_id
)的表。但是,如果您从头开始编写应用程序,我相信Product
没有租户引用的表是正确的方法。这还允许租户共享产品,而不是添加重复项。因为一个租户可能有产品Product_id
1,2,3 和另一个 1,2 你不能简单地合并表,因为你不能使用相同的 ID 两次——你需要唯一的主键值。解决此问题的一种方法是编写一个程序(使用 Java 或其他高级语言),将租户数据库中的所有数据读取到内存对象中,然后将数据写入多租户模式。对下一个租户数据库重复该过程,依此类推。这样你就会有Product_id
值 1,2,3,4,5。一种快速而简单的方法是向每个模式中的所有 ID 值添加一个数字,例如 1,000、2,000 等等,然后简单地交叉手指以免出现冲突。
与数据库通信的代码
您将需要重写大多数数据库查询,以说明数据库现在是多租户的。这是一项艰巨的任务,特别是考虑到引入一个让一个租户摆弄另一个租户数据的错误的影响。然而,一些技术可以使这项任务更容易。例如,租户视图过滤器可以大大减少所需的工作量。
租户数量限制
我从未见过限制多租户结构中租户数量的建议。相反,多租户方法的优势在于其可扩展性。如今,您可以根据需要轻松创建数据库服务器集群或使用基于云的解决方案无缝添加更多硬件功能。
感兴趣的链接