我对多租户应用有一个想法,我正在尝试决定是否应该使用一个大型数据库或为每个租户使用单独的数据库。
我甚至不知道后者是否可以在Rails中使用,或者在Heroku上使用rails。
我也不知道这是一个好主意,还是成本过高。
但我想开始我只是想知道它是否可能。
答案 0 :(得分:3)
多租户有很多种方法,每种方法各有利弊。 Postgres有一个名为schemas
的好功能,这意味着您可以拥有一个数据库但内部有多个名称空间。对于Rails来说,这可以是一个方便的解决方案,因为Rails设计用于仅与一个数据库连接。它很容易与apartment gem集成。它负责基于指定规则的迁移和租户切换,通常是子域。但这种解决方案有缺点。虽然Postgres对模式的数量没有任何限制,但是当你有很多时,迁移将永远需要。备份存在问题。 Heroku建议使用少于50个模式。
如果你想拥有多个物理数据库,那么使用Rails有点棘手。有一些宝石允许连接到多个数据库。最近我听说octoshark gem,但我没有使用它。
总之,如果你想要在没有太多工作的情况下获得良好的隔离,那么Postgres架构是很好的。它在Heroku上也具有成本效益,因为您只使用一个数据库。但它不会为很多租户扩展。多个数据库提供了最佳隔离,但我认为在Rails中对此解决方案的支持并不是那么好。由于您需要为每个租户配置单独的数据库,因此成本很高。最后一种方法是使用一个数据库,并使用tenant_id
将所有租户数据作为范围。在此解决方案中,您需要保证隔离,这需要额外的工作,并且很容易错过应用程序的某些部分。